Java之微信开发自定义菜单的实现
来源:互联网 发布:ubuntu安装在哪个区 编辑:程序博客网 时间:2024/05/29 14:26
最近弄了几天微信自定义菜单的开发,对比着接口文档写了一段时间,但是一直都有错误,我用了接口在线调试工具https://mp.weixin.qq.com/debug/看到了一个菜单的初级效果,在实现自定义菜单的开发中主要参考了这篇博客http://blog.csdn.net/lyq8479/article/details/9841371非常感谢柳峰老师的博客。接下来讲一下我怎么实现的。
实现这些的基础:公网IP(将服务器打开,其他任意网络能够访问你的服务器)
接入验证的代码(这一部分也可以参考柳峰老师的博客)
http://blog.csdn.net/lyq8479/article/details/8944988
首先你需要找到你的appId和appSecret,我是申请了微信开发测试号
http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login测试号有很多功能权限。看看我的测试号截图:
这里有appId和appSecret,接下来进行第2步,获取access_token,这个需要我们自己拼接URL。
最后也没有什么问题。
来看第一段代码:这是验证接口文件的一部分,在doget里面对验证接口的时候,若通过验证,则生成菜单。MenuManager.createMenu();
/** * 确认请求来自微信服务器 */ @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub //微信加密签名 String signature = request.getParameter("signature"); //时间戳 String timestamp = request.getParameter("timestamp"); //随机数 String nonce = request.getParameter("nonce"); //随机字符串 String echostr = request.getParameter("echostr"); PrintWriter out = response.getWriter(); //通过检验signature 对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败 if(SignUtil.checkSignature(signature,timestamp,nonce)) { out.print(echostr); ***MenuManager.createMenu();-------------------------*** } out.close(); out = null; }
再来看第二段代码:这就是上面生成菜单的方法,在程序中可以写一些输出语句便于自己的理解,以及运行到某个地方出错的时候可以方便查找。关于下面代码的部分实现可以参考柳峰老师博客。
package com.**.Menu;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import com.**.pojo.AccessToken;import com.**.pojo.Button;import com.**.pojo.CommonButton;import com.**.pojo.ComplexButton;import com.**.pojo.Menu;import com.**.util.WeixinUtil;/** * 菜单管理器 * @author *** * */public class MenuManager { private static Logger log = LoggerFactory.getLogger(MenuManager.class); public static void createMenu() { //第三方用户唯一凭证 String appId ="****************";\\这里换成上面说的Appid String appSecret ="*********************";\\这里换成上面说的appSecret //调用接口获取access_token AccessToken at = WeixinUtil.getAccessToken(appId, appSecret); System.out.println("接口凭证"+at); if(null!=at) { //调用接口创建菜单 int result = WeixinUtil.createMenu(getMenu(), at.getToken()); //判断菜单创建结果 if(0==result) log.info("菜单创建成功"); else log.info("菜单创建失败,错误码"+result); } } /** * 组装菜单 * @return */ private static Menu getMenu() { // TODO Auto-generated method stub CommonButton btn11 = new CommonButton(); btn11.setName("悄悄话1"); btn11.setType("click"); btn11.setKey("11"); CommonButton btn12 = new CommonButton(); btn12.setName("悄悄话2"); btn12.setType("click"); btn12.setKey("12"); CommonButton btn21 = new CommonButton(); btn21.setName("搞笑1"); btn21.setType("click"); btn21.setKey("21"); CommonButton btn22 = new CommonButton(); btn22.setName("搞笑2"); btn22.setType("click"); btn22.setKey("22"); CommonButton btn23 = new CommonButton(); btn23.setName("搞笑3"); btn23.setType("click"); btn23.setKey("23"); CommonButton btn31 = new CommonButton(); btn31.setName("订座1"); btn31.setType("click"); btn31.setKey("31"); ComplexButton mainBtn1 = new ComplexButton(); mainBtn1.setName("悄悄话"); mainBtn1.setSub_button(new CommonButton[] {btn11,btn12}); ComplexButton mainBtn2 = new ComplexButton(); mainBtn2.setName("笑话"); mainBtn2.setSub_button(new CommonButton[] {btn21,btn22,btn23}); ComplexButton mainBtn3 = new ComplexButton(); mainBtn3.setName("顶级粑粑"); mainBtn3.setSub_button(new CommonButton[] {btn31}); Menu menu = new Menu(); menu.setButton(new Button[] {mainBtn1,mainBtn2,mainBtn3}); return menu; }}
当你的代码没有问题时,你可以打印出来一些信息,如果有问题也可以通过打印出来的信息判断出现了什么问题。希望你也能和我一样实现自定义菜单哦!加油
- Java之微信开发自定义菜单的实现
- Java微信公众平台开发(十)——微信自定义菜单的创建实现
- python开发微信公众平台之自定义菜单实现
- 微信开发模式之自定义菜单实现
- Java微信公众平台开发之自定义菜单
- JAVA微信公众号开发之自定义菜单
- 微信公众号的开发之 自定义菜单(二)
- 微信开发之自定义菜单创建
- 微信开发之自定义菜单
- 微信开发之自定义菜单
- java微信开发自定义菜单
- 微信公众开放平台开发08---纯java 实现微信开发:编写自定义菜单
- Java微信二次开发之15-自定义菜单的类型
- java微信开发API解析(四)-自定义菜单以及个性化菜单实现
- 微信/易信公共平台开发(二):自定义菜单的PHP实现(提供源码)
- 微信公众号开发---自定义菜单的创建及菜单事件响应(java)
- 微信自定义菜单的创建(微信账号绑定功能的实现 Java)
- 微信开发 -- 自定义菜单
- js+csss实现的一个带复选框的下拉框
- Segmentation fault到底是何方妖孽
- VC++文件路径和文件名处理函数
- AlertDialog,Toast对Activity生命周期的影响
- MacOS 选择照片、相机拍照(步骤详解配demo下载)
- Java之微信开发自定义菜单的实现
- 欢迎使用CSDN-markdown编辑器
- 未解决错误
- 文章标题 System.Web.Script.Serialization.dll的问题
- 将博客搬至CSDN
- oracle数据库,使用Mybatis生成的mapper.xml文件查询日期型参数时,时分秒丢失的问题
- DMS前后端技术揭秘及最佳实践
- Hadoop MapReduce多路径输入与多个输入 例子
- 设置class属性的值