客戶對系統中的微信卡券很不滿意,說是一次不能領取多張,而且不能控制領取的次數。
看到微信官方的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有值,證明,是不同的請求,"同一個值將會導致領取失敗"。如果不填說明沒值,將會成功。
最后一個問題,outer_str居然不起作用。看文檔
outer_str | 否 | 否 | 領取渠道參數,用於標識本次領取的渠道值。 |
經過我多次測試,我表示這個的確是不會起作用。最后,查看到以下文檔
https://www.w3cschool.cn/weixinkaifawendang/9pfz1qey.html
outer_id | 否 | int | 12 | 領取場景值,用於領取渠道的數據統計,默認值為0,字段類型為整型,長度限制為60位數字。用戶領取卡券后觸發的事件推送中會帶上此自定義場景值。 |
死馬當活馬醫,使用了outer_id,終於從事件User_Get_Card中將此值推送給我了。
此值放到了outerstr屬性中,大寫的服字。
最后看了下代碼。是我錯誤了取的outer_id值。