微信开发--自定义菜单
2016-11-30 11:08
288 查看
一、定义几个实体类
二、WeiXinUtil工具类中使用到的两个相关方法
三、主类,用来生成菜单
额,最后是用到的几个url,忘写了
public static String access_token_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";
public static String munu_create_url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN";
public static String user_access_token_url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";
public static String uni_pay_url = "https://api.mch.weixin.qq.com/pay/unifiedorder";
public static String jpapi_ticket_url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=TOKEN&type=jsapi";
public class AccessToken {//这里定义一个AccessToken的实体类,用来保存获取到的accesstoken private String token;//获得到的token private int expireIn;//过期时间 public String getToken() { return token; } public void setToken(String token) { this.token = token; } public int getExpireIn() { return expireIn; } public void setExpireIn(int expireIn) { this.expireIn = expireIn; } }
public class Button {//所有button的父类,定义了统一的名称 private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
public class CommonButton extends Button {//最底层的button,用来触发点击事件 private String type;//类型 private String key;//key值,传入后台后就是根据key值来判断是哪个button被点击了 public String getType() { return type; } public void setType(String type) { this.type = type; } public String getKey() { return key; } public void setKey(String key) { this.key = key; } }
public class ViewButton extends Button{//最底层的button,用来跳转到指定的页面 private String type;//类型 private String url;//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; } }
public class ComplexButton extends Button {//一级菜单,这个菜单下面包含很多的底层button private Button[] sub_button; public Button[] getSub_button() { return sub_button; } public void setSub_button(Button[] sub_button) { this.sub_button = sub_button; } }
二、WeiXinUtil工具类中使用到的两个相关方法
public static AccessToken getAccessToken(String appid, String appsecret) {//获取accesstoken AccessToken accessToken = null; /* */ String id = "sys_accesstoken"; LocalRedisManager manager = new LocalRedisManager(); manager.setHost("127.0.0.1"); manager.setPort(6379); manager.init(); /*这里的是初始化redis的代码,我使用redis来缓存accesstoken的,过期以后才再取的*/ if (null == manager.get(id.getBytes())) {//没有找到缓存的accesstoken String requestUrl = access_token_url.replace("APPID", appid) .replace("APPSECRET", appsecret); JSONObject jsonObject = httpsRequest(requestUrl, "GET", null); if (null != jsonObject) { accessToken = new AccessToken(); accessToken.setToken(jsonObject.getString("access_token")); accessToken.setExpireIn(jsonObject.getInt("expires_in")); } /*不用redis这里可以忽略*/ manager.set(id.getBytes(), SerializeUtils.serialize(accessToken.getToken()), accessToken.getExpireIn()); } else {//这里是从redis里取没有过期的accesstoken,你可以改成你的方式 accessToken = new AccessToken(); accessToken.setToken((String) SerializeUtils.deserialize(manager .get(id.getBytes()))); accessToken.setExpireIn(manager.getExpire()); } return accessToken; }
public static AccessToken getAccessToken(String appid, String appsecret) {//获取accesstoken AccessToken accessToken = null; /* */ String id = "sys_accesstoken"; LocalRedisManager manager = new LocalRedisManager(); manager.setHost("127.0.0.1"); manager.setPort(6379); manager.init(); /*这里的是初始化redis的代码,我使用redis来缓存accesstoken的,过期以后才再取的*/ if (null == manager.get(id.getBytes())) {//没有找到缓存的accesstoken String requestUrl = access_token_url.replace("APPID", appid) .replace("APPSECRET", appsecret); JSONObject jsonObject = httpsRequest(requestUrl, "GET", null); if (null != jsonObject) { accessToken = new AccessToken(); accessToken.setToken(jsonObject.getString("access_token")); accessToken.setExpireIn(jsonObject.getInt("expires_in")); } /*不用redis这里可以忽略*/ manager.set(id.getBytes(), SerializeUtils.serialize(accessToken.getToken()), accessToken.getExpireIn()); } else {//这里是从redis里取没有过期的accesstoken,你可以改成你的方式 accessToken = new AccessToken(); accessToken.setToken((String) SerializeUtils.deserialize(manager .get(id.getBytes()))); accessToken.setExpireIn(manager.getExpire()); } return accessToken; }
public static JSONObject httpsRequest(String requestUrl, String requestMehod, net.sf.json.JSONObject jsonMenu) { if ("GET".equalsIgnoreCase(requestMehod)) { try { return doHttpcilentGet(requestUrl); } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); return null; } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); return null; } } else { JSONObject jsonObject = null; StringBuffer buffer = new StringBuffer(); TrustManager[] tm = { new MyX509TrustManager() }; try { SSLContext sslContext = SSLContext .getInstance("SSL", "SunJSSE"); sslContext.init(null, tm, new java.security.SecureRandom()); SSLSocketFactory ssf = sslContext.getSocketFactory(); URL url = new URL(requestUrl); HttpsURLConnection httpsUrlConn = (HttpsURLConnection) url .openConnection(); httpsUrlConn.setSSLSocketFactory(ssf); httpsUrlConn.setDoOutput(true); httpsUrlConn.setDoInput(true); httpsUrlConn.setUseCaches(false); httpsUrlConn.setConnectTimeout(0); httpsUrlConn.setReadTimeout(0); System.out.println(requestUrl); httpsUrlConn.setRequestMethod(requestMehod); if (null != jsonMenu) { OutputStream outputStream = httpsUrlConn.getOutputStream(); outputStream.write(jsonMenu.toString().getBytes("UTF-8")); outputStream.close(); } InputStream inputStream = httpsUrlConn.getInputStream(); InputStreamReader inputStreamReader = new InputStreamReader( inputStream, "utf-8"); BufferedReader bufferedReader = new BufferedReader( inputStreamReader); String str = null; while ((str = bufferedReader.readLine()) != null) { buffer.append(str); } bufferedReader.close(); inputStreamReader.close(); inputStream.close(); inputStream = null; httpsUrlConn.disconnect(); jsonObject = JSONObject.fromObject(buffer.toString()); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (NoSuchProviderException e) { e.printStackTrace(); } catch (KeyManagementException e) { e.printStackTrace(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return jsonObject; } }
三、主类,用来生成菜单
public class MenuManager { public static void main(String[] args) { String appId = "wxxxxxxxxxxxxx"; String appSecret = "xxxxxxxxxxxxxxxxxxxxxxxx"; AccessToken at = WeiXinUtil.getAccessToken(appId, appSecret); System.out.println(at.getToken()+at.getExpireIn()); if (null != at) { int result = WeiXinUtil.createMenu(getMenu(), at.getToken()); System.out.println(result); } } private static Menu getMenu() { ViewButton btn11 = new ViewButton(); btn11.setName("生活社区"); btn11.setType("view"); btn11.setUrl("http://www.baidu.com"); ComplexButton mb1 = new ComplexButton(); mb1.setName("m111"); mb1.setSub_button(new CommonButton[] { btn11 }); CommonButton btn21 = new CommonButton(); btn11.setName("2"); btn11.setKey("2"); btn11.setType("click"); ComplexButton mb2 = new ComplexButton(); mb1.setName("m222"); mb1.setSub_button(new CommonButton[] { btn21 }); CommonButton btn31 = new CommonButton(); btn11.setName("3"); btn11.setKey("3"); btn11.setType("click"); ComplexButton mb3 = new ComplexButton(); mb1.setName("m333"); mb1.setSub_button(new CommonButton[] { btn31 }); Menu menu = new Menu(); menu.setButton(new Button[] { mb1, mb2, mb3 }); return menu; } }
额,最后是用到的几个url,忘写了
public static String access_token_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";
public static String munu_create_url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN";
public static String user_access_token_url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";
public static String uni_pay_url = "https://api.mch.weixin.qq.com/pay/unifiedorder";
public static String jpapi_ticket_url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=TOKEN&type=jsapi";
相关文章推荐
- 微信公众帐号开发教程第14篇-自定义菜单的创建及菜单事件响应
- 微信公众账号开发经验整理 ----- (1)自定义菜单
- 微信公共服务平台开发(.Net 的实现)6-------自定义菜单
- 微信那点事儿-公众平台开发系列之自定义菜单(php版)
- 微信公众帐号开发-自定义菜单的创建及菜单事件响应的实例
- [039] 微信公众帐号开发教程第15篇-自定义菜单的view类型(访问网页) .
- nodejs微信开发--设置自定义菜单
- 微信公众帐号开发教程第14篇-自定义菜单的创建及菜单事件响应
- java 微信自定义菜单 java微信接口开发 公众平台 SSM redis shiro 多数据源
- php微信开发自定义菜单
- java微信二次第三方开发,token认证,消息事件接收,图文素材库,自定义菜单等功能
- 使用Java进行微信开发 4 创建自定义菜单
- 微信公众帐号开发教程第14篇-自定义菜单的创建及菜单事件响应
- 微信小店开发(3) 自定义菜单加入维权
- 微信公众账号开发教程(四)自定义菜单(含实例源码)——转自http://www.cnblogs.com/yank/p/3418194.html
- 微信公众帐号开发教程第14篇-自定义菜单的创建及菜单事件响应
- 微信公众帐号开发教程第15篇-自定义菜单的view类型(访问网页)
- 二十四:微信公众帐号开发-自定义菜单的创建及菜单事件响应
- 微信公众帐号开发教程第14篇-自定义菜单的创建及菜单事件响应
- Java微信公众平台开发(10) 微信自定义菜单的创建实现