wechatpay-apiv3 / wechatpay-php

微信支付 APIv3 的官方 PHP Library,同时也支持 APIv2
Apache License 2.0
475 stars 98 forks source link

初始化参数`certs`键值对参数校验时为什么不能含商户证书序列号`merchantCertificateSerial` #108

Closed guoyuanchang closed 1 year ago

guoyuanchang commented 1 year ago

运行环境

- OS:centos
- PHP:7.4
- wechatpay-php: src/ClientJsonTrait.php:222

if (array_key_exists($config['serial'], $config['certs'])) {
            throw new Exception\InvalidArgumentException(sprintf(
                Exception\ERR_INIT_CERTS_EXCLUDE_MCHSERIAL, implode(',', array_keys($config['certs'])), $config['serial']
            ));
        }

这里应该是写反了,导致参数校验不通过。应该在前面加上 !。

描述你的问题现象

No response

TheNorthMemory commented 1 year ago

参考 #82 ,是你给错「平台证书」键值对了,SDK强校验了这种逻辑错误。

guoyuanchang commented 1 year ago
image

我这里是参照你的示例写的。

传的参数中,$merchantCertificateSerial 和 $platformCertificateSerial值是相同的,然后就被上面那个地方拦截了。

TheNorthMemory commented 1 year ago

composer v3-certificates -k ${apiV3key} -m ${mchId} -f ${mchPrivateKeyFilePath} -s ${mchSerialNo} -o ${outputFilePath}

先用composer 命令下载平台证书,用法help composer v3-certificates

TheNorthMemory commented 1 year ago

ℹ️ 你需要先手工 下载平台证书 才能使用 SDK 发起请求。