本猿最近在做微信支付干系的案例,参考了一下微信官方的支付文档,在本地跑了一下官方给的Demo,下面以Native支付为例,创造Native支付模式二的二维码便是不显示。
Native支付模式二不显示二维码
仔细阅读了微信支付的官方文档,个中文档中有一个“关照地址(notify_url)”的字段名,描述里清楚明确的写道:“异步吸收微信支付结果关照的回调地址,关照url必须为外网可访问的url,不能携带参数。”https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_1,这才明白原来微信支付回调必须是公网能访问到的,于是乎做了个用natapp做了内网穿透,结果却创造二维码还是不显示,又出什么幺蛾子了???没办法,一步一步地调试呗,记得有位老师说过,写代码便是一步步调试的过程。
在官方给的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);//严格校验
以上便是我调试微信支付官方碰着问题的办理思路,其他模式的支付该当也都大同小异,希望能帮助到大家,本人才疏学浅,如写的有问题,请各位大佬示正,不才感激不尽。
欢迎大家对我的文章进行点赞评论转发,如果喜好我的话,可以加个关注,大家相互学习一下。往后我会定时分享我平时碰着的一些技能问题。