標簽:
文章转自 《微信自定義菜單中文亂碼問題》
問題:微信自定義菜單開發者模式,菜單中文出現亂碼
例:
$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 大家都懂的。
標簽:
原文地址:http://www.cnblogs.com/showersun/p/4598556.html