js实现微信js-sdk签名(signature)

发布时间 2023-05-09 15:03:31作者: 男孩亮亮

 由于后端不知道怎么加密获取到signature,所以由前端生成签名(jsapi_ticket、noncestr、timestamp,这三个字段是接口返回的,按理说只需要jsapi_ticket就行了,其他前端也可以生成)

 

1、对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1:

//排序的函数
    objKeySort(arys) {
        //先用Object内置类的keys方法获取要排序对象的属性名数组,再利用Array的sort方法进行排序
        var newkey = Object.keys(arys).sort()
        console.log('newkey=' + newkey)
        var newObj = '' //创建一个新的对象,用于存放排好序的键值对
        for (var i = 0; i < newkey.length; i++) {
            //遍历newkey数组
            newObj += [newkey[i]] + '=' + arys[newkey[i]] + '&'
        }
        return newObj.substring(0, newObj.length - 1)
    }

// 排序
let sortStr = objKeySort({
       jsapi_ticket: res.data.ticket,
       noncestr: res.data.nonceStr,
       timestamp: res.data.timeStamp,
       url: location.href
})

 

2、步骤2. 对string1进行sha1签名,得到signature:

安装sha1

cnpm i js-sha1 --save
import sha1 from 'js-sha1'

let signature = sha1(sortStr)

wx.config({
   appId: res.data.appId, // 必填,公众号的唯一标识
   timestamp: res.data.timeStamp, // 必填,生成签名的时间戳
   nonceStr: res.data.nonceStr, // 必填,生成签名的随机串
   signature,
   debug: config.DEBUG, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
   jsApiList: this.jsApiList // 必填,需要使用的JS接口列表
})

完工