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;    }}

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

阅读全文
0 0
原创粉丝点击