用的是 WeChatPay OpenAPI SDK 语言 版本 PHP 7.4 想调用APP支付
报错如下:
{
"result": false,
"message": "The `certs(2F68B0097C6A5EA9F7557F8Dxxxxxxxxxx)` contains the merchant's certificate serial
number(2F68B0097C6A5EA9F755xxxxxxxxx) which is not allowed here."
}
接口代码如下:
$merchantId = '1612xxxxxx';
// 商户私钥,文件路径假定为 `/path/to/merchant/apiclient_key.pem`
$merchantPrivateKeyFilePath = './apiclient_key.pem';
// 加载商户私钥
// $merchantPrivateKeyInstance = 'HDOABDsjawasndclnaskHDHDKAHDiasn';
$merchantPrivateKeyInstance = PemUtil::loadPrivateKey($merchantPrivateKeyFilePath);
$merchantCertificateSerial = '2F68B0097C6A5EA9F7xxxxxxxxxxx';// API证书不重置,商户证书序列号就是个常量
// // 或者从以下代码也可以直接加载
// // 商户证书,文件路径假定为 `/path/to/merchant/apiclient_cert.pem`
// $merchantCertificateFilePath = './apiclient_cert.pem';
// // 加载商户证书
// $merchantCertificateInstance = PemUtil::loadCertificate($merchantCertificateFilePath);
// // 解析商户证书序列号
// $merchantCertificateSerial = PemUtil::parseCertificateSerialNo($merchantCertificateInstance);
// 平台证书,可由下载器 `./bin/CertificateDownloader.php` 生成并假定保存为 `/path/to/wechatpay/cert.pem`
$platformCertificateFilePath = './apiclient_cert.pem';
// // 加载平台证书
$platformCertificateInstance = PemUtil::loadCertificate($platformCertificateFilePath);
// // 解析平台证书序列号
$platformCertificateSerial = PemUtil::parseCertificateSerialNo($platformCertificateInstance);
// var_dump($platformCertificateSerial,$platformCertificateInstance);
// 工厂方法构造一个实例
$instance = Builder::factory([
'mchid' => $merchantId,
'serial' => $merchantCertificateSerial,
'privateKey' => $merchantPrivateKeyInstance,
'certs' => [
$merchantCertificateSerial => $platformCertificateInstance,
],
// // APIv2密钥(32字节)--不使用APIv2可选
// 'mchid' => $merchantId,
// 'secret' => $merchantPrivateKeyInstance,// `ZZZZZZZZZZ` 为变量占位符,如需使用APIv2请替换为实际值
// 'merchant' => [// --不使用APIv2可选
// // 商户证书 文件路径 --不使用APIv2可选
// 'cert' => $merchantCertificateFilePath,
// // 商户API私钥 文件路径 --不使用APIv2可选
// 'key' => $merchantPrivateKeyFilePath,
// ],
]);
try {
$resp = $instance->v3->pay->transactions->app->post(['json' => [
'mchid' => $merchantId,
'out_trade_no' => 'native12177525012014070332333',
'appid' => 'wxdac8faa4a659fe52',
'description' => 'Image形象店-深圳腾大-QQ公仔',
'notify_url' => 'https://weixin.qq.com/',
'amount' => [
'total' => 1,
'currency' => 'CNY'
],
]]);
$platformCertificateFilePath = './apiclient_cert.pem';
写错了,这个是要通过内置 `./bin/CertificateDownloader.php` 下载的平台证书
/bin/CertificateDownloader.php 参考这个 https://blog.csdn.net/fuchto/article/details/122946465
有没有大哥把整个流程教一下
对啊 啥意思啊 我也没看懂
`./bin/CertificateDownloader.php`. 这个如何下载平台证书? 我还是不懂