|
微信卡券签名参数变化通知-绍兴微信小程序开发为你转播背景描述 Appsecret是公众号的安全保障,鉴于之前卡券开发用appsecret参与签名有可能会有安全隐患,微信卡券团队计划于2015年11月15日之后不再支持appsecret参与卡券签名的方式,之前用appsecret参与签名的开发者须切换至比较安全的api_ticket参与签名的方式。 影响范围 本次切换有可能影响范围涉及调用addcard&choosecard两个接口的开发者,请这些开发者确认自己的cardsign参与签名的参数中是否含有appsecret,若使用的参与签名参数为 api_ticket、timestamp、card_id、code、openid、nonce_str则无影响;若参与卡券签名的参数为:appsecret、timestamp、card_id、code、openid、nonce_str则需要切换至api_ticket的方案。 卡券签名介绍 卡券签名用于H5中调用addcard接口完成卡券添加动作或者调用choosecard拉起用户已领取的卡券列表,用于防止卡券数据被擅改。 获得卡券签名的步骤一般为: 1.获取access_token(有效期7200秒,开发者必须在自己的服务全局缓存access_token); 2.用第一步拿到的access_token 采用GET方式请求获得卡券 api_ticket(有效期7200秒,开发者必须在自己的服务全局缓存卡券 api_ticket);
3. 将获取到的 api_ticket以及cardext中的timestamp、card_id、code、openid、nonce_str的value值进行字符串的字典序排序(若cardext中openid和code没有传值,则这两个字段也不参与签名); 4. 将所有参数字符串拼接成一个字符串进行sha1加密,得到signature。 5. signature中的timestamp,nonce字段和card_ext中的timestamp,nonce_str字段必须保持一致。
强烈建议开发者使用卡券资料包中的签名工具SDK进行签名或使用debug工具进行校验:http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=cardsign 切换流程 本次需要切换的是用appsecret代替api_tciket参与签名的开发者,切换流程如下: 其他影响 本次一同影响的还有卡券自定义cell在跳转外链时带有的signature参数,出于安全考虑,本次变更后的自定义跳转链接中不再带有signature字段, url变为 http://www.xxx.com?encrypt_code=ENCRYPT_CODE&card_id=CARDID, 若之前校验了签名的商户可以去掉签名校验,否则可能会造成自定义链接无法跳转 Q&A
Jsapi_ticket用于JSSDK的签名,发生在页面config注入时,而api_ticket用于卡券签名。 卡券签名和JSSDK的签名完全独立,两者的算法和意义完全不同,请不要混淆。JSSDK的签名是使用所有JS接口都需要走的一层鉴权,用以标识调用者的身份,和卡券本身并无关系。其次,卡券的签名考虑到协议的扩展性和简单的防数据擅改,设计了一套独立的签名协议。另外由于历史原因,卡券的JS接口先于JSSDK出现,当时的JSAPI并没有鉴权体系,所以在卡券的签名里也加上了api_ticket这些身份信息,希望开发者理解。 2.如果继续用appsecret签名,会怎么样? 我们计划于2015/11/15日切换对原来appsecret参与签名的支持,若开发者继续使用,用户领取时会报签名错误,或者拉取卡券列表时为空,影响用户正常领取流程,请开发者一定要注意!若在切换过程中遇到任何问题,可以加卡券开发QQ群反馈,群号为:512568283。 |