payment icon indicating copy to clipboard operation
payment copied to clipboard

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

Open Nicolas-Gong opened this issue 4 years ago • 5 comments

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 avatar Apr 20 '20 02:04 Nicolas-Gong

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

Nicolas-Gong avatar Apr 20 '20 10:04 Nicolas-Gong

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

Nicolas-Gong avatar Apr 20 '20 11:04 Nicolas-Gong

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

helei112g avatar May 04 '20 03:05 helei112g

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

linchupeng avatar Sep 22 '21 14:09 linchupeng

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

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

Nicolas-Gong avatar Sep 22 '21 14:09 Nicolas-Gong