微信开发的invalid charset.please check your request,if include \\uxxxx will create fail!解决方案


试用guzzle作为http和https的通讯库,在微信开发的时候,出现:

{"errcode":40033,"errmsg":"invalidcharset.pleasecheckyourrequest,ifinclude\\uxxxxwillcreatefail!rid:5fb65ba2-10a9ab1f-7aea4a23"}

有一点坑,花了哥两个小时去追踪(定位很快,就是刚刚开始的方向乱了),最终发现源码中的Client.php里面,对json数组的编码默认0执行编码,不会使用JSON_UNESCAPED_UNICODE进行处理,\GuzzleHttp\json_encode($options['json']),Guzzle的这个自定义方法,默认是会将中文进行unicode化的(也就是把中文变成反斜杠开头的如:xxxxx)。

我本人是极力反对去改第三方库的,重写也很麻烦,有头发谁愿意做光头,上车再说!

所以,只能够硬改入参/vendor/guzzlehttp/guzzle/src/functions.php了:

/**
 * Wrapper for JSON encoding that throws when an error occurs.
 *
 * @param mixed $value   The value being encoded
 * @param int    $options JSON encode option bitmask
 * @param int    $depth   Set the maximum depth. Must be greater than zero.
 *
 * @return string
 * @throws Exception\InvalidArgumentException if the JSON cannot be encoded.
 * @link http://www.php.net/manual/en/function.json-encode.php
 */
function json_encode($value, $options = 256, $depth = 512)
//function json_encode($value, $options = 0, $depth = 512)
{
    $json = \json_encode($value, $options, $depth);
    if (JSON_ERROR_NONE !== json_last_error()) {
        throw new Exception\InvalidArgumentException(
            'json_encode error: ' . json_last_error_msg()
        );
    }

    return $json;
}

在这里,要吐槽一下Guzzle的可拓展性!


原文链接:https://blog.yongit.com/note/730890.html