腾讯统计/平台sig生成算法(js版)

2025-10-06 17:16:12

1、腾讯关于sig算法说明(通用):双方维护同一份私钥,在发起请求的时候,发起方(合作方)将当前的请求参数数组,按照key值进行排序,然后'key=value'拼接到加密串后,进行md5的编码。接收方(H5轻应用统计)以同样的处理方式,对ts小于或等于30分钟的请求进行处理,sig一致则合法,否则失败。

php样例:

$secret_key = '3023IU&^_W(5#@';ksort($params);foreach ($params as $key => $value) {$secret_key.= $key.'='.$value;}$sign = md5($secret_key);return $sign

2、在我们发送请求时,官方会对sig进行对比验证合法性,要求将请求参数数组如:{id:a,as:b}进行key值排序在直接key=value排序,那要将参数json数组排序,a排列最前z最后,则例子应该是{as:b,id : a},拼接后是as=b&id=a,了解这个思路后,我们开始用js来处理。

3、首先我们可以将参数随意拼接到url上,像这样:

http:123.com?app_id=500558827&start_date=2017-12-05&end_date=2017-12-06&idx=pv

4、然后执行将url参数处理成json数组js函数:

 parseQueryString: function (url) {

       var reg_url = /^[^\?]+\?([\w\W]+)$/,

      reg_para = /([^&=]+)=([\w\W]*?)(&|$|#)/g,

      arr_url = reg_url.exec(url),

      ret = {};

      if (arr_url && arr_url[1]) {

      var str_para = arr_url[1], result;

      while ((result = reg_para.exec(str_para)) != null) {

           ret[result[1]] = result[2];

       }

   }

   return ret;

   }

5、将数组按key排序后按key=value拼接处理:

objKeySort:function(obj){

var sec = this.你自己的私钥secret_key;

var newkey = Object.keys(obj).sort();

var newObj = '';

      //以下代码为key=value拼接方法

for(var i = 0;i<newkey.length;i++){

sec=sec+(newkey[i]+'='+obj[newkey[i]])

}

return sec

}

6、最后在html里引入md5:

<script src="http://cdn.bootcss.com/blueimp-md5/1.1.0/js/md5.js"></script>

执行md5 js代码:md5(obj)

7、完整示例:

我们将参数拼接进url:http:123.com?app_id=500558827&start_date=2017-12-05&end_date=2017-12-06&idx=pv ;

js 完整代码:var real_url = http:123.com?app_id=500558827&start_date=2017-12-05&end_date=2017-12-06&idx=pv ;

生成 sig = md5(objKeySort(parseQueryString(real_url)))

本人也写了一个简单sig生成工具:可以直接输入拼接url即可生成sig:

腾讯统计/平台sig生成算法(js版)

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢