若開發者在調用addcard接口遇到簽名錯誤時,請按照以下步驟排查錯誤:
Step1. 檢驗簽名算法是否正確,開發者可以使用Chrome打開卡券簽名調試工具,開發者也可以參考JS-SDK Demo中卡券的簽名寫法,
參見:示例代碼和JS-SDK Demo
Step2.檢查CardExt內的參數是否正確
-檢查是否存在自定義code碼的card_id沒有在cardext內傳入code參數,或者非自定義code模式的卡券傳入了code參數,這兩種情況都可能導致參數錯誤或者簽名錯誤;
-檢查是否存在bind_openid為true的card_id沒有在cardext內傳入openid參數,或者bind_openid為false的card_id的卡券傳入了openid參數,這兩種情況都可能導致參數錯誤或者簽名錯誤;
-檢查是否在cardext內傳入了A、B、C、D四個參數,但是簽名時卻使用了A、B、C三個參數或者使用了A、B、C、D、E五個參數,這種情況一定會出現簽名錯誤;
Step3.檢查ticket是否正確/有效
-檢查獲取當前ticekt的appid是否為創建card_id的appid;
-檢查獲取當前ticket的接口是否正確,確認獲取的ticket的type類型是type=wx_card;
-檢查ticket是否過期/無效;
Addcard接口常見錯誤以及原因:
領取頁面提示 | 錯誤原因 | 修改方法 |
已領完(addcard) |
當前卡券無庫存 | 調用增加庫存接口增加庫存 |
addcard接口內cardext參數 內nonce_Str和timestamp值重復 |
保證不同的請求中cardext參數內 nonce_Str和timestamp值重復 |
|
自定義code不能實時下發 | js拉起領取頁面時code無法實時下發 | |
參數錯誤(addcard) |
cardext參數與card_id屬性不對其 | 開發者須先查詢card_id詳情,重點關注是否使用 自定義code、是否綁定openid、是否是導入code模式 自定義code的卡券在cardext須填入code字段,參與簽名; 綁定openid的卡券須傳入openid字段 |
code超長或格式錯誤 | 檢查code參數是否超過20位或含特殊字符 | |
簽名錯誤(addcard) |
簽名算法錯誤 | 使用http://mp.weixin.qq.com/debug /cgi-bin/sandbox?t=cardsign工具校驗簽名算法 |
ticket錯誤 | 確認使用的ticket是卡券api_ticket而不是jsapi_ticket 且在有效期內 |
|
cardext內參數與參與簽名參數不對齊 | cardext內若填入了需要參與簽名的參數,須在簽 名算法中也將字段計入簽名 |
|
cardext參數格式錯誤 | cardext本身是一個字符串不是object對象,若格式 錯誤iOS系統會提示簽名錯誤 |
|
拉取卡券列表為空 |
簽名錯誤 | 拉起卡券列表傳入的signature字段有誤,或者參與簽名的 參數與接口傳入的參數不對齊 |
篩選條件錯誤 | 篩選條件中傳入了shopid或者card_type,但是實際沒有對應 門店或者卡類型的卡券 |
|
請仔細閱讀 |