多语言展示
当前在线:1036今日阅读:26今日分享:39

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

腾讯云统计h5接入接口请求时sig参数计算,官方提供了php的样例,这里提供js的样例,提供该sig参数的详细算法(参数数组排序及md5加密等),适用于腾讯所有平台类似sig计算,本人已应用到个人博客访问量统计请求等真实可用,如果sig算法文档有新修改不匹配的,请指正。
工具/原料

IDE编辑器sublime、webstorm等

方法/步骤
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

1.首先我们可以将参数随意拼接到url上,像这样:http:123.com?app_id=5&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

6

最后在html里引入md5:执行md5 js代码:md5(obj)

7

完整示例:我们将参数拼接进url:http:123.com?app_id=5&start_date=2017-12-05&end_date=2017-12-06&idx=pv ;js 完整代码:var real_url = http:123.com?app_id=5&start_date=2017-12-05&end_date=2017-12-06&idx=pv ;生成 sig = md5(objKeySort(parseQueryString(real_url)))本人也写了一个简单sig生成工具:可以直接输入拼接url即可生成sig:

注意事项
1

js函数objKeySort()和parseQueryString(),其中objKeySort中sec变量赋值为你的私钥secret_key

2

如果对比文档和此要求文档有差异,可稍修改我提供的js函数即可,这里只提供思路和通用算法

3

html引入md5.js

推荐信息