热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

微信公众平台开发教程Java版(五)自定义菜单创建

前言:自定义菜单能够帮助公众号丰富界面,让用户更好更快地理解公众号的功能。目前菜单创建的权限只有服务号或者是通过认证过的账号。未认证的订阅号暂不支持自定义自定义菜单的账号样子如图:【题外话】这是我

前言:

自定义菜单能够帮助公众号丰富界面,让用户更好更快地理解公众号的功能。

目前菜单创建的权限只有服务号或者是通过认证过的账号。未认证的订阅号暂不支持自定义

 

自定义菜单的账号样子如图:

 

【题外话】

这是我申请的测试号,里面有所有的接口权限,怎么申请看下图



 

自定义菜单基本介绍:

目前自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单。一级菜单最多4个汉字,二级菜单最多7个汉字,多出来的部分将会以“...”代替。请注意,创建自定义菜单后,由于微信客户端缓存,需要24小时微信客户端才会展现出来。建议测试时可以尝试取消关注公众账号后再次关注,则可以看到创建后的效果。

目前自定义菜单接口可实现两种类型按钮,如下:

click:
用户点击click类型按钮后,微信服务器会通过消息接口推送消息类型为event的结构给开发者(参考消息接口指南),并且带上按钮中开发者填写的key值,开发者可以通过自定义的key值与用户进行交互;
view:
用户点击view类型按钮后,微信客户端将会打开开发者在按钮中填写的url值(即网页链接),达到打开网页的目的,建议与网页授权获取用户基本信息接口结合,获得用户的登入个人信息。

接口调用请求说明

 

http请求方式:POST(请使用https协议) https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN

自定义菜单的请求是一个json格式的请求内容

官网的请求示例

 {
"button":[
{
"type":"click",
"name":"今日歌曲",
"key":"V1001_TODAY_MUSIC"
},
{
"type":"click",
"name":"歌手简介",
"key":"V1001_TODAY_SINGER"
},
{
"name":"菜单",
"sub_button":[
{
"type":"view",
"name":"搜索",
"url":"http://www.soso.com/"
},
{
"type":"view",
"name":"视频",
"url":"http://v.qq.com/"
},
{
"type":"click",
"name":"赞一下我们",
"key":"V1001_GOOD"
}]
}]
}

参数说明



 

返回结果

正确时的返回JSON数据包如下:

{"errcode":0,"errmsg":"ok"}

错误时的返回JSON数据包如下(示例为无效菜单名长度):

{"errcode":40018,"errmsg":"invalid button name size"}

 

通过json格式创建菜单

 

package com.ifp.weixin.biz.core.impl;

import net.sf.json.JSONObject;

import org.apache.log4j.Logger;
import org.springframework.stereotype.Service;

import com.ifp.weixin.biz.core.MenuService;
import com.ifp.weixin.util.WeixinUtil;

@Service("menuService")
public class MenuServiceImpl implements MenuService {

public static Logger log = Logger.getLogger(MenuServiceImpl.class);

// 菜单创建(POST) 限100(次/天)
public static String MENU_CREATE = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN";

@Override
public String CreateMenu(String jsonMenu) {
String resultStr = "";
// 调用接口获取token
String token = WeixinUtil.getToken();
if (token != null) {
// 调用接口创建菜单
int result = createMenu(jsonMenu, token);
// 判断菜单创建结果
if (0 == result) {
resultStr = "菜单创建成功";
log.info(resultStr);
} else {
resultStr = "菜单创建失败,错误码:" + result;
log.error(resultStr);
}
}

return resultStr;
}


/**
* 创建菜单
*
* @param jsonMenu
* 菜单的json格式
* @param accessToken
* 有效的access_token
* @return 0表示成功,其他值表示失败
*/
public static int createMenu(String jsonMenu, String accessToken) {

int result = 0;
// 拼装创建菜单的url
String url = MENU_CREATE.replace("ACCESS_TOKEN", accessToken);
// 调用接口创建菜单
JSONObject jsOnObject= WeixinUtil.httpRequest(url, "POST", jsonMenu);

if (null != jsonObject) {
if (0 != jsonObject.getInt("errcode")) {
result = jsonObject.getInt("errcode");
log.error("创建菜单失败 errcode:" + jsonObject.getInt("errcode")
+ ",errmsg:" + jsonObject.getString("errmsg"));
}
}

return result;
}

public static void main(String[] args) {
// 这是一个符合菜单的json格式,“\”是转义符
String jsOnMenu= "{\"button\":[{\"name\":\"生活助手\",\"sub_button\":[{\"key\":\"11\",\"name\":\"天气预报\",\"type\":\"click\"},{\"key\":\"12\",\"name\":\"公交查询\",\"type\":\"click\"}]},{\"name\":\"音智达\",\"sub_button\":[{\"key\":\"21\",\"name\":\"好东西哦\",\"type\":\"click\"},{\"key\":\"22\",\"name\":\"人脸识别\",\"type\":\"click\"}]},{\"name\":\"更多体验\",\"sub_button\":[{\"key\":\"33\",\"name\":\"幽默笑话\",\"type\":\"click\"},{\"name\":\"View类型的\",\"type\":\"view\",\"url\":\"http://m.baidu.com\"}]}]}";
MenuServiceImpl impl = new MenuServiceImpl();
impl.CreateMenu(jsonMenu);
}

}

ok,运行main方法后,菜单就创建好了,

由于微信会缓存菜单24小时,建议先取消关注,再关注,菜单就会显示出来了。

 

 (ps:也可以建立菜单实体类,再由实体类转换成json,也可以实现创建菜单,

  我直接用json,是因为第一:简单,第二:我会开发后台管理系统,要在后台管理菜单,传json方便)

 

可加我的微信公众号一起讨论

微信公众号:andedaohang

或扫描二维码



 

 转载请注明出处:http://blog.csdn.net/tuposky/article/details/40589321

 

  • 大小: 117.7 KB
  • 大小: 61.8 KB
  • 大小: 48.3 KB
  • 查看图片附件

推荐阅读
  • 微信公众号推送模板40036问题
    返回码错误码描述说明40001invalidcredential不合法的调用凭证40002invalidgrant_type不合法的grant_type40003invalidop ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • 在PHP中实现腾讯云接口签名,以完成人脸核身功能的对接与签名配置时,需要注意将文档中的POST请求改为GET请求。具体步骤包括:使用你的`secretKey`生成签名字符串`$srcStr`,格式为`GET faceid.tencentcloudapi.com?`,确保参数正确拼接,避免因请求方法错误导致的签名问题。此外,还需关注API的其他参数要求,确保请求的完整性和安全性。 ... [详细]
  • 微信平台通过盛派SDK(sdk.weixin.senparc.com)允许服务号和订阅号使用appId和token读取关注用户的个人信息。然而,这一过程需严格遵守隐私保护和数据安全的相关规定,确保用户数据的安全性和隐私性。 ... [详细]
  • 通过优化模板消息机制,本研究提出了一种高效的信息化推送方案。该方案利用获取的访问令牌(access token)和指定的模板ID,实现了精准且快速的信息推送,显著提升了用户体验和信息传递效率。具体实现中,通过调用相关API接口,确保了消息的准确性和及时性,为用户提供更加便捷的服务。 ... [详细]
  • 微信公众平台开发获取关注者列表
    微信小程序|微信开发微信公众平台微信小程序-微信开发本文介绍在微信公众平台上如何使用高级接口开发获取关注者列表的功能。防丢器源码,vscode快速生成,vm虚拟机能装ubuntu, ... [详细]
  • 本文详细解析了ASP.NET 2.0中的Callback机制,不仅介绍了基本的使用方法,还深入探讨了其背后的实现原理。通过对比Atlas框架,帮助读者更好地理解和应用这一机制。 ... [详细]
  • 浅析python实现布隆过滤器及Redis中的缓存穿透原理_python
    本文带你了解了位图的实现,布隆过滤器的原理及Python中的使用,以及布隆过滤器如何应对Redis中的缓存穿透,相信你对布隆过滤 ... [详细]
  • 使用ArcGIS for Java和Flex浏览自定义ArcGIS Server 9.3地图
    本文介绍了如何在Flex应用程序中实现浏览自定义ArcGIS Server 9.3发布的地图。这是一个基本的入门示例,适用于初学者。 ... [详细]
  • 本文介绍了如何利用HTTP隧道技术在受限网络环境中绕过IDS和防火墙等安全设备,实现RDP端口的暴力破解攻击。文章详细描述了部署过程、攻击实施及流量分析,旨在提升网络安全意识。 ... [详细]
  • 本文详细解析了微信服务端示例类的功能与应用。其中,`ClientResponseHandler` 类主要用于处理微信支付所需的响应数据,而 `TenpayHttpClient` 则是对 HTTP 请求(包括 GET 和 POST 方法)进行了封装,以便在内部调用时更加便捷和高效。这些工具类在实际开发中起到了关键作用,开发者无需深入了解其底层实现细节,即可轻松集成微信支付功能。 ... [详细]
  • 深入解析 Vue 中的 Axios 请求库
    本文深入探讨了 Vue 中的 Axios 请求库,详细解析了其核心功能与使用方法。Axios 是一个基于 Promise 的 HTTP 客户端,支持浏览器和 Node.js 环境。文章首先介绍了 Axios 的基本概念,随后通过具体示例展示了如何在 Vue 项目中集成和使用 Axios 进行数据请求。无论你是初学者还是有经验的开发者,本文都能为你解决 Vue.js 相关问题提供有价值的参考。 ... [详细]
  • 用firebug给firefox添加信任链接
      在前文“firefox查看微信公众平台的数据分析时就出现不信任链接怎么办?”我们使用了导入证书的方法添加信任链接,有网友反映说证书导入不成功,这里用另外一种方法来实现:用firebug给firef ... [详细]
  • 建立服务器与微信公众平台的链接,首先要有一个默认首页提供程序的链接支持,该方法主要是获取微信提供过来的4个参数,供比较是否可链接使用。 其次,要有一个服务器地址与一个token(为英文或 ... [详细]
author-avatar
钟孝健V
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有