微信自定義菜單中文亂碼問題

文章轉自 《微信自定義菜單中文亂碼問題html

問題:微信自定義菜單開發者模式,菜單中文出現亂碼 
例:json

$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!」}api

微信自定義菜單建立接口文檔: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就準備好了 
下邊是網友提供的請求方法,以供參考:curl

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 你們都懂的。編碼

相關文章
相關標籤/搜索