微信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) );

测试通过!本文结束!