本猿最近在做微信支付干系的案例,参考了一下微信官方的支付文档,在本地跑了一下官方给的Demo,下面以Native支付为例,创造Native支付模式二的二维码便是不显示。

Native支付模式二不显示二维码

仔细阅读了微信支付的官方文档,个中文档中有一个“关照地址(notify_url)”的字段名,描述里清楚明确的写道:“异步吸收微信支付结果关照的回调地址,关照url必须为外网可访问的url,不能携带参数。
”https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_1,这才明白原来微信支付回调必须是公网能访问到的,于是乎做了个用natapp做了内网穿透,结果却创造二维码还是不显示,又出什么幺蛾子了???没办法,一步一步地调试呗,记得有位老师说过,写代码便是一步步调试的过程。

php本地调试四步轻松教你搞定微信付出当地调试 AJAX

在官方给的Demo里有个native.php的文件,在图中所示的地方加上一个var_dum($result),查看一下这个打印的结果创造是空的。
解释是在进行统一下单的过程中出问题了。

定位到GetPayUrl方法,创造这官方给的代码里仅仅记录了方法,我们可以把这个非常给打印出来,加一行代码:return $e;

利用Postman工具测试有报错:curl出错,缺点码:60,于是我就明白了,这是由于在提交数据的时候有非常。

这时定位到统一下单的方法unifiedOrder,如图:

这里有一行$response = self::postXmlCurl($config, $xml, $url, false, $timeOut);看到这里,想必大家可能就明白了,8成是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选项设置证书目录 如果CURLOPT_SSL_VERIFYPEER(默认值为2)被启用,CURLOPT_SSL_VERIFYHOST须要被设置成TRUE否则设置为FALSE(注:自cURL 7.10开始默认为TRUE。
从cURL 7.10开始默认绑定安装。
)CURLOPT_SSL_VERIFYHOST:1.检讨做事器SSL证书中是否存在一个公用名(common name)。
译者注:公用名(Common Name)一样平常来讲便是填写你将要申请SSL证书的域名 (domain)或子域名(sub domain)。
2.检讨公用名是否存在,并且是否与供应的主机名匹配。

这些配置都改过之后,

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

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

以上便是我调试微信支付官方碰着问题的办理思路,其他模式的支付该当也都大同小异,希望能帮助到大家,本人才疏学浅,如写的有问题,请各位大佬示正,不才感激不尽。

欢迎大家对我的文章进行点赞评论转发,如果喜好我的话,可以加个关注,大家相互学习一下。
往后我会定时分享我平时碰着的一些技能问题。