A-A+

PHP微信小程序-微信支付分-APIv3

2021年09月15日 php 暂无评论 阅读 3,315 views 次

弄到凌晨4点半,终于把微信支付分接口的坑给躺平了。。肝

 

微信APIv3与v2区别

格式:v3用json,v2用xml

回调:v3需要AES-256-GCM加密

签名方式:v3用非对称密钥SHA256-RSA

 

小程序支付-官方文档

指引

https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_8_2.shtml

微信生成签名

https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay4_0.shtml

微信签名验证

https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay4_1.shtml

微信回调

https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_22.shtml

测试微信回调

<?php
$url   = 'https://www.xxx.cn/v1/wx/wechatpay/notify_url';  //你的微信支付回调域名
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS,'你的XML数据(从第一次支付成功保存到数据库或者日志里查看');
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type:text/xml; charset=utf-8"));
$result = curl_exec($ch);   // 抓取URL并把它传递给浏览器
exit($result);

常见问题及错误码(用ctrl+f搜索)

https://developers.weixin.qq.com/community/pay/doc/0004060fa7c65855d698166145b808?blockType=8

 

 

函数:

openssl_get_publickey()

openssl_verify()

parse_url($url);//拆分url为数组

 

遇到的坑:

1、微信支付的APIV3还不完善,比如查询‘支付分-订单’就无法使用语法糖的方法。还得自己生成签名,然后用guzzle去请求,其他接口都没问题。所以目前使用APIV3的话,如果要查询订单,2套方法都的写,有点坑。

2、自己生成签名去请求,必须带签名,而且按照他的格式,比如

$res = $client->request('GET', $url_all, [
'headers' => [
'Authorization'=>'WECHATPAY2-SHA256-RSA2048 '.$token,
'Content-Type'=>'application/json',
'Accept'=>'application/json',
'User-Agent'=>'wx_play/v1',
]
]);

Authorization里面不是只有token,前面要加上WECHATPAY2-SHA256-RSA2048和空格。

 

3、windows本地开发使用ssl时报错:CURLE_PEER_FAILED_VERIFICATION (60)

解决:https://www.jianshu.com/p/a5f11c448436

 

4、请求v3接口必须带签名证书

 

5、微信支付回调,必须证书解密,尽量签名验证来源。

标签:

给我留言