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


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

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

    $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;  
        }

    参数: 
    menujsonaccess_token 大家都懂的。

  • 相关阅读:
    黑客入侵美国一家公司夺走1500万美元?Midge建议你一定要知道
    开始使用AngularJS和ASP。NET MVC -第二部分
    MVC Tempdata,查看并保持混乱
    AngularJS ui-router
    仅限OCR图像的PDF文件。
    FxButton类
    WPF图像按钮100%在XAML
    CFlexiButton类
    一个更好的位图按钮类
    COddButton
  • 原文地址:https://www.cnblogs.com/showersun/p/4598556.html
Copyright © 2020-2023  润新知