node里的签名

这两天用node做二次开发,里面有一个签名的过程,看着和微信开发差不多,这里记录一下具体实践方法。

  1. 把接口参数,按照key升序排列
  2. 按照 k1=v1&k2=v2 的格式拼字符串
  3. 第二步的字符串后拼 secret 值
  4. 对结果进行md5计算

我是这么做的:

  • 配置一个对象
  • 借助 URLSearchParams 排序和拼接
  • md5 计算

技术要点

掌握 URLSearchParams用法

把一个对象作为参数传入实例。
其实也可以引入 querystring 内置库

1
2
3
const qs = require('querystring');
qs.encode({a:1}) //对象转参数
qs.decode('a=1') // 参数转对象

具体代码大致如下:

1
2
3
4
5
6
7
// 总的流程
function fetchSign(obj) {
let rawStr = objectSortAndParse(obj)
rawStr += ENV.secret
const signStr = md5Sign(rawStr)
return signStr
}
1
2
3
4
5
6
// 拼接 升序
function objectSortAndParse(obj) {
const _url = new URLSearchParams(obj)
_url.sort()
return decodeURIComponent(_url.toString()) // 这里有点坑需要转义回去
}
1
2
3
4
5
6
7
8
// md5 计算
const crypto = require("crypto")
function md5Sign(data) {
return crypto
.createHash("md5")
.update(data)
.digest("hex")
}
1
2
3
4
5
// 获取八位随机字符串
const randomString = require("randomstring")
function rString(number) {
return randomString.generate(number)
}

扫一扫,分享到微信

请我喝杯咖啡吧~