首先放出本人开源的wordpress woocommerce的微信支付插件:
【原创】WooCommerce 微信支付插件
微信支付接口开发常见问题
我们按照微信官方提供的demo进行支付接口学习,但是不可避免会遇到一些问题,但是微信官方并没有社区相关的支持,也没有特别详细的文档,只能凭借自己的开发+搜索能力解决遇到的小问题了。
下面是本人整理的一些常见问题:
支付页显示乱码
解决这个问题很简单,直接在native.php头部加入如下代码即可:
header("Content-type:text/html;charset=utf-8");
如下图所示:
微信支付模式二 二维码无法出现
二维码无法出现,大概率问题是因为服务器未开启SSL认证,也有可能是支付宝“签名错误”(签名错误在下个问题中讲解)。
我们为了在不带SSL验证的服务器进行支付,要修改/lib/WxPay.Api.php 函数 postXmlCurl 中的两行代码,将:
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,TRUE); curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);//严格校验
修改为:
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE); curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);
如下图所示:
支付返回“签名错误”的排查方法
1、确认公众号的appSecret和商户号的API密钥没有搞混
认真检查:WxPay.Config 配置文件中配置的商户号,AppID,商户支付密钥以及证书路径,这些都不可以配错。
另外:公众帐号secert(仅JSAPI支付的时候需要配置, 登录公众平台,进入开发者中心可设置),这个如果不是JSAPI调用,可以不做设置。
这些配置账号都可以在开户时腾讯发送的邮件中找到,当然也可以在公众号,或者微信支付商户中心看到,证书在微信支付商户中进行下载。
2、重置商户API密钥
可以在微信支付商户中重置商户API密钥
3、确认公众号授权的域名和目录是正确的
微信支付商户中确保授权的域名路径正确。
异步通知回调无法收到1
这个问题,大家可以参考贴子:
微信支付成功后notify_url没有回调,请问是什么原因?
本人总结如下:
微信异步通知回调如果收不到,首先要检查如下几个地方:
1:在微信支付商户平台,设置微信扫码回调链接,将https改为http;
2:端口一定要是80端口;
3:回调地址自己试下确保可以访问;
4:最关键的一步:微信回调链接,不可以带任何参数,也就是不允许存在 ?, & 等携带参数的符号,比如:
错误的回调地址:
http://www.a.com/index.php?/wechat/notify
正确的回调地址应该是:
http://www.a.com/index.php
一定要切记,回调地址不可以带任何参数,为了防止这个链接出错,可以采用Restful形式的链接地址方式。
异步通知回调无法收到2
升级PHP也可能导致异步无法收到回调。请先检查各自的PHP版本号,如果是php 5.x,不存在该问题,如果是php 7.x,那就一定要注意:
php7不再支持HTTP_RAW_POST_DATA,微信支付$GLOBALS['HTTP_RAW_POST_DATA']获取不到数据。
解决的方法也很简单,
只要使用php://input来代替就行。
比如
$data = $GLOBALS['HTTP_RAW_POST_DATA'];
改为
$data = file_get_contents('php://input');
特别提醒,
如果你的微信支付,小程序支付,app支付中,
以前使用HTTP_RAW_POST_DATA来获取微信支付异步处理结果的,
升级到php7后,
一定要记得按照上面的方法改过来,否则有些功能使用不了。
更多参考:
书山有路勤为径,学海无涯苦作舟,编程也一样如此,学会使用搜索引擎,提高解决问题的能力!
php7不再支持HTTP_RAW_POST_DATA,微信支付$GLOBALS[‘HTTP_RAW_POST_DATA’]获取不到数据,
文章的脚注信息由WordPress的wp-posturl插件自动生成