[2019-06-15 18:08:24 最后更新]
微信支付 php 版本 sdk 的坑
1.
各种配置不能少
修改 native.php
1.1 客户支付成功时的通知地址,注意,这个地址要返回正确的格式给微信后台,否则会被多次调用
$input->SetNotify_url("http://xxx/wxpay.php");
其余的基本上在 WxPay.Config.php 修改,其实这里也有修改通知地址的,不过那个是用模式1的,现在一般都用更简单的模式2,所以生效的是前面的那个
1.2
GetAppId //可以是小程序的 appid 或者是公众号的 appid ,很多人都很意外小程序的也可以用吧.不过小程序本身就是加强版的公众号嘛.
1.3
GetMerchantId //商户号,直接在 "微信商户平台" 看就可以了.
要注意的是这个并不是公众账号,也不是小程序的登录账号,而是它们关联来用来支付的另外的独立账号.
修改某些参数时还要装控件,而这个控件目前的最新 firefox 是不支持的,用 google 的 chrome 比较好.
1.4
GetNotifyUrl //这个和 1.1 其实是一样的,用在的地方不一样而已,两者设置成同样的吧,免得节外生枝.
1.5
GetKey //KEY:商户支付密钥,参考开户邮件设置(必须配置,登录商户平台自行设置), 请妥善保管, 避免密钥泄露
这个非常关键,而且已经有支付在工作的造成不要再设置,会让它们失效的! 因为这个信息只显示一次!
所以一定要保存好,后面做的一定要找到以前设置好的,不要再重新生成!!!
如果已经做有支付的小程序或者是公众号的那铁定是已经有了的,不要再重新生成.
1.6
还有一点很崩溃的,默认这些错误并不会提示!!! 很大一部分原因是官方代码里把它们 try 起来了,所以用可调试的 ide 来调试吧
或者可以先打开 的 try 部分.
例如 WxPay.Api.php 中的函数 reportCostTime 中有如下代码
try{
self::report($config, $objInput);
} catch (WxPayException $e){
//不做任何处理
}
2.
curl出错,错误码:60
参考 https://www.cnblogs.com/rainblack/p/5433118.html
如下是运行微信支付测试代码时出错代码:
Fatal error: Uncaught exception ‘WxPayException‘ with message ‘curl出错,错误码:60‘ in C:\wwwroot\fangbei\lib\WxPay.Api.php:564 Stack trace: #0 C:\wwwroot\fangbei\lib\WxPay.Api.php(62):
WxPayApi::postXmlCurl(‘<xml><appid><![...‘, ‘https://api.mch...‘, false, 6) #1 C:\wwwroot\fangbei\pay\jsapi.php(36):
WxPayApi::unifiedOrder(Object(WxPayUnifiedOrder)) #2 {main} thrown in C:\wwwroot\fangbei\lib\WxPay.Api.php on line 564
解决于下
第538行
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);//严格校验
>>原理就是将比较严格的 ssl 安全套接字校验改得宽松一点
3.
time_expire时间过短,刷卡至少1分钟,其他5分钟
解决方法:在生成预支付订单号时,不填写time_expire字段 因为这个字段不是必须填写的。
4.
通知接收地址程序可以参考 notify.php 基本上就是要按格式生成一个 xml
应该只要两个字段,参考 https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_7&index=8
感觉入参中的 openid 是很重要的,可以代表一个微信用户在这个 app 中的唯一标识.