系统要接入一个从商户向用户转帐的功能,原本是企业付款到零钱,但是微信近来关了这个接口,只能接入商家转账到零钱,真是不知道这两个有什么区别,也可能是微信甩锅的一贯套路,把自己的风险排除干净,有风险都是用户的责任。
接口不外乎都是post或get一个url,自己写也可以,但是微信的签名策略真是个大坑,摸索了一天愣是签名不对,最终还是放弃了。
用了微信的sdk,最好用composer下载sdk,sdk因为引用了太多的第三方库,一个一个的下载绝对会吐血。之前用到的另外一个这样的sdk的公司是京东,真是有异曲同工之妙。
忍不住又要吐槽一下,好好的国内企业,sdk遍地英文注释,难道这些不是中国人开发的?还发布到github上,难道不知道国内有时候会墙。这点真是没法和支付宝比,在我一个开发者来说,支付宝可能是会站在开发者的立场开发sdk,开发者能轻松上手。微信估计是怕国人用的太多,所以把sdk搞得变态一点
打开sdk的gitbub地址,这会我这打不开了,截一个自己项目的图片
platformCertificateFilePath是微信的支付证书,不是商户的证书,要用另外一个地址下载,下载方法放到文章最后
platformCertificateFilePath是微信的支付证书,不是商户的证书,要用另外一个地址下载,下载方法放到文章最后
platformCertificateFilePath是微信的支付证书,不是商户的证书,要用另外一个地址下载,下载方法放到文章最后
这里折腾了好久,如果使用商户的apiclient_cert.pem会报错,The certs(xxxxx)
contains the merchant‘s certificate serial number(xxxxxxx) which is not allowed here.
其他按照github的sdkdemo填写就行了。
下载微信支付证书
在sdk文件夹中bin目录下有一个CertificateDownloader.php和README.md。
按照参数说明,在终端运行
php ./bin/CertificateDownloader.php -k ${apiV3key} -m ${mchId} -f ${mchPrivateKeyFilePath} -s ${mchSerialNo} -o ${outputFilePath}
会输出证书内容,也会存储到outputFilePath指定的目录。
另外需要注意,merchantPrivateKeyFilePath和platformCertificateFilePath这两个参数值如果是证书文件一定要以file://开头+证书完整路径,或者用-----BEGIN CERTIFICATE-----开头的证书内容