收藏
回答

WeChatPay OpenAPI SDK certs报错

用的是 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'
                ],
            ]]);
回答关注问题邀请回答
收藏

5 个回答

  • 北望沣渭
    北望沣渭
    2021-07-26
    $platformCertificateFilePath = './apiclient_cert.pem';
    

    写错了,这个是要通过内置 `./bin/CertificateDownloader.php` 下载的平台证书

    2021-07-26
    有用 2
    回复 5
    • 吴立川  Daniel
      吴立川 Daniel
      2021-07-26
      您好,这个不就是平台证书路径嘛,我用官方的下载器下载保存到本地的,而且我看报错好像是说我的证书序列码不该在这。
      2021-07-26
      回复
    • 北望沣渭
      北望沣渭
      2021-07-26回复吴立川 Daniel
      apiclient_cert.pem 这个是平台方提供的商户证书,不是平台方提供的平台证书
      2021-07-26
      1
      回复
    • 吴立川  Daniel
      吴立川 Daniel
      2021-07-26
      解决了,感谢大佬,感谢之情无以言表,我不要给你磕一个吧
      2021-07-26
      1
      回复
    • 花汐
      花汐
      2022-12-16
      为什么前面步骤都正常,就最后下单之后,进行二次签名后给app调起支付的时候提示支付签名验证失败。。。。。。。。。
      2022-12-16
      回复
    • 啊甘~本地生活&app开发
      啊甘~本地生活&app开发
      2023-09-18回复北望沣渭
      这里下载的证书为什么报which is not allowed here
      2023-09-18
      回复
  • Mr.嘉
    Mr.嘉
    2022-03-31

    /bin/CertificateDownloader.php 参考这个 https://blog.csdn.net/fuchto/article/details/122946465

    2022-03-31
    有用 1
    回复
  • WFL亻文
    WFL亻文
    2023-11-08

    有没有大哥把整个流程教一下

    2023-11-08
    有用
    回复
  • 成辉
    成辉
    2021-12-24

    对啊 啥意思啊 我也没看懂


    2021-12-24
    有用
    回复
  • stop
    stop
    2021-08-09

    `./bin/CertificateDownloader.php`. 这个如何下载平台证书? 我还是不懂

    2021-08-09
    有用
    回复
登录 后发表内容