WeChat のカスタム メニューを作成しようとしていますが、失敗しました。アドバイスをいただければ幸いです。
インターフェースの説明
特定の構造を POST して、WeChat クライアント上にカスタム メニューを作成します。
リクエスト手順
http リクエストメソッド: POST
https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN
リクエスト例
{
"button":[
"{
" " type":"click"、
"name":"今日の曲"、
"key":"V1001_TODAY_MUSIC"
"type":"click"、
"name":"歌手プロフィール"、
"key" :"V1001_TODAY_SINGER"
「type」:"click"、
"name":"hello word"、
" key":"V1001_HELLO_WORLD
「key」:「V1001_GOOD」
コードは次のとおりです:
$xjson = ' { "button":[ { "type":"click", "name":"todaymusic", "key":"V1001_TODAY_MUSIC" }, { "type":"click", "name":"singer", "key":"V1001_TODAY_SINGER" }, { "name":"menu", "sub_button":[ { "type":"click", "name":"hello word", "key":"V1001_HELLO_WORLD" }, { "type":"click", "name":"best", "key":"V1001_GOOD" }] }] }';$url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=******";$context = json_decode($xjson,true);$data = http_build_query($context);$result = vpost($url,$data);var_dump($result);function vpost($url,$data){ // 模拟提交数据函数 $curl = curl_init(); // 启动一个CURL会话 curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); // 对认证证书来源的检查 curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); // 从证书中检查SSL加密算法是否存在 curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)'); // 模拟用户使用的浏览器 // curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转 // curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer curl_setopt($curl, CURLOPT_POST, 1); // 发送一个常规的Post请求 curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // Post提交的数据包 curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环 curl_setopt($curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回 $tmpInfo = curl_exec($curl); // 执行操作 if (curl_errno($curl)) { echo 'Errno'.curl_error($curl);//捕抓异常 } curl_close($curl); // 关闭CURL会话 return $tmpInfo; // 返回数据}
ああ、私もこの問題に遭遇しました
私もです。 。 。
私もです!!!
import java.io.IOException;import org.apache.commons.httpclient.HttpClient;import org.apache.commons.httpclient.HttpException;import org.apache.commons.httpclient.methods.PostMethod;public class wx_menu{ public static void main(String[] args){ String url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=Sv1MA_nwKURUfNUWEusf0IOu6DpAJTQIuR0kLZ4xnj283_o9wDTS8WsLRM-AQ9q36OoWj09gbLgJit5LCZwfV9eHpbn3f4ARrlUsU-JaOxn_khR4Qnm0UDXz6NCG06PP6J3U4rP-x-kJvl87Nzb87Q"; /** * 设置菜单 * 在为什么用\"你懂得,这是java代码 */ String responeJsonStr = "{"+ "\"button\":["+ "{\"name\":\"菜单名称1\","+ "\"type\":\"click\"," + "\"key\":\"V01_S01\"" + "},"+ "{\"name\":\"菜单名称2\","+ "\"type\":\"click\"," + "\"key\":\"V02_S01\"" + "},"+ "{\"name\":\"菜单名称1\","+ "\"type\":\"click\"," + "\"key\":\"V03_S01\"" + "}"+ "]"+ "}"; HttpClient client = new HttpClient(); PostMethod post = new PostMethod(url); post.setRequestBody(responeJsonStr); post.getParams().setContentCharset("utf-8"); //发送http请求 String respStr = ""; try { client.executeMethod(post); respStr = post.getResponseBodyAsString(); } catch (HttpException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } System.out.println(responeJsonStr); System.out.println(respStr); } }
PHP コードが見つかりました。
http://liyandong.duapp.com/?m=study
PHPで書き始めましたが、解決できませんでした。その後、Linuxに切り替えてcurlを直接使用して解決しましたが、中国語のエンコードに注意する必要があります。
これは私がやったことです: json 文字列を記述し、スペースと改行を含まないバージョンを取得し、Linux で Curl を使用します。 コードは次のとおりです。
curl -d '{ "button":[ { "name ":"Health Query", "sub_button":[ { "....' https://api.weixin.qq.com/cgi-bin/menu/create?access_token=xxxx
に注意してください-d これは一重引用符であり、それ以外の場合は invlide ボタン サイズ 40016 です。
これが役立つことを願っています
私は解決しました:
https、{"errcode":40016,"errmsg": への投稿データの送信の問題。 "無効なボタン サイズ"}
http://blog.csdn.net/e421083458/article/details/14649129