首先,已经读取到了cardId,此时需要去生成签名,注意,此时已经使用config配置,即添加了addCard,openCard等方法,此处略过,本文主要讲添加卡包用到的签名
1.生成签名
(注:属于前端模拟,最好由后端生成)
var cardId = 'xxxxxxxxxxxx'
var timestamp = '1514292155'
var api_ticket = 'xxxxxxxxxxxxxxxxx'
var nonceStr = '1qaz2wsx'
var arr = new Array(api_ticket,nonceStr, timestamp, cardId);
// 转为字符串
arr = arr.map(function(n) {
return n.toString();
});
// 字典序排序
arr = arr.sort();
// 拼接为字符串
var str = arr.join("");
// 进行SHA1加密,sha1算法需自行实现
var signature = hex_sha1(str)
console.log('signature:', signature)
总共需要四个参数,其中的api_ticket需要通过接口返回,第一步要获取token,第二步,通过获取的token获取ticket,获取token通过appid和secret,获取ticket通过以下的方法
// 获取ticket
https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=xxx&&type=wx_card
// 获取token
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
然后就可以生成签名了
2.调用addCard
var signature = 'xxxxxxx'
var timespan = '1514292155'
var nonceStr ='1qaz2wsx'
var api_ticket = 'm7RQzjA_ljjEkt-JCoklRB7LfGKT7x8UsKpnVAopKOzvW4eFSq6HSbKKxAOjvlQ0AYy0tq5rprFdtFfy_WsPWw'
var ext = '{"api_ticket":"'+api_ticket+'","card_id":"'+cardId+'","nonce_str":"'+nonceStr+'","timestamp": "'+timespan+'", "signature":"'+signature+'"}'
console.log('extextextextextext:', ext)
wx.addCard({
cardList: [
{
cardId: cardId,
cardExt:ext
}
],
success: function (res) {
},
cancel: function (res) {
alert(JSON.stringify(res))
}
})
这里有一点需要注意,card_id必须和生成签名的保持一致,timestamp必须和生成签名的保持一致,nonce_str必须和生成签名的保持一致,注意是用下划线连接,另外网上查到timespan必须是以秒为单位,我在这边遇到的坑就是把nonce_str写成了nonceStr,一直报签名错误