ホームページ  >  記事  >  バックエンド開発  >  投稿データをhttpsに投稿する際のアドバイスをお願いします。

投稿データをhttpsに投稿する際のアドバイスをお願いします。

WBOY
WBOYオリジナル
2016-06-23 14:26:521733ブラウズ

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; // 返回数据}


失敗し、「{"errcode":40016,"errmsg":"invalid button size"}」というプロンプトが表示されます
お聞きしたいのですが、
1. このコード自体に問題はありますか?
2. ローカル環境は https をサポートする必要がありますか?



ディスカッションへの返信 (解決策)

問題は、私が経験したことのない POST のデータ形式にあります。このエラーは、JSON 内のボタンの数が多いか少ないことを意味します。

このプロンプトは非常に明確である必要があります。 "errcode":40016,"errmsg":"invalid button size"}"

ボタンの数が不正です


プロンプトからは、API リターンのようなカール エラーのようには見えません。そうであれば、それは意味します。送信されましたが、データ形式が間違っています
でも、もう一つ質問があるのですが、httpsは直接送信できますか?

投稿者は問題を解決しましたか?私も同じエラーが発生します。メニューの数に問題はないはずです

これは簡単です。詳細については、QQ: 651732826 までお問い合わせください。私もこの問題に遭遇しましたが、解決しましたか?アドバイスをいただけますか?ありがとう!

ああ、私もこの問題に遭遇しました

私もです。 。 。

私もです!!!

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

このコードは個人テストに利用できます。パッケージ commons-httpclient-3.0.1.jar を忘れずにインポートしてください


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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。