看到微信官方的demo
http://203.195.235.76/jssdk/
最后是长这样
领取到卡包。你会发现,成功的领到了 2 张券。
然后你按它的文档,勇敢的写了一个demo,最后你会发现,成功的领到了1张券。各种原因的查找,网上也没有这些说明。
在试验了N次之后,重复发布了N次之后。终于发现原因了。
wx.addCard({
cardList: [
{
cardId: 'pDF3iY9tv9zCGCj4jTXFOo1DxHdo',
cardExt: '{"code": "", "openid": "", "timestamp": "1418301401", "signature":"f6628bf94d8e56d56bfa6598e798d5bad54892e5","outer_str":"123"}'
},
{
cardId: 'pDF3iY9tv9zCGCj4jTXFOo1DxHdo',
cardExt: '{"code": "", "openid": "", "timestamp": "1418301401", "signature":"f6628bf94d8e56d56bfa6598e798d5bad54892e5","outer_str":"123"}'
}
],
success: function (res) {
alert('已添加卡券:' + JSON.stringify(res.cardList));
},
cancel: function (res) {
alert(JSON.stringify(res))
}
});
注意看,它没有 nonce_str,它没有 nonce_str,它没有 nonce_str
是不是很吃惊。
再看这个文档
https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115
nonce_str | 否 | 是 | 随机字符串,由开发者设置传入, 加强安全性(若不填写可能被重放请求) 。随机字符串,不长于32位。推荐使用大小写字母和数字,不同添加请求的nonce须动态生成,若重复将会导致领取失败。 |
理解了下设计者的想法。nonce_str有值,证明,是不同的请求,"同一个值将会导致领取失败"。如果不填,将会成功。