微時代

微信卡券簽名參數變化通知

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
辉柏嘉和酷喜乐