零java基础搞定微信Server_7_微信公众号的自定义菜单
2016-09-16 16:14
405 查看
本文作者twowinter,发布于2015年,如今整理重发。
转载请注明作者twowinter:http://blog.csdn.net/iotisan/
文档上也很清晰地梳理了接口,昨天的文本消息处理是属于消息接口,而今天的自定义菜单是属于API接口。
1.获取访问凭证 access_token
2.创建自定义菜单
在config.properties中设置appID、appsecret。然后再接收文本消息为“菜单”时就创建这个菜单。
结果测试出现了如下错误:
原来是没有权限,仔细一看,自定义菜单确实是需要微信认证才行。
于是申请了测试帐号,重新输入了appID、appsecret。这才通过。
前言
昨天玩了文本消息的接收,今天想试试自定义菜单。转载请注明作者twowinter:http://blog.csdn.net/iotisan/
思路
微信开发文档告诉我们:公众平台的接口分为两类: 1、 消息接口:公众平台将用户操作的信息发送给开发者配置的 URL,并接收回复。 2、 API 接口:由开发者主动调用的接口。
文档上也很清晰地梳理了接口,昨天的文本消息处理是属于消息接口,而今天的自定义菜单是属于API接口。
1.获取访问凭证 access_token
access_token 是公众号的全局唯一票据,公众号调用各接口时都需使用 access_token。获取访问凭证需要传入 appID 和 appsecret。 access_token 有效期目前为 2 个小时,需要定时刷新,且刷新后将导致上次获取的凭证失效。 由于获取访问凭证 API 接口有频率限制,频繁刷新可能导致超过限额,影响正常业务,因此需要对访问凭证进行缓存。 所以需要对 access_token 的操作进行封装: 1、 获取最新可用的 access_token 2、 access_token 过期前需要有自动刷新机制 3、 提供主动刷新接口给业务点调用,这是为了防止业务方的误刷新 access_token(如本地运行程序进行测试,导致服务器缓存的凭证失效),或者微信平台修改access_token 的策略导致access_token 提前过期 Demo 中: AccessTokenUtil 类对 access_token 的访问进行了封装,使用定时任务进行刷新。 HttpUtil 类负责替换 url 参数中 access_token,使用 httpclient 类库发起 https 请求。 并且在凭证无效时重新获取凭证并发起请求。
2.创建自定义菜单
Demo 中创建“点灯” 、 “灭灯” 两个 CLICK 类型菜单。创建 CLICK菜单时,需要指定每个菜单对应的 key 值,用于在服务端收到消息时区分用户点击了哪个菜单。 代码见 Tools 类中 createMenu 方法。 创建自定义菜单后,由于微信客户端缓存,需要 24 小时微信客户端才会展现出来。建议测试时可以尝试取消关注公众账号后再次关注,则可以看到创建后的效果。
代码处理
于是就移植AccessTokenUtil、HttpUtil、Tools这几个类就可以了。在config.properties中设置appID、appsecret。然后再接收文本消息为“菜单”时就创建这个菜单。
// 文本消息 if (MsgType.TEXT.equals(msgType)) { // 可以在此处进行关键字自动回复 String content = "收到文本消息: " + reqMap.get("Content"); if (reqMap.get("Content").equals("菜单")) { Tools.createMenu(); } return XmlResp.buildText(fromUser, toUser, content); }
结果测试出现了如下错误:
菜单:{"button":[{"type":"click","name":"点灯","key":"V1001_LIGHT_ON"},{"type":"click","name":"灭灯","key":"V1002_LIGHT_OFF"}]} refresh token... result={"access_token":"yq9uUHzPF7Dhuw6CC3OcIvRs9v5j8h47QKItdFPRnQt5nqZd0d36oZZihniOlqzJznEd8MA21prq-rL3PWWN7BzerD7ceQ0lFdt3LCfjdcY","expires_in":7200} result={"errcode":48001,"errmsg":"api unauthorized hint: [q3sRHa0075vr20]"} 创建菜单返回:{"errcode":48001,"errmsg":"api unauthorized hint: [q3sRHa0075vr20]"} result={"errcode":48001,"errmsg":"api unauthorized hint: [ZpramA0076vr22]"} 查询菜单:{"errcode":48001,"errmsg":"api unauthorized hint: [ZpramA0076vr22]"}
原来是没有权限,仔细一看,自定义菜单确实是需要微信认证才行。
于是申请了测试帐号,重新输入了appID、appsecret。这才通过。
相关文章推荐
- 零java基础搞定微信Server_7:微信公众号的自定义菜单
- 零java基础搞定微信Server_6:微信公众号的文本消息处理
- 零java基础搞定微信Server_5_启用微信公众号开发模式
- 零java基础搞定微信Server_6_微信公众号文本消息处理
- 零java基础搞定微信Server_5:启用微信公众号开发模式
- 零java基础搞定微信Server
- 零java基础搞定微信Server_1:XML基础学习
- 零java基础搞定微信Server_2_Servlet基础
- 零java基础搞定微信Server_2:Servlet基础
- 零java基础搞定微信Server
- 零java基础搞定微信Server_4:写一个servlet的demo
- 零java基础搞定微信Server_3:搭建微信Server本地开发环境
- 零java基础搞定微信Server_3_搭建微信Server本地开发环境
- 零java基础搞定微信Server_1_XML基础
- 零java基础搞定微信Server_4_写一个servlet的DEMO
- Java微信公众平台开发(十)——微信自定义菜单的创建实现
- JAVA实现微信自定义菜单创建以及消息回复等
- java微信二次第三方开发,token认证,消息事件接收,图文素材库,自定义菜单等功能
- php之微信公众号开发(一)接入微信验证和创建自定义菜单
- java微信开发API第四步 微信自定义个性化菜单实现