helei112g / payment

Payment是php版本的支付聚合第三方sdk,集成了微信支付、支付宝支付、招商一网通支付。提供统一的调用接口,方便快速接入各种支付、查询、退款、转账能力。服务端接入支付功能,方便、快捷。
MIT License
2.35k stars 678 forks source link

企业付款时报错 xml_parse() expects parameter 2 to be string, array given #213

Open Nicolas-Gong opened 4 years ago

Nicolas-Gong commented 4 years ago

vendor/riverslei/payment/src/Gateways/Wechat/WechatBaseObject.php 文件内 286行返回的就是个数组,然后又到291行toArray一下,就报错了。

最终报错在vendor/riverslei/payment/src/Helpers/DataParser.php 文件内的61行,因为$xml本身为array,xml_parse函数第二个参数只能是字符串。 int xml_parse ( resource $parser , string $data [, bool $is_final = false ] ) $xml = [ "return_code" => [] "return_msg" => [] "result_code" => [] "err_code" => [] "err_code_des" => [] ]

Nicolas-Gong commented 4 years ago

""" \ \\<![CDATA[SUCCESS]]> \\<![CDATA[参数错误:输入的商户订单号有误]]> \\<![CDATA[FAIL]]> \\<![CDATA[PARAM_ERROR]]> \\<![CDATA[参数错误:输入的商户订单号有误]]> \ """ 请求返回的结果是这样的 在HttpRequest.php内的unwrapResponse走了下面的转换成数组导致报错

Nicolas-Gong commented 4 years ago

问题找到了 unwrapResponse函数内$contentType返回的是“text/xml; charset=UTF-8”,退款返回的是“text/plain”,所以走了下面的转换成了数组

helei112g commented 4 years ago

没太明白?意思是退款返回的数据需要特殊处理吗?

linchupeng commented 3 years ago

最后是怎么解决的 @gml-9527

Nicolas-Gong commented 3 years ago

最后是怎么解决的 @gml-9527

老哥,我找了很久才找到我以前公司哪个项目用的这个包,然后我发现我引入的是3.1.2的包,于是乎就不存在Gateways这个文件夹了,估计也就不报错了,时间过了很久了,不记得当时咋搞的了,看样子是降版本吧。不过我既然问题都指出来了,你可以尝试修改这个源码,然后提交PR。