微信公众号卡券签名错误
错误原因:生成signature的timestamp精确到了毫秒
修复方式:将生成signature的timestamp精确到秒
前提:
1、使用微信公众号创建了卡券模板、生成api_ticket(type=wx_card)、生成签名;
2、前端页面使用了以上公众号获取签名验证。
报错如下所示:
当时的微信文档如下:
由于我在创建卡券时指定了"use_custom_code":false,“bind_openid”: false,所有以上的code和openid都没有参与签名,timestamp以当前时间戳(精确到毫秒,这里给自己挖了一个坑,就是因为这个一直报错“签名错误”。这里一定要精确到秒!!!)
参与生成signature的字段:
card_id(不参与cardExt)、timestamp(当前时间毫秒值/1000)、nonce_str(32位随机字符串)、api_ticket(https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=wx_card)
最终的请求格式(注意cardExt的字符串形式):
wx.addCard({
cardList: [
{
cardId: 'yyyyyyy',
cardExt: '{"timestamp": "1234567", "nonce_str": "zzzzzz", "signature":"xxxxxxx"}'
}, {
cardId: 'yyyyyyy',
cardExt: '{"timestamp": "1234567", "nonce_str": "zzzzzz", "signature":"xxxxxxx"}'
}
],
success (res) {
console.log(res.cardList) // 卡券添加结果
}
})