1. 程式人生 > 其它 >微信支付V3介面開發

微信支付V3介面開發

如果沒有微信商戶平臺,需自己申請開通,開通後配置按照 https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_1.shtml 進行配置

微信支付V3介面文件地址:https://wechatpay-api.gitbook.io/wechatpay-api-v3/

微信支付
https://github.com/wechatpay-apiv3/CertificateDownloader 獲取微信支付證書

# 首先需要下載生成的商戶證書
# 執行此命令時需要 證書序列號,如果不知道,可以執行以下命令進行檢視
openssl x509 -in apiclient_cert.pem -noout -serial
# 執行 java -jar CertificateDownloader.jar -h ,檢視幫助:
java -jar CertificateDownloader.jar -k ${apiV3key} -m ${mchId} -f ${mchPrivateKeyFilePath} -s ${mchSerialNo} -o ${outputFilePath}

#如果執行失敗,可匯入idea中執行  com.elias.test.CertificateDownloaderTest 測試類
    //用於證書解密的金鑰
    private String apiV3key = "";
    // 商戶號
    private static String mchId = "";
    // 商戶證書序列號
    private static String mchSerialNo = "";
    // 商戶私鑰
    private static String mchPrivateKeyFilePath = "";
    // 微信支付平臺證書
    private static String wechatpayCertificateFilePath = null;
    //下載成功後儲存證書的路徑
    private static String outputFilePath = "";
    
    //"-c", wechatpayCertificateFilePath
    String[] args = {"-k", apiV3key, "-m", mchId, "-f", mchPrivateKeyFilePath,"-s", mchSerialNo, "-o", outputFilePath};

curl 請求

# curl https://api.mch.weixin.qq.com/v3/certificates 
curl https://api.mch.weixin.qq.com/v3/certificates -H "Authorization: WECHATPAY2-SHA256-RSA2048 mchid=\"mchid\",serial_no=\"serial_no\",nonce_str=\"nonce_str\",timestamp=\"timestamp\",signature=\"signature\"" -H "Connection: keep-alive" -H "Accept: */*" -H "Host: api.mch.weixin.qq.com" --verbose
# --verbose 進行請求體列印跟蹤

# {"code":"SIGN_ERROR","message":"Http頭Authorization認證型別不正確"}  問題
# 根本原因為Authorization的值有問題。 Authorization值中的雙引號["]需要用反斜槓[\]進行轉移; 如果沒有轉移,在curl呼叫過程中Authorization的值中雙引號或單引號會自動去掉。

okhttp請求, 藉助postman請求json【wechatpay-postman-script】,檢視傳送header 定位出問題

# okhttp 此請求需要注意 header體引數
Authorization: 
Connection: keep-alive
Accept: */*
# 如果沒有 Accept和 Connection值會報錯誤資訊 code=400, message=Bad Request 錯誤

檢視證書序列號: openssl x509 -in apiclient_cert.pem -noout -serial

java開發提供的apache httpclent 工具包

https://github.com/wechatpay-apiv3/wechatpay-apache-httpclient

# 證書、金鑰載入工具類:com.wechat.pay.contrib.apache.httpclient.util.PemUtil
# 回撥介面型別POST, 資料接收類:com.wechat.pay.contrib.apache.httpclient.notification.Notification, jackson注入
# 回撥資料解密工具類 com.wechat.pay.contrib.apache.httpclient.util.AesUtil()
# ApiV3Key 為自己申請時填寫的32位隨機加密串。
AesUtil aesUtil = new AesUtil(ApiV3Key);
# 回撥解密方法
AesUtil.decryptToString(AssociatedData, Nonce, Ciphertex);

所有工具包地址:https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay6_0.shtml

postman請求籤名生成指令碼 https://github.com/wechatpay-apiv3/wechatpay-postman-script

商戶平臺V3介面地址:https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_5_1.shtml

V3嗶哩視訊教程
https://www.bilibili.com/video/BV1og411F7Uz?p=2