微信发送客服消息,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 的。
Guzzle也一样的啊,laravel的Http也是封装的Guzzle