微信JSAPI公众号支付在部分机型上出现appid参数错误的解决办法
都说微信支付的坑比较多,老杨感觉还行,就是开始周期和调试过程比较费时费力-_-!
今儿在调试一个基于微信JSAPI公众号的支付项目时发现,部分机型(比如iphone7/vivo-x6d)中微信支付获取 code 返回页面提示如下错误:
Fatal error: Uncaught exception 'WxPayException' with message 'error: appid参数错误' in .../payments/weixin/WxPay.JsApiPay.php:82 Stack trace: #0 .../weixin_jsapi.php(90): JsApiPay->GetJsApiParameters(Array) #1 {main} thrown in .../payments/weixin/WxPay.JsApiPay.php on line 82
这就比较头疼了,绝大数设备下微信JSAPI公众号支付是正常的,于是根据上述错误,利用下列代码打印出错误位置信息:
$UnifiedOrderResult = WxPayApi::unifiedOrder($input); print_r($UnifiedOrderResult);
打印如下提示:
Array ( [return_code] => FAIL [return_msg] => body不是UTF8编码 )
对应 $input 的参数中,body直接获取订单的标题
$input->SetBody( $order->product_name );
将上述代码行直接替换如下:
$input->SetBody( "This'sProductName" );
再次测试全部通过,网上查到说是直接从 $order 读取的中文字符需要编码UTF8才行,于是有了下述代码:
$input->SetBody( iconv("GBK", "UTF-8//IGNORE", $order->product_name) );
测试通过!本文结束!