簽名算法


1.簽名算法

簽名生成的通用步驟如下:

第一步,設所有發送或者接收到的數據為集合M,將集合M內非空參數值的參數按照參數名ASCII碼從小到大排序(字典序),使用URL鍵值對的格式(即key1=value1&key2=value2…)拼接成字符串stringA。

特別注意以下重要規則:

  1.  ◆ 參數名ASCII碼從小到大排序(字典序);
  2.  ◆ 如果參數的值為空不參與簽名;
  3.  ◆ 參數名區分大小寫;
  4.  ◆ 驗證調用返回或微信主動通知簽名時,傳送的sign參數不參與簽名,將生成的簽名與該sign值作校驗。
  5.  ◆ 微信接口可能增加字段,驗證簽名時必須支持增加的擴展字段

第二步,在stringA最后拼接上key=(API密鑰的值)得到stringSignTemp字符串,並對stringSignTemp進行MD5運算,再將得到的字符串所有字符轉換為大寫,得到sign值signValue。

舉例:

假設傳送的參數如下:

appid: wxd930ea5d5a258f4f

mch_id: 10000100

device_info: 1000

body: test

nonce_str: ibuaiVcKdpRxkhJA

第一步:對參數按照key=value的格式,並按照參數名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"

最終得到最終發送的數據:

<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.生成隨機數算法

微信支付API接口協議中包含字段nonce_str,主要保證簽名不可預測。我們推薦生成隨機數算法如下:調用隨機數函數生成,將得到的值轉換為字符串。

 

3.商戶證書

 

1)獲取商戶證書

  微信支付接口中,涉及資金回滾的接口會使用到商戶證書,包括退款、撤銷接口。商家在申請微信支付成功后,收到的相應郵件后,按照指引下載API證書。證書文件有四個,分別說明如下:

表4.2:證書文件說明

證書附件 描述 使用場景 備注
pkcs12格式
(apiclient_cert.p12)
包含了私鑰信息的證書文件,為p12(pfx)格式,由微信支付簽發給您用來標識和界定您的身份 撤銷、退款申請API中調用 windows上可以直接雙擊導入系統,導入過程中會提示輸入證書密碼,證書密碼默認為您的商戶ID(如:10010000)
證書pem格式
(apiclient_cert.pem)
從apiclient_cert.p12中導出證書部分的文件,為pem格式,請妥善保管不要泄漏和被他人復制 PHP等不能直接使用p12文件,而需要使用pem,為了方便您使用,已為您直接提供 您也可以使用openssl命令來自己導出:openssl pkcs12 -clcerts -nokeys -in apiclient_cert.p12 -out apiclient_cert.pem
證書密鑰pem格式
(apiclient_key.pem)
從apiclient_cert.p12中導出密鑰部分的文件,為pem格式 PHP等不能直接使用p12文件,而需要使用pem,為了方便您使用,已為您直接提供 您也可以使用openssl命令來自己導出:openssl pkcs12 -nocerts -in apiclient_cert.p12 -out apiclient_key.pem
CA證書
(rootca.pem)
微信支付api服務器上也部署了證明微信支付身份的服務器證書,您在使用api進行調用時也需要驗證所調用服務器及域名的真實性 該文件為簽署微信支付證書的權威機構的根證書,可以用來驗證微信支付服務器證書的真實性 部分工具已經內置了若干權威機構的根證書,無需引用該證書也可以正常進行驗證,這里提供給您在未內置所必須根證書的環境中載入使用

 

2)使用商戶證書

 

  •   apiclient_cert.p12是商戶證書文件,除PHP外的開發均使用此證書文件。
  •   商戶如果使用.NET環境開發,請確認Framework版本大於2.0,必須在操作系統上雙擊安裝證書apiclient_cert.p12后才能被正常調用。
  •   商戶證書調用或安裝都需要使用到密碼,該密碼的值為微信商戶號(mch_id)
  •   PHP開發環境請使用商戶證書文件apiclient_cert.pem和apiclient_key.pem ,rootca.pem是CA證書。

 

各版本的調用實例請參考微信支付提供的Demo外鏈

 

3)商戶證書安全

證書文件不能放在web服務器虛擬目錄,應放在有訪問權限控制的目錄中,防止被他人下載。商戶服務器要做好病毒和木馬防護工作,不被非法侵入者竊取證書文件。

 

4商戶回調API安全

在普通的網絡環境下,HTTP請求存在DNS劫持、運營商插入廣告、數據被竊取,正常數據被修改等安全風險。商戶回調接口使用HTTPS協議可以保證數據傳輸的安全性。所以微信支付建議商戶提供給微信支付的各種回調采用HTTPS協議。請參考:HTTPS搭建指南


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM