向https提交post数据的问题,请指点
在做微信的自定义菜单,一直不成功,希望能得到指点。
接口说明
通过POST一个特定结构体,实现在微信客户端创建自定义菜单。
请求说明
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"
},
{
"name":"菜单",
"sub_button":[
{
"type":"click",
"name":"hello word",
"key":"V1001_HELLO_WORLD"
},
{
"type":"click",
"name":"赞一下我们",
"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中多了或少了按钮,建议你可以尝试增加或减少button元素看看
这个提示应该很明晰了
"{"errcode":40016,"errmsg":"invalid button size"}"
不合法的按钮个数
从提示看不像是curl的错误,像是api的返回,如果这样的话说明发过去了,只是数据格式不对
但这就有另一个疑问,https能直接发么?
请问楼主解决了么?我也报同样错误。菜单个数应该是没有问题的
这个好弄,我是北京程序员之家的技术,具体联系我qq吧:651732826
你好!我也遇到这个问题了,请问您解决了吗?能指点一下吗?谢谢!
唉,我也遇上这个问题了
我也是。。。
me too!!!
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 string 写好,然后得到一个没有空格和回车的版本,然后在linux下用curl, 代码如下:
curl -d '{ "button":[ { "name":"健康查询", "sub_button":[ { ".....' https://api.weixin.qq.com/cgi-bin/menu/create?access_token=xxxx
注意-d后面的是单引号,否则就是invlide button size 40016.
hoping this can help.
我已经解决:
向https提交post数据的问题,{"errcode":40016,"errmsg":"invalid button size"}
http://blog.csdn.net/e421083458/article/details/14649129

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

在PHP中,應使用password_hash和password_verify函數實現安全的密碼哈希處理,不應使用MD5或SHA1。1)password_hash生成包含鹽值的哈希,增強安全性。 2)password_verify驗證密碼,通過比較哈希值確保安全。 3)MD5和SHA1易受攻擊且缺乏鹽值,不適合現代密碼安全。

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。

PHP類型提示提升代碼質量和可讀性。 1)標量類型提示:自PHP7.0起,允許在函數參數中指定基本數據類型,如int、float等。 2)返回類型提示:確保函數返回值類型的一致性。 3)聯合類型提示:自PHP8.0起,允許在函數參數或返回值中指定多個類型。 4)可空類型提示:允許包含null值,處理可能返回空值的函數。

PHP和Python各有優劣,選擇取決於項目需求和個人偏好。 1.PHP適合快速開發和維護大型Web應用。 2.Python在數據科學和機器學習領域佔據主導地位。

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。
