node生成签名
一:node生成签名
继上一偏文章,需要在 config 文件夹下新建 setSdk.js 文件代码看 3.
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。使用:
1. app.js里引入
const setSdk = require('./config/setSdk') 2. 前台会post一个url给后台,只需要给setSdk传入前台post的url,并返回给前台就行
ctx.body = await setSdk(ctx.request.body.url)
3. setSdk.js 代码如下:
const config = require('./config')
const fsObj = require('./fsObj')
const sha1 = require('sha1')
// 生成字符串
const getStr = () => {
return Math.random().toString(36).substr(2, 15)
}
// 时间戳
const getTimestamp = () => {
return parseInt(new Date().getTime() / 1000) + ''
}
// 排序
const raw = args => {
var keys = Object.keys(args)
keys = keys.sort()
var newArgs = {}
keys.forEach(function (key) {
newArgs[key.toLowerCase()] = args[key]
})
var string = ''
for (var k in newArgs) {
string += '&' + k + '=' + newArgs[k]
}
string = string.substr(1)
return string
}
// 返回数据
module.exports = url => {
return new Promise((resolve, reject) => {
fsObj.read('ticket', res => {
let ret = {
jsapi_ticket: res.jsapi_ticket.ticket,
nonceStr: getStr(),
timestamp: getTimestamp(),
url
}
let string1 = raw(ret)
let sha1Str = sha1(string1)
resolve({
appId: config.appId,
timestamp: ret.timestamp,
nonceStr: ret.nonceStr,
signature: sha1Str
})
})
})
}
二:前端
前端需要post给后端一个当前页面的url
let url = location.href.split('#')[0]
$.ajax({
type: 'post',
url: '接口地址',
dataType: 'json',
data: {
url
},
success: (res) => {
// res是后台返回给前端的签名信息,
// 用来匹配 wx.config
//包括:
// appId: res.appId,
// timestamp: res.timestamp,
// nonceStr: res.nonceStr,
// signature: res.signature,
}
})
更多精彩

