微信支付接入遇到的问题

来源:互联网 发布:淘宝假冒商品重新开店 编辑:程序博客网 时间: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
原创粉丝点击