微信支付PHP开发问题总结
-
wechatpay-php 报错
Cannot load privateKey from
// 从本地文件中加载「商户API私钥」,「商户API私钥」会用来生成请求的签名 $privateKeyFilePath = '/app/conf/apiclient_key.pem'; $privateKeyInstance = Rsa::from($privateKeyFilePath, Rsa::KEY_TYPE_PRIVATE);
处理方法是带 file 协议,例如:
$privateKeyInstance = Rsa::from("file://".$privateKeyFilePath, Rsa::KEY_TYPE_PRIVATE);
-
输入源“/appid”映射到字段“公众号ID”必填性规则校验失败,此字段为必填项
使用官方推荐的 wechatpay-php 开发库,按照微信支付文档中心APP支付接入前准备 内容确认APPID 、mchid (商户号)、商户API证书序列号、APIv3密钥这几个参数。
-
如何获取微信支付平台证书
/usr/local/php/bin/php /data/html/api_kumayi/vendor/bin/CertificateDownloader.php -k ${apiV3key} -m ${mchId} -f ${mchPrivateKeyFilePath} -s ${mchSerialNo} -o ${outputFilePath} -c ${wechatpayCertificateFilePath}
参数说明:
-k 是API v3 密钥;
-m 是商户号;
-f 是商户的私钥文件
-s 是商户证书的序列号
-o 是下载成功后保存证书的路径,可选参数
-c 是微信支付证书,用于验签; 非必需参数
注意:
第一次下载证书对于微信支付平台的应答,需要使用平台证书来进行验签;但平台证书只能通过 获取平台证书接口 下载,所以当第一次去获取证书时,会出现个“死循环”。
为解决这个“死循环”,可以临时跳过验签,来获得证书。也就是说可以不提供微信支付证书参数(-c 参数)来下载,在下载得到证书后,工具会使用证书对报文的签名进行验证,如果通过则说明证书正确。
参考文档:
wechatpay-php 开发者库: https://github.com/wechatpay-apiv3/wechatpay-php
APP支付官方文档:https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_5_1.shtml
微信支付接口规则 :https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay3_1.shtml
API证书及密钥: https://kf.qq.com/faq/161222NneAJf161222U7fARv.html