发表于: 2017-12-25 22:46:22

1 471


今天完成的事情

在开发模式下实现微信公众号的自定义菜单

定义菜单的实体类:

public class ViewButton extends Button  {

private String type;
   private String url;

   public String getType() {
return type;
   }

public void setType(String type) {
this.type = type;
   }

public String getUrl() {
return url;
   }

public void setUrl(String url) {
this.url = url;
   }
}

定义accesstoken的实体类:

public class AccessToken {
// 获取到的凭证
   private String token;
   // 凭证有效时间,单位:秒
   private int expiresIn;

   public String getToken() {
return token;
   }

public void setToken(String token) {
this.token = token;
   }

public int getExpiresIn() {
return expiresIn;
   }

public void setExpiresIn(int expiresIn) {
this.expiresIn = expiresIn;
   }
}

在工具类中编写获取access token的方法:

public static AccessToken getAccessToken(String appid, String appsecret) {
AccessToken accessToken = null;

   String requestUrl = access_token_url.replace("APPID", appid).replace("APPSECRET", appsecret);
   JSONObject jsonObject = httpRequest(requestUrl, "GET", null);
   // 如果请求成功
   if (null != jsonObject) {
try {
accessToken = new AccessToken();
           accessToken.setToken(jsonObject.getString("access_token"));
           accessToken.setExpiresIn(jsonObject.getIntValue("expires_in"));
       } catch (JSONException e) {
accessToken = null;
           // 获取token失败
           log.error("获取token失败 errcode:{} errmsg:{}", jsonObject.getIntValue("errcode"), jsonObject.getString("errmsg"));
       }
}
return accessToken;
}

以及利用access token来调用创建菜单的接口,创建自定义菜单:

 public static int createMenu(Menu menu, String accessToken) {
int result = 0;
       // 拼装创建菜单的url
       String url = menu_create_url.replace("ACCESS_TOKEN", accessToken);
       // 将菜单对象转换成json字符串
       String jsonMenu =JSONObject.toJSONString(menu);


       // 调用接口创建菜单
       JSONObject jsonObject = httpRequest(url, "POST", jsonMenu);
       if (null != jsonObject) {
if (0 != jsonObject.getIntValue("errcode")) {
result = jsonObject.getIntValue("errcode");
               log.error("创建菜单失败 errcode:{} errmsg:{}", jsonObject.getIntValue("errcode"), jsonObject.getString("errmsg"));
           }
}

return result;
   }


创建菜单模板:

 private static Menu getMenu() {
CommonButton btn11 = new CommonButton();
       btn11.setName("天气预报");
       btn11.setType("click");
       btn11.setKey("11");


       ViewButton btn32 = new ViewButton();
       btn32.setName("跳转");
       btn32.setType("view");
       btn32.setUrl("http://www.jnshu.com/home");
       /**
        * 微信:  mainBtn1,mainBtn2,mainBtn3底部的三个一级菜单。
        */
       ComplexButton mainBtn3 = new ComplexButton();
       mainBtn3.setName("更多体验");
       mainBtn3.setSub_button(new Button[] { btn31, btn32, btn33 });
       /**
        * 封装整个菜单
        */
       Menu menu = new Menu();
       menu.setButton(new Button[] { mainBtn1, mainBtn2, mainBtn3 });

       return menu;
   }

执行方法:

public static void main(String[] args) {
// 第三方用户唯一凭证
   String appId = "000000000000";
   // 第三方用户唯一凭证密钥
   String appSecret = "0000000000000000000000";

   // 调用接口获取access_token
   AccessToken at = WeixinUtil.getAccessToken(appId, appSecret);

   if (null != at) {
// 调用接口创建菜单
       int result = WeixinUtil.createMenu(getMenu(), at.getToken());

       // 判断菜单创建结果
       if (0 == result){
log.info("菜单创建成功!");
           System.out.println("菜单创建成功!");
       }

else{
log.info("菜单创建失败,错误码:" + result);
           System.out.println("菜单创建失败,错误码:"+result);
       }

}
System.out.println(at);
}

成功:


明天的计划

写网页授权来拉取用户信息


遇到的问题



收获

在微信公众号的开发模式下创建自定义菜单


返回列表 返回列表
评论

    分享到