商户APIV3密钥,换成32位长度的,搞定,贼离谱!
微信支付使用v3 api初始化证书 Invalid AES key length?Java 调用自动更新微信支付平台证书时 出现java.security.InvalidKeyException: Invalid AES key length: 33 bytes错误, 官方的方法都已试过,求解 [图片] [图片]
2024-11-29官网应该反思,写的什么垃圾文档,大家出现这么多问题,还不解决?
微信支付v3显示"商户证书序列号有误。请使用签名私钥匹配的证书序列号。"请问如何解决?我可以确定密钥是从商户后台下载的,序列号用openssl计算出来的和商户后台获取到的是一样的,代码无论是我自己写的C++实现,PHP SDK 的示例代码,手动拼凑CURL命令都不行。只有官方那个java证书下载工具能通过。搞了两天两夜了,求高手支招。 PHP请求失败: [图片] 证书下载工具下载成功如图: [图片] <?php require_once('vendor/autoload.php'); use WeChatPay\Builder; use WeChatPay\Crypto\Rsa; use WeChatPay\Util\PemUtil; // 设置参数 // 商户号 $merchantId = '163587****'; // 从本地文件中加载「商户API私钥」,「商户API私钥」会用来生成请求的签名 $merchantPrivateKeyFilePath = 'file:///home/ender/PhpstormProjects/untitled/cert/apiclient_key.pem'; $merchantPrivateKeyInstance = Rsa::from($merchantPrivateKeyFilePath, Rsa::KEY_TYPE_PRIVATE); // 「商户API证书」的「证书序列号」 $merchantCertificateSerial = '1995EF71A353F9A9D722344ECD3BC396835*****'; // 从本地文件中加载「微信支付平台证书」,用来验证微信支付应答的签名 $platformCertificateFilePath = 'file:///home/ender/PhpstormProjects/untitled/cert/wechatpay_522D8E1708CE368A65C89B5E1609DEA1E1C*****.pem'; $platformPublicKeyInstance = Rsa::from($platformCertificateFilePath, Rsa::KEY_TYPE_PUBLIC); // 从「微信支付平台证书」中获取「证书序列号」 $platformCertificateSerial = PemUtil::parseCertificateSerialNo($platformCertificateFilePath); // 构造一个 APIv3 客户端实例 $instance = Builder::factory([ 'mchid' => $merchantId, 'serial' => $merchantCertificateSerial, 'privateKey' => $merchantPrivateKeyInstance, 'certs' => [ $platformCertificateSerial => $platformPublicKeyInstance, ], ]); // 发送请求 $resp = $instance->chain('v3/certificates')->get( ['debug' => true] // 调试模式,https://docs.guzzlephp.org/en/stable/request-options.html#debug ); echo $resp->getBody(), PHP_EOL;
2024-11-29