日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

微信开发--自定义菜单

發(fā)布時(shí)間:2025/3/15 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 微信开发--自定义菜单 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、定義幾個(gè)實(shí)體類

public class AccessToken {//這里定義一個(gè)AccessToken的實(shí)體類,用來保存獲取到的accesstokenprivate String token;//獲得到的tokenprivate int expireIn;//過期時(shí)間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的父類,定義了統(tǒng)一的名稱private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}}



public class CommonButton extends Button {//最底層的button,用來觸發(fā)點(diǎn)擊事件private String type;//類型private String key;//key值,傳入后臺(tái)后就是根據(jù)key值來判斷是哪個(gè)button被點(diǎn)擊了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,用來跳轉(zhuǎn)到指定的頁面private String type;//類型private String url;//urlpublic 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 {//一級(jí)菜單,這個(gè)菜單下面包含很多的底層buttonprivate Button[] sub_button;public Button[] getSub_button() {return sub_button;}public void setSub_button(Button[] sub_button) {this.sub_button = sub_button;}}

二、WeiXinUtil工具類中使用到的兩個(gè)相關(guān)方法


public static AccessToken getAccessToken(String appid, String appsecret) {//獲取accesstokenAccessToken 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())) {//沒有找到緩存的accesstokenString 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) {//獲取accesstokenAccessToken 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())) {//沒有找到緩存的accesstokenString 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 blocke.printStackTrace();return null;} catch (IOException e) {// TODO Auto-generated catch blocke.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("生活社區(qū)");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;} }


額,最后是用到的幾個(gè)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";

總結(jié)

以上是生活随笔為你收集整理的微信开发--自定义菜单的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。