微信自定义菜单中文乱码问题

来源:互联网 发布:115会员充值 淘宝 编辑:程序博客网 时间:2024/06/07 03:07

问题:微信自定义菜单开发者模式,菜单中文出现乱码
例:

$menu = array(    'button' => array(        array(            'type'=>'view',            'name'=>'百度',            'url'=>'https://www.baidu.com',        ),    ),);

调用微信自定义菜单创建接口:https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN
会出现
{“errcode”:40016,”errmsg”:”invalid button size”} 或者
{“errcode”:40033,”errmsg”:”invalid charset. please check your request, if include \uxxxx will create fail!”}

微信自定义菜单创建接口文档:http://mp.weixin.qq.com/wiki/13/43de8269be54a0a6f64413e4dfa94f39.html
关键点:微信要求请求的数据是JSON字符串格式,但是JSON里的中文仍旧是中文,不能是其他编码。
如上边的数组转成json后,里边的“百度”还得是“百度”。
解决:
环境:PHP版本5.3,代码编码utf-8

 $menu = array(     'button' => array(         array(             'type'=>'view',             'name'=>urlencode('百度'),             'url'=>'https://www.baidu.com',         ),     ), ); $menu = json_encode($menu);   $menu = urldecode($menu);

听说PHP5.4以上会简单些,但没有用过:

 $menu = array(     'button' => array(         array(             'type'=>'view',             'name'=>'百度',             'url'=>'https://www.baidu.com',         ),     ), ); $menu = json_encode($menu,JSON_UNESCAPED_UNICODE);  

以上菜单的json数据$menu就准备好了
下边是网友提供的请求方法,以供参考:

public function createMenu($menu,$access_token){         $ch = curl_init();         curl_setopt($ch, CURLOPT_URL, "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$access_token);         curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");         curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);         curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);         curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');         curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);         curl_setopt($ch, CURLOPT_AUTOREFERER, 1);         curl_setopt($ch, CURLOPT_POSTFIELDS, $menu);         curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);         $tmpInfo = curl_exec($ch);         if (curl_errno($ch)) {             return curl_error($ch);         }         curl_close($ch);         return $tmpInfo;      }

参数:
$menu 是准备好的菜单json数据。
$access_token 大家都懂的。


这里写图片描述

0 0
原创粉丝点击