第 1 步,登录微信支付设置 APIv3 密钥 和证书
商户 API 证书申请指南:https://kf.qq.com/faq/161222NneAJf161222U7fARv.html
商户 api 证书生成工具下载地址
windows 版本:https://wx.gtimg.com/mch/files/WXCertUtil.exe
mac 版本:https://wx.gtimg.com/mch/files/WXCertUtil.dm
第 2 步,安装 SDK 工具:wechatpay-php
SDK 工具 GitHub 地址:https://github.com/wechatpay-apiv3/wechatpay-php
composer require wechatpay/wechatpay
第 3 步,使用 SDK 下载微信支付平台证书
在 SDK 工具中有内置的微信支付平台证书下载器
使用命令下载微信支付平台证书(说明文档:https://github.com/wechatpay-apiv3/wechatpay-php/blob/main/bin/README.md)
composer exec CertificateDownloader.php -- -k ${apiV3key} -m ${mchId} -f ${mchPrivateKeyFilePath} -s ${mchSerialNo} -o ${outputFilePath}
下载微信支付平台证书命令参数说明
-k, –key=<apiV3key> ApiV3Key,第一步所设置的 APIv3 密钥
-m, –mchid=<merchantId> 商户号
-f, –privatekey=<mchPrivateKeyFilePath> 第一步所设置的商户 API 证书中的 apiclient_key.pem 文件,商户 API 证书的私钥文件路径
-s, –serialno=<mchSerialNo> 第一步所设置的商户 API 证书的序列号,
-o, –output=[outputFilePath] 下载成功后保存证书的路径,可选参数,默认为临时文件目录夹
初次下载平台证书,下载证书命令 demo(window 环境运行 CertificateDownloader.php.bat 文件)
composer exec CertificateDownloader.php.bat -k 891c4302cf6d93e2d3361fd07113edaa -m 161692**** -f E:\code_www\study\apiclient_key.pem -s 312C107503F966FD5C9EB5752898D5C2626***** -o E:\code_www\study\
第 4 步,编写 DEMO 并测试
demo 直接复制 GitHub 上面的代码
class WeiXinPay
{
public $instance; // 初始化请求对象
// 初始化方法
public function __construct()
{
// 商户号
$merchantId = '16169320**';
// 从本地文件中加载「商户 API 私钥」,「商户 API 私钥」会用来生成请求的签名
$merchantPrivateKeyFilePath = 'file://E:\code_www\study\apiclient_key.pem';
$merchantPrivateKeyInstance = Rsa::from($merchantPrivateKeyFilePath, Rsa::KEY_TYPE_PRIVATE);
//「商户 API 证书」的「证书序列号」$merchantCertificateSerial = '312C107503F966FD5C9EB5752898D5C2626*****';
// 从本地文件中加载「微信支付平台证书」,用来验证微信支付应答的签名
$platformCertificateFilePath = 'file://E:\code_www\study\wechatpay_731901C9DAAF7254F7E57EB5CD6CA2BCD8E1B723.pem';
$platformPublicKeyInstance = Rsa::from($platformCertificateFilePath, Rsa::KEY_TYPE_PUBLIC);
// 从「微信支付平台证书」中获取「证书序列号」$platformCertificateSerial = PemUtil::parseCertificateSerialNo($platformCertificateFilePath);
// 构造一个 APIv3 客户端实例
$this->instance = Builder::factory([
'mchid' => $merchantId,
'serial' => $merchantCertificateSerial,
'privateKey' => $merchantPrivateKeyInstance,
'certs' => [$platformCertificateSerial => $platformPublicKeyInstance,],
]);
// 发送请求
$resp = $this->instance->chain('v3/certificates')->get();
echo $resp->getBody();}
}
关于微信支付 V3 版本使用的支付证书的问题。
- “商户证书”是指由商户申请的,包含商户的商户号、公司名称、公钥信息的证书。
- ”平台证书”是指由微信支付负责申请的,包含微信支付平台标识、公钥信息的证书。
- 证书序列号,每个证书都有一个由 CA 颁发的唯一编号,即证书序列号
- 平台证书的下载:初次下载可以用 sdk 提供的下载工具下载(见本文档示例)
普通服务商 商户进件:https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter11_1_1.shtml
上述文档描述不支持进件个人微小商户
电商平台二级商户进件:https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_1_1.shtml