對接微信支付退款證書之坑
阿新 • • 發佈:2018-12-17
背景
專案需要直接對接微信支付,實現小程式支付和退款功能,支付不需要證書,但是退款的話需要證書支援
- 語言:php
- 開發環境win
- 測試環境centos
坑點1:路徑問題
網上查到比較多的答案是在Linux系統下采用虛擬路徑,Windows系統下采用絕對路徑,但是在開發的過程中,發現在Windows系統下用絕對路徑OK,但是放到測試環境的時候,出錯了,報curl:58錯誤。測試環境改成絕對路徑就可以通過用例了。
參考PHP程式碼:
//在微信官方提供的demo中的Wxpay.Api.php中的postXmlCurl方法 //設定證書 //使用證書:cert 與 key 分別屬於兩個.pem檔案 curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM'); curl_setopt($ch,CURLOPT_SSLCERT, __DIR__ .WxPayConfig::SSLCERT_PATH); curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM'); curl_setopt($ch,CURLOPT_SSLKEY, __DIR__ .WxPayConfig::SSLKEY_PATH);
坑點2:證書存放目錄
證書需要放到一個檔名問cert
的資料夾下面,不然還是會報找不到證書的錯誤
坑點3:微信官方文件提供的OpenSSL命令跑出來的證書有問題
- 官方提供:openssl pkcs12 -nocerts -in apiclient_cert.p12 -out apiclient_key.pem
輸出樣例
Bag Attributes localKeyID: ******************************** friendlyName: Tenpay Certificate Key Attributes: <No Attributes>
- 最後正確的命令:openssl pkcs12 -nodes -clcerts -in apiclient_cert.p12 -out apiclient_key.pem
輸出樣例
Bag Attributes localKeyID: ************************************** friendlyName: Tenpay Certificate subject=/CN=1245052102/O=**************/C=CN/ST=GuangDong/L=ShenZhen issuer=/C=CN/O=Tenpay.com/OU=Tenpay.com CA Center/CN=Tenpay.com Root CA -----BEGIN CERTIFICATE----- ****************************** ****************************** ****************************** ****************************** ****************************** ****************************** ****************************** ****************************** ****************************** ****************************** ****************************** ****************************** -----END CERTIFICATE----- Bag Attributes localKeyID:********************************** friendlyName: Tenpay Certificate Key Attributes: <No Attributes> -----BEGIN PRIVATE KEY----- ****************************** ****************************** ****************************** ****************************** ****************************** ****************************** ****************************** ****************************** ****************************** ****************************** ****************************** ******************************
官方提供的命令中的-nocerts
表示不輸出任何證書,修改後的-clicerts
表示僅輸出客戶端證書