支付宝WAP版接口出现ALI38173提示错误。
错误出现原因,PHP程序冲windows 服务器迁移到 apache 服务器,支付宝WAP支付出现ALI38173错误提示,而同接口下面的PC版支付接口什么问题都没有。
关于 ALI38173 这个提示的解释,官网上面的解释是缺少参数,请检查。
问题所在:AlipayTradeWapPayContentBuilder.php 下面有一个方法
public function getBizContent() { if(!empty($this->bizContentarr)){ $this->bizContent = json_encode($this->bizContentarr,JSON_UNESCAPED_UNICODE); } return $this->bizContent; }
此方法返回的参数变成空的了,就导致了整体往支付宝递交的参数变为空了。通过度娘查了一下,是
JSON_UNESCAPED_UNICODE
导致的问题,这个JSON的方法是不兼容5.4以下版本的。果然,把apache下面的 php版本升级到5.5,支付接口顺利运行。
到这里,就已经是找到问题所在了。
两个个方法解决:
1.升级PHP版本,一劳永逸的。
2.对于没法升级PHP版本的,可以考虑直接改造这个方法。或者去掉这个JSON方法试试,理论上也是可以允许的。下面是从度娘上面找来的方法,没有去试,大家要是改不动PHP版本的,可以是尝试一下,CSDN上面的,应该可以运行。
function json_encode($array) { if(version_compare(PHP_VERSION,'5.4.0','<')){ $str = json_encode($array); $str = preg_replace_callback("#\\\u([0-9a-f]{4})#i",function($matchs){ return iconv('UCS-2BE', 'UTF-8', pack('H4', $matchs[1])); },$str); return $str; }else{ return json_encode($array, JSON_UNESCAPED_UNICODE); } }