今天在调试支付宝应用场景时,突然出现错误提示:
Parameter must be an array or an object that implements Countable in xxx/shop/alipay/alipay_core.function.php on line 23
这是由于使用php7.2下出现的,原代码是:
/** * 把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串 * @param $para 需要拼接的数组 * return 拼接完成以后的字符串 */ function createLinkstring($para) { $arg = ""; while (list ($key, $val) = each ($para)) { $arg.=$key."=".$val."&"; } //去掉最后一个&字符 $arg = substr($arg,0,count($arg)-2); //如果存在转义字符,那么去掉转义 if(get_magic_quotes_gpc()){$arg = stripslashes($arg);} return $arg; } /** * 把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串,并对字符串做urlencode编码 * @param $para 需要拼接的数组 * return 拼接完成以后的字符串
所以解决方案是:
//去掉最后一个&字符 //$arg = substr($arg,0,count($arg)-2);//php7.2下count函数的参数只能是数组,参考 https://code.pingju365.com/5428.html $arg = substr($arg,0,strlen($arg)-1); //如果存在转义字符,那么去掉转义 if(get_magic_quotes_gpc()){$arg = stripslashes($arg);}
把原先那句用// 注释掉,如上图还做了注解。在下面重新写一句:
$arg = substr($arg,0,strlen($arg)-1);
然后测试通过未报错。
资源均来自第三方,谨慎下载,前往第三方网站下载