腾讯统计/平台sig生成算法(js版)
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:
