payment
payment copied to clipboard
企业付款时报错 xml_parse() expects parameter 2 to be string, array given
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" => [] ]
""" <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走了下面的转换成数组导致报错
问题找到了 unwrapResponse函数内$contentType返回的是“text/xml; charset=UTF-8”,退款返回的是“text/plain”,所以走了下面的转换成了数组
没太明白?意思是退款返回的数据需要特殊处理吗?
最后是怎么解决的 @gml-9527
最后是怎么解决的 @gml-9527
老哥,我找了很久才找到我以前公司哪个项目用的这个包,然后我发现我引入的是3.1.2的包,于是乎就不存在Gateways这个文件夹了,估计也就不报错了,时间过了很久了,不记得当时咋搞的了,看样子是降版本吧。不过我既然问题都指出来了,你可以尝试修改这个源码,然后提交PR。