簽名算法------(簽名校驗工具)
簽名生成的通用步驟如下: 第一步,設(shè)所有發(fā)送或者接收到的數(shù)據(jù)為集合M,將集合M內(nèi)非空參數(shù)值的參數(shù)按照參數(shù)名ASCII碼從小到大排序(字典序),使用URL鍵值對的格式(即key1=value1&key2=value2…)拼接成字符串stringA。 特別注意以下重要規(guī)則:
第二步,在stringA最后拼接上key得到stringSignTemp字符串,并對stringSignTemp進行MD5運算,再將得到的字符串所有字符轉(zhuǎn)換為大寫,得到sign值signValue。 key設(shè)置路徑:微信商戶平臺(pay.weixin.qq.com)-->賬戶設(shè)置-->API安全-->密鑰設(shè)置 舉例: 假設(shè)傳送的參數(shù)如下: appid: wxd930ea5d5a258f4f mch_id: 10000100 device_info: 1000 body: test nonce_str: ibuaiVcKdpRxkhJA 第一步:對參數(shù)按照key=value的格式,并按照參數(shù)名ASCII字典序排序如下: stringA="appid=wxd930ea5d5a258f4f&body=test&device_info=1000&mch_id=10000100&nonce_str=ibuaiVcKdpRxkhJA"; 第二步:拼接API密鑰: stringSignTemp="stringA&key=192006250b4c09247ec02edce69f6a2d" sign=MD5(stringSignTemp).toUpperCase()="9A0A8659F005D6984697E2CA0A9CF3B7" 最終得到最終發(fā)送的數(shù)據(jù): <xml> <appid>wxd930ea5d5a258f4f</appid> <mch_id>10000100</mch_id> <device_info>1000<device_info> <body>test</body> <nonce_str>ibuaiVcKdpRxkhJA</nonce_str> <sign>9A0A8659F005D6984697E2CA0A9CF3B7</sign> <xml> 2、生成隨機數(shù)算法微信支付API接口協(xié)議中包含字段nonce_str,主要保證簽名不可預測。我們推薦生成隨機數(shù)算法如下:調(diào)用隨機數(shù)函數(shù)生成,將得到的值轉(zhuǎn)換為字符串。 3、商戶證書(1)獲取商戶證書 微信支付接口中,涉及資金回滾的接口會使用到商戶證書,包括退款、撤銷接口。商家在申請微信支付成功后,收到的相應(yīng)郵件后,可以按照指引下 載API證書,也可以按照以下路徑下載:微信商戶平臺(pay.weixin.qq.com)-->賬戶設(shè)置-->API安全-->證 書下載 。證書文件有四個,分別說明如下: 表4.2:證書文件說明
(2)使用商戶證書
各版本的調(diào)用實例請參考微信支付提供的Demo外鏈。 (3)商戶證書安全證書文件不能放在web服務(wù)器虛擬目錄,應(yīng)放在有訪問權(quán)限控制的目錄中,防止被他人下載。商戶服務(wù)器要做好病毒和木馬防護工作,不被非法侵入者竊取證書文件。 4、商戶回調(diào)API安全在普通的網(wǎng)絡(luò)環(huán)境下,HTTP請求存在DNS劫持、運營商插入廣告、數(shù)據(jù)被竊取,正常數(shù)據(jù)被修改等安全風險。商戶回調(diào)接口使用HTTPS協(xié)議可以保證數(shù)據(jù)傳輸?shù)陌踩?。所以微信支付建議商戶提供給微信支付的各種回調(diào)采用HTTPS協(xié)議。請參考:HTTPS搭建指南。 |
|