微信支付本猿做了统一下单的过程中出问题了?

微信支付

这只猿最近一直在处理一个与微信支付有关的案子。看了下官方微信支付文档,在本地跑官方demo。以Native支付为例,我发现Native支付第二种方式的二维码是Do not show。

原生支付方式2不显示二维码

仔细阅读微信支付的官方文档,其中包含一个字段名“通知地址(notify_url)”,描述清楚地写着:“异步接收微信支付结果通知的回调地址,通知url必须是是外网可以访问的url,不能带参数。”,意识到微信支付回调必须是公网可以访问的,于是做了一个natapp穿透内网,但是发现二维码还是不显示,又发生了什么? ? 没办法,一步一步调试。记得有位老师说过,写代码是一步一步调试的过程。

官方demo中有一个native.php文件,在如图所示的地方添加一个var_dum($result),查看打印结果,发现是空的。解释是统一排序的过程中出现了问题。

找到GetPayUrl方法,发现官方代码只记录了该方法。我们可以打印这个异常并添加一行代码:return $e;

使用Postman工具测试时出现错误:curl错误,错误码:60,所以我理解这是因为提交数据时出现异常。

此时统一下单方式定位b本地调试工具,如图:

图片[1]-微信支付本猿做了统一下单的过程中出问题了?-老王博客

这里有一行 $response = self::postXmlCurl($config, $xml, $url, false, $timeOut);看到这里b本地调试工具,大家可能就明白了,80%的兄弟都是postXmlCurl的问题。说到这个方法,我们可以看到官方的评论。该方法表示以post方式提交xml数据导入对应的url接口。关于567行,可以看到这两行代码:

curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,TRUE);

curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);//严格验证

将这两行代码的第三个参数分别改为FALSE和1。

这两个参数的含义:

CURLOPT_SSL_VERIFYPEER:禁用时,cURL 将停止从服务器验证。使用 CURLOPT_CAINFO 选项设置证书 使用 CURLOPT_CAPATH 选项设置证书目录。默认从 cURL 7.10 绑定安装。) CURLOPT_SSL_VERIFYHOST:1.检查服务器 SSL 证书中是否存在通用名称。译者注:Common Name一般是填写你要申请SSL证书的域名(domain)或子域名(sub domain)。2.检查common name是否存在,是否存在匹配提供的主机名。

更改这些配置后,

用Postman工具调试可以正常返回code_url,页面显示正常。

curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,1);//严格校验

以上是我在调试微信支付官时遇到的问题的解决方法。其他支付方式应该类似。我希望它可以帮助大家。做。

欢迎大家点赞、评论、转发我的文章。喜欢我的可以加个关注,大家可以互相学习。以后会定期分享一些我经常遇到的技术问题。

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论