商戶接入微信支付,調(diào)用API必須遵循以下規(guī)則:
傳輸方式 | 為保證交易安全性,采用HTTPS傳輸 |
---|---|
提交方式 | 采用POST方法提交 |
數(shù)據(jù)格式 | 提交和返回?cái)?shù)據(jù)都為XML格式,根節(jié)點(diǎn)名為xml |
字符編碼 | 微信支付API v2僅支持UTF-8字符編碼的一個(gè)子集:使用一至三個(gè)字節(jié)編碼的字符。也就是說(shuō),不支持Unicode輔助平面中的四至六字節(jié)編碼的字符。 |
簽名算法 | MD5,后續(xù)會(huì)兼容SHA1、SHA256、HMAC等。 |
簽名要求 | 請(qǐng)求和接收數(shù)據(jù)均需要校驗(yàn)簽名,詳細(xì)方法請(qǐng)參考安全規(guī)范-簽名算法 |
證書(shū)要求 | 調(diào)用申請(qǐng)退款、撤銷(xiāo)訂單接口需要商戶證書(shū) |
判斷邏輯 | 先判斷協(xié)議字段返回,再判斷業(yè)務(wù)返回,最后判斷交易狀態(tài) |
注意:
? 必須嚴(yán)格按照API的說(shuō)明進(jìn)行一單一支付,一單一紅包,一單一付款,在未得到支付系統(tǒng)明確的回復(fù)之前不要換單,防止重復(fù)支付或者重復(fù)付款
微信支付API接口協(xié)議中包含字段nonce_str,主要保證簽名不可預(yù)測(cè)。我們推薦生成隨機(jī)數(shù)算法如下:調(diào)用隨機(jī)數(shù)函數(shù)生成,將得到的值轉(zhuǎn)換為字符串。
(1)獲取API證書(shū)(什么是api證書(shū)?如何升級(jí)?)
微信支付接口中,涉及資金回滾的接口會(huì)使用到API證書(shū),包括退款、撤銷(xiāo)接口。商家在申請(qǐng)微信支付成功后,收到的相應(yīng)郵件后,可以按照指引下載API證書(shū),也可以按照以下路徑下載:微信商戶平臺(tái)(www.tg885.com)-->賬戶中心-->賬戶設(shè)置-->API安全 。證書(shū)文件說(shuō)明如下:
證書(shū)附件 | 描述 | 使用場(chǎng)景 | 備注 |
---|---|---|---|
pkcs12格式 |
包含了私鑰信息的證書(shū)文件,為p12(pfx)格式,由微信支付簽發(fā)給您用來(lái)標(biāo)識(shí)和界定您的身份 |
撤銷(xiāo)、退款申請(qǐng)API中調(diào)用 |
windows上可以直接雙擊導(dǎo)入系統(tǒng),導(dǎo)入過(guò)程中會(huì)提示輸入證書(shū)密碼,證書(shū)密碼默認(rèn)為您的商戶ID(如:10010000) |
以下兩個(gè)證書(shū)在PHP環(huán)境中使用:
證書(shū)附件 | 描述 | 使用場(chǎng)景 | 備注 |
---|---|---|---|
證書(shū)pem格式 |
從apiclient_cert.pem中導(dǎo)出證書(shū)部分的文件,為pem格式,請(qǐng)妥善保管不要泄露和被他人復(fù)制 |
PHP等不能直接使用p12文件,而需要使用pem,為了方便您使用,已為您直接提供 |
您也可以使用openssl命令來(lái)自己導(dǎo)出:openssl?pkcs12?-clcerts?-nokeys?-in?apiclient_cert.pem?-out?apiclient_cert.pem |
證書(shū)密鑰pem格式 |
從apiclient_key.pem中導(dǎo)出密鑰部分的文件,為pem格式,請(qǐng)妥善保管不要泄露和被他人復(fù)制 |
PHP等不能直接使用p12文件,而需要使用pem,為了方便您使用,已為您直接提供 |
您也可以使用openssl命令來(lái)自己導(dǎo)出:openssl?pkcs12?-nocerts?-in?apiclient_cert.pem?-out?apiclient_key.pem |
(2)使用API證書(shū)
◆ apiclient_cert.p12是商戶證書(shū)文件,除PHP外的開(kāi)發(fā)均使用此證書(shū)文件。
◆ 商戶如果使用.NET環(huán)境開(kāi)發(fā),請(qǐng)確認(rèn)Framework版本大于2.0,必須在操作系統(tǒng)上雙擊安裝證書(shū)apiclient_cert.p12后才能被正常調(diào)用。
◆ API證書(shū)調(diào)用或安裝需要使用到密碼,該密碼的值為微信商戶號(hào)(mch_id)
(3)API證書(shū)安全
◆ 證書(shū)文件不能放在web服務(wù)器虛擬目錄,應(yīng)放在有訪問(wèn)權(quán)限控制的目錄中,防止被他人下載;
◆ 建議將證書(shū)文件名改為復(fù)雜且不容易猜測(cè)的文件名;
◆ 商戶服務(wù)器要做好病毒和木馬防護(hù)工作,不被非法侵入者竊取證書(shū)文件。
在普通的網(wǎng)絡(luò)環(huán)境下,HTTP請(qǐng)求存在DNS劫持、運(yùn)營(yíng)商插入廣告、數(shù)據(jù)被竊取,正常數(shù)據(jù)被修改等安全風(fēng)險(xiǎn)。商戶回調(diào)接口使用HTTPS協(xié)議可以保證數(shù)據(jù)傳輸?shù)陌踩浴K晕⑿胖Ц督ㄗh商戶提供給微信支付的各種回調(diào)采用HTTPS協(xié)議。請(qǐng)參考:HTTPS搭建指南。
openid是微信用戶在公眾號(hào)appid下的唯一用戶標(biāo)識(shí)(appid不同,則獲取到的openid就不同),可用于永久標(biāo)記一個(gè)用戶,同時(shí)也是微信JSAPI支付的必傳參數(shù)。
網(wǎng)頁(yè)授權(quán)獲取用戶openid