微信支付接入遇到的问题
来源:互联网 发布:淘宝假冒商品重新开店 编辑:程序博客网 时间:2024/05/22 08:04
我们的平台需要需要提供微信支付功能,在接入的过程中遇到了一些问题,现记录下来(以后遇到了再增加),一方面备查,另一方面给遇到同样问题的程序猿们一些解决思路,目前使用到了JSAPI支付和PHP支付接口,总体来说接入比较顺利,不可避免的也踩了一些坑。
1. 设置方面
下面只说容易出问题的地方,基本设置方面请参考手册
微信公众平台>>微信支付>>开发配置 中 “支付授权目录”和“测试授权目录”必须精确到支付页面所在的子目录,且只支持域名,不支持IP;
微信公众平台>>接口权限>>网页账号 中 需要设置授权域名,跟上面开发配置中一致,但只包含域名部分,且不允许IP
2. 微信统一支付PHP接口导致服务器变慢
现象描述:
在接入微信统一支付接口之后,微信中调用创建订单功能,尝试多次之后,服务器对普通请求的响应速度变慢,甚至出现500错误,在重启服务后恢复正常。
问题解决:
该问题经过长时间检查,最终定位到微信接口WxPay.Data.php中WxPayDataBase类的FromXml()方法上,导致问题的代码如下
public function FromXml($xml) { if(!$xml) { throw new WxPayException("xml数据异常!"); } //将XML转为array //禁止引用外部xml实体 libxml_disable_entity_loader(true); //这句导致出现上述问题 $this->values = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true); return $this->values;}改为如下即可解决public function FromXml($xml) { if(!$xml) { throw new WxPayException("xml数据异常!"); } //将XML转为array //禁止引用外部xml实体 $disableLibxmlEntityLoader = libxml_disable_entity_loader(true); //改为这句 $this->values = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true); libxml_disable_entity_loader($disableLibxmlEntityLoader); //添加这句 return $this->values;}
分析:
libxml_disable_entity_loader()作用是设置是否禁止从外部加载XML实体,设为true就是禁止,目的是防止XML注入攻击(详情自行百度),本意是好的,但这个在设置后存在BUG(具体没深究,以后有时间可以研究下,也许这个BUG在高版本php中已经解决了,没有验证,总之存在这么个BUG,有研究过的朋友可以告诉我原因),影响了服务的正常运行。
对于遇到相同问题的程序猿们,可以尝试此方法来解决。
0 0
- 微信支付接入遇到的问题
- 微信支付接入遇到的问题
- APP接入微信支付步骤,及遇到的问题
- 微信支付遇到的问题总结
- 微信支付我遇到的问题
- 微信支付遇到的问题集
- 微信支付遇到的小问题
- 微信支付中遇到的问题
- 微信支付遇到的问题
- 微信支付遇到的问题
- 接入支付宝时遇到的问题
- iOS接入微信支付问题
- 对于接入微信分享遇到的问题总结
- iOS客户端的微信支付接入
- iOS客户端的微信支付接入
- iOS客户端的微信支付接入
- iOS客户端的微信支付接入
- iOS客户端的微信支付接入
- iOS 长短音频的播放
- C++单链表(殷人昆版)
- EditText限制输入字符串长度
- Android架构须知
- (ubuntu环境下)浏览器(通过cgi)调用外部程序
- 微信支付接入遇到的问题
- java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType
- JMeter学习(五)检查点
- 混音器(AudioMixer):用Unity 5.0混合出美妙节拍
- 2015年英语学习——12月
- 属性“$”的值为 null、未定义或不是 Function 对象
- Spring事务管理--高级应用难点剖析: 第 3 部分
- market-广告与盈利模式-admob
- (读书笔记)演说:用幻灯片说服全世界