微时代

微信卡券签名参数变化通知

2015/11/11 1:01:10 / 来源: / 点击: 0


背景描述

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);

获取方式:get
url:https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=access_token&type=wx_card
接口协议:http
编码方式:utf-8

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字段必须保持一致。

举例:
code=jonyqin_1434008071,
timestamp=1404896688,
card_id=pjz8yt1xgilfi-fusewpnnolggzk,
api_ticket=ojz8ytyvyr30hheh3cm73y7h4jje ,
nonce_str=jonyqin
则signature=sha1(1404896688jonyqinjonyqin_1434008071ojz8ytyvyr30hheh3cm73y7h4jje pjz8yt1xgilfi-fusewpnnolggzk)
=2b4d29b5f60fa4be37522ddfd9583c329446d3e3。

强烈建议开发者使用卡券资料包中的签名工具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

1.api_ticket和jsapi_ticket有什么区别?

jsapi_ticket用于jssdk的签名,发生在页面config注入时,而api_ticket用于卡券签名。

卡券签名和jssdk的签名完全独立,两者的算法和意义完全不同,请不要混淆。jssdk的签名是使用所有js接口都需要走的一层鉴权,用以标识调用者的身份,和卡券本身并无关系。其次,卡券的签名考虑到协议的扩展性和简单的防数据擅改,设计了一套独立的签名协议。另外由于历史原因,卡券的js接口先于jssdk出现,当时的jsapi并没有鉴权体系,所以在卡券的签名里也加上了api_ticket这些身份信息,希望开发者理解。


2.如果继续用appsecret签名,会怎么样?

我们计划于2015/11/15日切换对原来appsecret参与签名的支持,若开发者继续使用,用户领取时会报签名错误,或者拉取卡券列表时为空,影响用户正常领取流程,请开发者一定要注意!

上一篇:微信将升级“摇一摇”、研发自有广告平台
下一篇:移动支付外卖场景再被BAT三分天下

分享到: 0