Java之微信开发自定义菜单的实现

最近弄了几天微信自定义菜单的开发,对比着接口文档写了一段时间,但是一直都有错误,我用了接口在线调试工具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;
	}
}

当你的代码没有问题时,你可以打印出来一些信息,如果有问题也可以通过打印出来的信息判断出现了什么问题。希望你也能和我一样实现自定义菜单哦!加油

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值