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: