收藏
回答

小程序下单支付返回401代码?

// 商户号
        $merchantId = $_ENV["MCHID"];
        // 从本地文件中加载「商户API私钥」,「商户API私钥」会用来生成请求的签名
        $merchantPrivateKeyFilePath = 'file://../../apiclient_key.pem';
        // $merchantPrivateKeyFilePath = 'file://../../../apiclient_key.pem';
        // return realpath(__DIR__.DIRECTORY_SEPARATOR.$merchantPrivateKeyFilePath);
        $merchantPrivateKeyInstance = Rsa::from($merchantPrivateKeyFilePath, Rsa::KEY_TYPE_PRIVATE);
        // 「商户API证书」的「证书序列号」
        $merchantCertificateSerial = $_ENV["APIV3"];
        // 从本地文件中加载「微信支付平台证书」(可使用证书下载工具得到),用来验证微信支付应答的签名
        $platformCertificateFilePath = 'file://../../apiclient_cert.pem';
        // $platformCertificateFilePath = 'file://../../../apiclient_cert.pem';
        $platformPublicKeyInstance = Rsa::from($platformCertificateFilePath, Rsa::KEY_TYPE_PUBLIC);
        // 从「微信支付平台证书」中获取「证书序列号」
        $platformCertificateSerial = PemUtil::parseCertificateSerialNo($platformCertificateFilePath);
        $instance = Builder::factory([
            'mchid'      => $merchantId,
            'serial'     => $merchantCertificateSerial,
            'privateKey' => $merchantPrivateKeyInstance,
            'certs'      => [
            $platformCertificateSerial => $platformPublicKeyInstance,
            ],  
        ]);

            $resp = $instance
            ->chain('v3/pay/transactions/native')
            ->post(['json' => [
            'mchid'        => $merchantId ,
            'out_trade_no' => md5("服务器订单id".date("Y-m-d H:m:s")),
            'appid'        => $_ENV["APPID"],
            'description'  => 'Image形象店-深圳腾大-QQ公仔',
            'notify_url'   => 'https://demo.pc-webtech.com/v1/user/login',
            'amount'       => [
                'total'    => 1,
                'currency' => 'CNY'
            ],
            "payer"        => [
                'openid'   =>"oTS2g61i8m1VNjtcfDOHCbeD84bs"
            ]
            ]]);
            return $resp->getBody();
回答关注问题邀请回答
收藏

2 个回答

  • Affection
    Affection
    02-18

    证书的引入方式用绝对路径试试

    02-18
    有用
    回复 2
  • 大山
    大山
    02-18

    签名错误,这两个确定文件加载路径正确?

    02-18
    有用
    回复 2
    • 用代码酿酒的六韬
      用代码酿酒的六韬
      02-18
      确定是正确的,会不会是APIV3?我用的是注册的时候自己填写的那个APIV3我也不知道是不是用这个还是哪个?
      02-18
      回复
    • 大山
      大山
      02-18回复用代码酿酒的六韬
      不清楚的话可以去重置一下。正常证书地址不是这样书写的,你要用 php 函数去拼接一个绝对路径,例如:dirname(dirname(__FILE__)).'/apiclient_cert.pem'。本地测试这样写也可以。
      02-18
      回复
登录 后发表内容