一: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,
    }
  })        

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄