把中介面中的http_post請求拿出來,單獨發送請求,產生菜單。但是建立字母的菜單就發行就緒成功,如果建立中文漢字的就提示發布失敗,報40033錯誤, 不合法的請求字元,不能包含\uxxxx格式的字元 。這是為什麼。利用介面中的createMenu發布中文都可以的
回複內容:
把中介面中的http_post請求拿出來,單獨發送請求,產生菜單。但是建立字母的菜單就發行就緒成功,如果建立中文漢字的就提示發布失敗,報40033錯誤, 不合法的請求字元,不能包含\uxxxx格式的字元 。這是為什麼。利用介面中的createMenu發布中文都可以的
php /** * api不支援中文轉義的json結構 * @param array $arr */ static function json_encode($arr) { $parts = array (); $is_list = false; //Find out if the given array is a numerical array $keys = array_keys ( $arr ); $max_length = count ( $arr ) - 1; if (($keys [0] === 0) && ($keys [$max_length] === $max_length )) { //See if the first key is 0 and last key is length - 1 $is_list = true; for($i = 0; $i < count ( $keys ); $i ++) { //See if each key correspondes to its position if ($i != $keys [$i]) { //A key fails at position check. $is_list = false; //It is an associative array. break; } } } foreach ( $arr as $key => $value ) { if (is_array ( $value )) { //Custom handling for arrays if ($is_list) $parts [] = self::json_encode ( $value ); /* :RECURSION: */ else $parts [] = '"' . $key . '":' . self::json_encode ( $value ); /* :RECURSION: */ } else { $str = ''; if (! $is_list) $str = '"' . $key . '":'; //Custom handling for multiple data types if (is_numeric ( $value ) && $value<2000000000) $str .= $value; //Numbers elseif ($value === false) $str .= 'false'; //The booleans elseif ($value === true) $str .= 'true'; else $str .= '"' . addslashes ( $value ) . '"'; //All other things // :TODO: Is there any more datatype we should be in the lookout for? (Object?) $parts [] = $str; } } $json = implode ( ',', $parts ); if ($is_list) return '[' . $json . ']'; //Return numerical JSON return '{' . $json . '}'; //Return associative JSON }
參見: wechat-php-sdk
直接拼接json串也可以啊,為什麼要先數組,再encode。
而且json更直觀。