1. 程式人生 > >微信開發系列(三)_編寫伺服器程式——生成選單

微信開發系列(三)_編寫伺服器程式——生成選單

選單的生成是不需要伺服器,只需要編寫程式碼執行一次就可以生成 ()

  生成選單所要向微信端傳輸的資料為 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