# 目標(biāo)
- 掌握如何安裝 SDK
- 了解請(qǐng)求微信支付需要哪些密鑰和證書
- 了解如何使用 SDK 請(qǐng)求微信支付
請(qǐng)選擇一種編輯語(yǔ)言,按照快速上手的指引操作。
# 環(huán)境要求
- Java 1.8+
# 安裝
使用包管理系統(tǒng),例如 Maven、Gradle,快速添加微信支付官方 SDK。
如果你使用的 Gradle (opens new window),請(qǐng)?jiān)?build.gradle
中加入:
1implementation 'com.github.wechatpay-apiv3:wechatpay-java:${VERSION}'
如果你使用的 Maven (opens new window),請(qǐng)?jiān)?pom.xml
中加入:
1<dependency>2 <groupId>com.github.wechatpay-apiv3</groupId>3 <artifactId>wechatpay-java</artifactId>4 <version>${VERSION}</version>5</dependency>
你可以在 GitHub 找到 Java SDK (opens new window) 的源代碼、使用說(shuō)明和最新版本信息。
# 必需的證書和密鑰
運(yùn)行 SDK 必需以下的證書和密鑰:
# 發(fā)起請(qǐng)求
以 Native 支付為例,向微信支付發(fā)起你的第一個(gè)請(qǐng)求:
1package com.wechat.pay.java.service;23import com.wechat.pay.java.core.Config;4import com.wechat.pay.java.core.RSAAutoCertificateConfig;5import com.wechat.pay.java.service.payments.nativepay.NativePayService;6import com.wechat.pay.java.service.payments.nativepay.model.Amount;7import com.wechat.pay.java.service.payments.nativepay.model.PrepayRequest;8import com.wechat.pay.java.service.payments.nativepay.model.PrepayResponse;910/** Native 支付下單為例 */11public class QuickStart {1213 /** 商戶號(hào) */14 public static String merchantId = "190000****";15 /** 商戶API私鑰路徑 */16 public static String privateKeyPath = "/Users/yourname/your/path/apiclient_key.pem";17 /** 商戶證書序列號(hào) */18 public static String merchantSerialNumber = "5157F09EFDC096DE15EBE81A47057A72********";19 /** 商戶APIV3密鑰 */20 public static String apiV3key = "...";2122 public static void main(String[] args) {23 // 使用自動(dòng)更新平臺(tái)證書的RSA配置24 // 建議將 config 作為單例或全局靜態(tài)對(duì)象,避免重復(fù)的下載浪費(fèi)系統(tǒng)資源25 Config config =26 new RSAAutoCertificateConfig.Builder()27 .merchantId(merchantId)28 .privateKeyFromPath(privateKeyPath)29 .merchantSerialNumber(merchantSerialNumber)30 .apiV3Key(apiV3key)31 .build();32 // 構(gòu)建service33 NativePayService service = new NativePayService.Builder().config(config).build();34 // request.setXxx(val)設(shè)置所需參數(shù),具體參數(shù)可見(jiàn)Request定義35 PrepayRequest request = new PrepayRequest();36 Amount amount = new Amount();37 amount.setTotal(100);38 request.setAmount(amount);39 request.setAppid("wxa9d9651ae******");40 request.setMchid("190000****");41 request.setDescription("測(cè)試商品標(biāo)題");42 request.setNotifyUrl("https://notify_url");43 request.setOutTradeNo("out_trade_no_001");44 // 調(diào)用下單方法,得到應(yīng)答45 PrepayResponse response = service.prepay(request);46 // 使用微信掃描 code_url 對(duì)應(yīng)的二維碼,即可體驗(yàn)Native支付47 System.out.println(response.getCodeUrl());48 }49}
# 環(huán)境要求
- Guzzle 7.0,PHP >= 7.2.5。
- Guzzle 6.5,PHP >= 7.1.2
我們推薦使用目前處于 Active Support (opens new window) 階段的 PHP 8 和 Guzzle 7。
# 安裝
使用 Composer (opens new window) 安裝最新版本的 SDK:
1composer require wechatpay/wechatpay
你可以在 GitHub 找到 PHP SDK (opens new window) 的源代碼、使用說(shuō)明和最新版本信息。
# 必需的證書和密鑰
運(yùn)行 SDK 必需以下的證書和密鑰:
- 商戶 API 私鑰 (opens new window)
- 商戶 API 證書 (opens new window)的證書序列號(hào)
- APIv3 密鑰 (opens new window)
- 微信支付平臺(tái)證書 (opens new window)
由于 PHP-FPM (opens new window) 進(jìn)程模型限制,PHP SDK 不支持自動(dòng)獲取和更新微信支付平臺(tái)證書。 你可以使用 SDK 自帶的工具 (opens new window)下載微信支付平臺(tái)證書。
1composer exec CertificateDownloader.php -- -k ${apiV3key} -m ${mchId} -f ${mchPrivateKeyFilePath} -s ${mchSerialNo} -o ${outputFilePath}
# 發(fā)起請(qǐng)求
以 Native 支付為例,向微信支付發(fā)起你的第一個(gè)請(qǐng)求。
1<?php23require_once('vendor/autoload.php');45use WeChatPay\Builder;6use WeChatPay\Crypto\Rsa;7use WeChatPay\Util\PemUtil;89// 設(shè)置參數(shù)1011// 商戶號(hào)12$merchantId = '190000****';1314// 從本地文件中加載「商戶API私鑰」,「商戶API私鑰」會(huì)用來(lái)生成請(qǐng)求的簽名15$merchantPrivateKeyFilePath = 'file:///path/to/merchant/apiclient_key.pem';16$merchantPrivateKeyInstance = Rsa::from($merchantPrivateKeyFilePath, Rsa::KEY_TYPE_PRIVATE);1718// 「商戶API證書」的「證書序列號(hào)」19$merchantCertificateSerial = '3775B6A45ACD588826D15E583A95F5DD********';2021// 從本地文件中加載「微信支付平臺(tái)證書」(可使用證書下載工具得到),用來(lái)驗(yàn)證微信支付應(yīng)答的簽名22$platformCertificateFilePath = 'file:///path/to/wechatpay/cert.pem';23$platformPublicKeyInstance = Rsa::from($platformCertificateFilePath, Rsa::KEY_TYPE_PUBLIC);2425// 從「微信支付平臺(tái)證書」中獲取「證書序列號(hào)」26$platformCertificateSerial = PemUtil::parseCertificateSerialNo($platformCertificateFilePath);2728// 構(gòu)造一個(gè) APIv3 客戶端實(shí)例29$instance = Builder::factory([30 'mchid' => $merchantId,31 'serial' => $merchantCertificateSerial,32 'privateKey' => $merchantPrivateKeyInstance,33 'certs' => [34 $platformCertificateSerial => $platformPublicKeyInstance,35 ],36]);3738// 以 Native 支付為例,發(fā)送請(qǐng)求39$resp = $instance40 ->chain('v3/pay/transactions/native')41 ->post(['json' => [42 'mchid' => '1900006XXX',43 'out_trade_no' => 'native12177525012014070332333',44 'appid' => 'wxdace645e0bc2cXXX',45 'description' => 'Image形象店-深圳騰大-QQ公仔',46 'notify_url' => 'https://weixin.qq.com/',47 'amount' => [48 'total' => 1,49 'currency' => 'CNY'50 ],51 ]]);52echo $resp->getBody(), PHP_EOL;
# 環(huán)境要求
- Go 1.16+
# 安裝
使用 Go Modules (opens new window) 安裝最新版本 SDK:
1go get github.com/wechatpay-apiv3/wechatpay-go
你可以在 GitHub 找到 Go SDK (opens new window) 的源代碼、使用說(shuō)明和最新版本信息。
# 必需的證書和密鑰
運(yùn)行 SDK 必需以下的證書和密鑰:
# 發(fā)起請(qǐng)求
以 Native 支付為例,向微信支付發(fā)起你的第一個(gè)請(qǐng)求。
1package main23import (4 "context"5 "log"67 "github.com/wechatpay-apiv3/wechatpay-go/core"8 "github.com/wechatpay-apiv3/wechatpay-go/core/option"9 "github.com/wechatpay-apiv3/wechatpay-go/services/payments/native"10 "github.com/wechatpay-apiv3/wechatpay-go/utils"11)1213func main() {14 var (15 mchID string = "190000****" // 商戶號(hào)16 mchCertificateSerialNumber string = "3775B6A45ACD588826D15E583A95F5DD********" // 商戶證書序列號(hào)17 mchAPIv3Key string = "2ab9****************************" // 商戶APIv3密鑰18 )1920 // 使用 utils 提供的函數(shù)從本地文件中加載商戶私鑰,商戶私鑰會(huì)用來(lái)生成請(qǐng)求的簽名21 mchPrivateKey, err: = utils.LoadPrivateKeyWithPath("/path/to/merchant/apiclient_key.pem")22 if err != nil {23 log.Fatal("load merchant private key error")24 }2526 ctx: = context.Background()27 // 使用商戶私鑰等初始化 client,并使它具有自動(dòng)定時(shí)獲取微信支付平臺(tái)證書的能力28 opts: = [] core.ClientOption {29 option.WithWechatPayAutoAuthCipher(mchID, mchCertificateSerialNumber, mchPrivateKey, mchAPIv3Key),30 }31 client, err: = core.NewClient(ctx, opts...)32 if err != nil {33 log.Fatalf("new wechat pay client err:%s", err)34 }3536 // 以 Native 支付為例37 svc := native.NativeApiService{Client: client}38 // 發(fā)送請(qǐng)求39 resp, result, err: = svc.Prepay(ctx,40 native.PrepayRequest {41 Appid: core.String("wxd678efh567hg6787"),42 Mchid: core.String("1900009191"),43 Description: core.String("Image形象店-深圳騰大-QQ公仔"),44 OutTradeNo: core.String("1217752501201407033233368018"),45 Attach: core.String("自定義數(shù)據(jù)說(shuō)明"),46 NotifyUrl: core.String("https://www.weixin.qq.com/wxpay/pay.php"),47 Amount: & native.Amount {48 Total: core.Int64(100),49 },50 },51 )52 // 使用微信掃描 resp.code_url 對(duì)應(yīng)的二維碼,即可體驗(yàn)Native支付53 log.Printf("status=%d resp=%s", result.Response.StatusCode, resp)54}