首先,已經(jīng)讀取到了cardId,此時需要去生成簽名,注意,此時已經(jīng)使用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);
// 轉(zhuǎn)為字符串
arr = arr.map(function(n) {
return n.toString();
});
// 字典序排序
arr = arr.sort();
// 拼接為字符串
var str = arr.join("");
// 進行SHA1加密,sha1算法需自行實現(xiàn)
var signature = hex_sha1(str)
console.log('signature:', signature)
總共需要四個參數(shù),其中的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.調(diào)用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必須和生成簽名的保持一致,注意是用下劃線連接,另外網(wǎng)上查到timespan必須是以秒為單位,我在這邊遇到的坑就是把nonce_str寫成了nonceStr,一直報簽名錯誤