微信开发的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的可拓展性!