若开发者在调用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,但是实际没有对应 门店或者卡类型的卡券 | |