微信发送客服消息,post出去的数据被UNICODE了,请问如何不被UNICODE?

        $postdata = array (
            'touser' => 'ogBp8jgP3XYzstdz2XTTNDjV5qmc',
            'msgtype' => 'text',
            'text' =>
                array (
                    'content' => '你好',
                ),
        );
        $url = 'https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=36_ORMvAyfhWVP9u75xfzZn4b6thN3IG6ix7343qvrUnmxTmPJKOoT1mDK4h1IGsX4Y5ezYsU7Ok8I9MxsQmNqvKB97WC2UhFgwvjKpdx75twE2ZI7NTA_Djv8JWvXYQ1ryuQX0L5kdu20XprMeATFgAEANGS';
        Http::post($url, $postdata);

我用上面代码去发送微信公众号客服消息。然后,用户收到的是 \u4f60\u597d
我知道 json_encode($postdata,JSON_UNESCAPED_UNICODE) 可以发中文。可是Http::post 他post的数据,必须是数组。所以,请问,应该要如何做才能不unicode,把中文发出去?感谢回答。

我感觉是不是laravel,哪里要设置一下,因为微信端最终是要json的,laravel要我传数组,肯定是最后laravel最后转json出问题了。为什么这么说呢?因为我按照下面的写法,是能够正常输出中文的。

    public function aaa(){
        $postdata = array (
            'touser' => 'ogBp8jgP3XYzstdz2XTTNDjV5qmc',
            'msgtype' => 'text',
            'text' =>
                array (
                    'content' => '你好',
                ),
        );
        $postdata = json_encode($postdata,JSON_UNESCAPED_UNICODE);
        $url = 'https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=36_htb7Ye9iDI4uZNCay-RdxyoupuGiUw_k6vYFK2wylZ7BpCBlozYPeklVjr6Y3PQTFcVpMA5oODJlNuoTqUSOsFbr3FzRdlkO2VtCQGcIm_zJ24cyjtC1UAevppnhUpyXmrsd8cNwphYt-MfJGDbACAWTQ';
        $bbb = $this->postHttps($url,$postdata);
        var_dump($bbb);
    }

    public function postHttps($post_url,$post_string){
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $post_url);
        curl_setopt($curl, CURLOPT_POST, 1 );
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
        curl_setopt($curl, CURLOPT_TIMEOUT, 5);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $post_string);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl,CURLOPT_USERAGENT,"Mozilla/4.0");
        $result = curl_exec($curl);
        curl_close($curl);
        return $result;
    }

解决方案:laravel自带的方式

Http::withBody(\json_encode($postdata, JSON_UNESCAPED_UNICODE), 'application/json')->post($url)->body();

但是Guzzle 听说也能做,试了很多,没有找到解决方案,用Guzzle 的。

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

Guzzle也一样的啊,laravel的Http也是封装的Guzzle

$response = $client->request('POST', $url, [
    'body' =>\json_encode($postdata, JSON_UNESCAPED_UNICODE),
    'headers' => ['Content-Type' => 'application/json']
]);
3年前 评论
讨论数量: 7

接收到的数据转化下就可以了:

$str = '\u4f60\u597d';
dd(json_decode(sprintf('"%s"', $str))); 
3年前 评论
wakamono (楼主) 3年前
minororange 3年前

估计你使用的包的json_encode 没有加参数,你可以加个参数

3年前 评论
wakamono (楼主) 3年前

你用PHP原生方法输出试试 再看laravel里面该怎么输出

3年前 评论
wakamono (楼主) 3年前

不要用 laravel 封装的(因为不支持),用原生的guzzle包发起请求,并且请求数据要自己 json_encode 好你需要的格式放到 body 参数里,具体可以参考guzzle的文档

3年前 评论
wakamono (楼主) 3年前
eddy8 (作者) 3年前

你和 laravel交流群的不是同一个人?不是给了解决方法吗

Http::withBody(\json_encode($postdata,JSON_UNESCAPED_UNICODE), 'application/json')->post($url);
3年前 评论
wakamono (楼主) 3年前
g1291551353 3年前
g1291551353 3年前

Guzzle也一样的啊,laravel的Http也是封装的Guzzle

$response = $client->request('POST', $url, [
    'body' =>\json_encode($postdata, JSON_UNESCAPED_UNICODE),
    'headers' => ['Content-Type' => 'application/json']
]);
3年前 评论
withBody(\json_encode($postdata, JSON_UNESCAPED_UNICODE), 'application/json')
3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!