微信開發系列(三)_編寫伺服器程式——生成選單
阿新 • • 發佈:2019-02-06
選單的生成是不需要伺服器,只需要編寫程式碼執行一次就可以生成 ()
生成選單所要向微信端傳輸的資料為 AccessToken(可通過appID和AppSecret獲取),和Json格式的選單
微信開發文件網址(點選開啟連結)
一:首先編寫選單的實體類Caidan.java
package com.weixin.util; import java.util.List; public class CaiDan { public static final String CLICK = "click"; public static final String VIEW = "view"; private List<CaiDan> sub_button = null;// 否 二級選單陣列,個數應為1~5個 型別依舊是CaiDan型別 private String type = null;// 是 選單的響應動作型別 private String name = null;// 是 選單標題,不超過16個位元組,子選單不超過40個位元組 private String key = null;// click等點選型別必須 選單KEY值,用於訊息介面推送,不超過128位元組 private String url = null;// view型別必須 網頁連結,使用者點選選單可開啟連結,不超過256位元組 public CaiDan() { super(); } public CaiDan(String type, String name, String key, String url) { super(); this.type = type; this.name = name; this.key = key; this.url = url; } public List<CaiDan> getSub_button() { return sub_button; } public void setSub_button(List<CaiDan> sub_button) { this.sub_button = sub_button; } public String getType() { return type; } public void setType(String type) { this.type = type; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getKey() { return key; } public void setKey(String key) { this.key = key; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } }
二:根據專案的要求編寫合適的選單
package com.weixin.util; import java.util.ArrayList; import java.util.List; import com.weixin.util.CaiDan; import com.weixin.util.AccessToken; import com.weixin.util.WX_CaiDan; import com.weixin.util.WX_Token; public class CaiDanUtil { public List<CaiDan> caiDanList; public List<CaiDan> getCaiDanList() { main(); return caiDanList; } public void main() { System.out.println("test"); AccessToken accessToken = WX_Token.getAccessTokenByNet();//<span style="color:#ff0000;">獲取accessToken,在下一節會介紹到</span> //選單list caiDanList = new ArrayList<CaiDan>(); //第一個一級選單 CaiDan sub_caidan0 = new CaiDan(); List<CaiDan> sub_caiDanList0 = new ArrayList<CaiDan>(); //第一個一級選單,第一個二級選單 CaiDan caidan0_0 = new CaiDan(); caidan0_0.setName("西瓜"); caidan0_0.setType(CaiDan.CLICK); caidan0_0.setKey("0_0"); sub_caiDanList0.add(caidan0_0); //第一個一級選單,第二個二級選單 CaiDan caidan0_1 = new CaiDan(); caidan0_1.setName("香瓜"); caidan0_1.setType(CaiDan.CLICK); caidan0_1.setKey("0_1"); sub_caiDanList0.add(caidan0_1); //第一個一級選單,第三個二級選單 CaiDan caidan0_2 = new CaiDan(); caidan0_2.setName("木瓜"); caidan0_2.setType(CaiDan.CLICK); caidan0_2.setKey("0_2"); sub_caiDanList0.add(caidan0_2); sub_caidan0.setName("果蔬"); sub_caidan0.setSub_button(sub_caiDanList0); caiDanList.add(sub_caidan0); /*第二個一級選單*/ CaiDan sub_caidan1 = new CaiDan(); sub_caidan1.setName("肉類"); List<CaiDan> sub_caiDanList1 = new ArrayList<CaiDan>(); /*第二個一級帶單,第一個二級選單*/ CaiDan caidan1_0 = new CaiDan(); caidan1_0.setName("羊肉"); caidan1_0.setType(CaiDan.CLICK); caidan1_0.setKey("1_0"); sub_caiDanList1.add(caidan1_0); /*第二個一級選單,第二個二級選單*/ CaiDan caidan1_1 = new CaiDan(); caidan1_1.setName("驢肉"); caidan1_1.setType(CaiDan.CLICK); caidan1_1.setKey("1_1"); sub_caiDanList1.add(caidan1_1); /*第二個一級選單。第三個二級選單*/ CaiDan caiDan1_2 = new CaiDan(); caiDan1_2.setName("鴨肉"); caiDan1_2.setType(CaiDan.CLICK); caiDan1_2.setKey("1_2"); sub_caiDanList1.add(caiDan1_2); sub_caidan1.setSub_button(sub_caiDanList1); caiDanList.add(sub_caidan1); /*第三個一級選單*/ CaiDan caiDan = new CaiDan(); caiDan.setName("說明"); caiDan.setType(CaiDan.VIEW); caiDan.setKey("text"); caiDan.setUrl("http://0.baidu.com/?soft=134&tn=11000002"); caiDanList.add(caiDan); /*create*/ //System.out.println(WX_CaiDan.create(accessToken.getAccess_token(), caiDanList)); /*報文*/ //System.out.println(WX_CaiDan.getStr(caiDanList)); /*query*/ //System.out.println(WX_CaiDan.query(accessToken.getAccess_token())); /*delete*/ //System.out.println(WX_CaiDan.delete(accessToken.getAccess_token())); } }
三:將選單轉化為微信端可讀取的Json格式(以下程式碼是通用轉換方法)
public static String getStr(List<CaiDan> caiDanList){ StringBuffer strb = new StringBuffer(); strb.append("{") ; strb.append("\"button\":["); CaiDan caiDian = null; CaiDan caiDian_ = null; for(int x = 0 ; x < caiDanList.size() ; x++){ caiDian = caiDanList.get(x); if(null==caiDian.getSub_button()){ strb.append(" {"); strb.append(" \"type\":\""+caiDian.getType()+"\","); strb.append(" \"name\":\""+caiDian.getName()+"\","); if(CaiDan.CLICK.equals(caiDian.getType())){ strb.append(" \"key\":\""+caiDian.getKey()+"\" "); }else if(CaiDan.VIEW.equals(caiDian.getType())){ strb.append(" \"url\":\""+caiDian.getUrl()+"\" "); } strb.append(" }"); }else{ strb.append("{"); strb.append("\"name\":\""+caiDian.getName()+"\","); strb.append("\"sub_button\":["); for(int xx = 0 ; xx < caiDian.getSub_button().size() ; xx++){ caiDian_ = caiDian.getSub_button().get(xx); strb.append(" {"); strb.append(" \"type\":\""+caiDian_.getType()+"\","); strb.append(" \"name\":\""+caiDian_.getName()+"\","); if(CaiDan.CLICK.equals(caiDian_.getType())){ strb.append(" \"key\":\""+caiDian_.getKey()+"\" "); }else if(CaiDan.VIEW.equals(caiDian_.getType())){ strb.append(" \"url\":\""+caiDian_.getUrl()+"\" "); } strb.append(" }"); if(xx+1!=caiDian.getSub_button().size()){ strb.append(","); } } strb.append("]"); strb.append("}"); } if(x+1!=caiDanList.size()){ strb.append(","); } } strb.append(" ] "); strb.append(" } "); return strb.toString(); }
四:生成選單
public static String create(String access_token , List<CaiDan> caiDanList){
/*返回的字串*/
StringBuffer strb = new StringBuffer();
/*連線物件*/
HttpURLConnection connection = null;
try {
URL url = new URL("https://api.weixin.qq.com/cgi-bin/menu/create?access_token="+access_token);
connection = (HttpURLConnection)url.openConnection();
/*設定POST*/
connection.setDoOutput(true);
connection.setRequestMethod("POST");
/*得到輸出流*/
OutputStream out = connection.getOutputStream();
/*封裝OutputStreamWriter*/
OutputStreamWriter writer = new OutputStreamWriter(out, "UTF-8");
/*封裝BufferedWriter*/
BufferedWriter bwriter = new BufferedWriter(writer);
/*寫出*/
bwriter.write(getStr(caiDanList));
/*flush*/
bwriter.flush();
/*得到輸入流*/
InputStream in = connection.getInputStream();
/*封裝InputStreamReader*/
InputStreamReader reader = new InputStreamReader(in);
/*封裝BufferedReader*/
BufferedReader breader = new BufferedReader(reader);
/*讀取*/
String str = null;
while(null != (str = breader.readLine())){
strb.append(str);
}
/*關閉out*/
out.close();
/*關閉writer*/
writer.close();
/*關閉bwriter*/
bwriter.close();
/*關閉in*/
in.close();
/*關閉*/
reader.close();
/*關閉breader*/
breader.close();
} catch (Exception e) {
e.printStackTrace();
}
if(null != connection){
connection.disconnect();
}
return strb.toString();
}
最後只要執行create程式就ok