微信公众平台深度开发JAVA版第一季 30.菜单6

{"button":[{ "type": "click",        "name": "说明001",                 "key": "001"              },{ "type": "view",        "name": "说明002",  "url": "http://www.baidu.com/"              },    {  "name":"sub_caidan001", "sub_button":[ { "type": "click",        "name": "下级001",                 "key": "sub001"              },{ "type": "view",        "name": "下级002",  "url": "http://www.baidu.com/"              }        ]               }       ]}
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx51d48729cf5ce7ce&secret=5b14c8d2cb46ddc389936cdb135f18ac
{"access_token":"J_aRhhgdrmx1fnC-k2JusoW63UIobXbRI88mdwL4vP2K_3LZSD50zWv5Bk5IRlVtuX7RaDxBG3HngR29fAnVxOfUHicMZeAn4oxnVnz7sG0WDNdAEALSC","expires_in":7200}
J_aRhhgdrmx1fnC-k2JusoW63UIobXbRI88mdwL4vP2K_3LZSD50zWv5Bk5IRlVtuX7RaDxBG3HngR29fAnVxOfUHicMZeAn4oxnVnz7sG0WDNdAEALSC
{"errcode":0,"errmsg":"ok"}
{"button":[{ "type": "click",        "name": "说明001",                 "key": "001"              },{ "type": "view",        "name": "说明002",  "url": "http://www.baidu.com/"              },    {  "name":"sub_caidan001", "sub_button":[ { "type": "click",        "name": "下级001",                 "key": "sub001"              },{ "type": "view",        "name": "下级002",  "url": "http://www.baidu.com/"              }        ]               }       ]}
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx51d48729cf5ce7ce&secret=5b14c8d2cb46ddc389936cdb135f18ac
{"access_token":"ag6tTY1Re0zfdxhG4ualilz2GKiBC_hXgrpBB8OHUB9SeW9mFdmQA7WQOxkNjzl3R-0dsDC6SgykcuTSSwvokGK0eJUi4_wIbXkUiiJKbbeU7ljRi2N2WnQUcb8RlgIRLVQdAJAGQL","expires_in":7200}
ag6tTY1Re0zfdxhG4ualilz2GKiBC_hXgrpBB8OHUB9SeW9mFdmQA7WQOxkNjzl3R-0dsDC6SgykcuTSSwvokGK0eJUi4_wIbXkUiiJKbbeU7ljRi2N2WnQUcb8RlgIRLVQdAJAGQL
{"errcode":0,"errmsg":"ok"}
{"errcode":0,"errmsg":"ok"}
{"errcode":0,"errmsg":"ok"}
{"button":[{ "type": "click",        "name": "说明001",                 "key": "001"              },{ "type": "view",        "name": "说明002",  "url": "http://www.baidu.com/"              },    {  "name":"sub_caidan001", "sub_button":[ { "type": "click",        "name": "下级001",                 "key": "sub001"              },{ "type": "view",        "name": "下级002",  "url": "http://www.baidu.com/"              }        ]               }       ]}

看来创建自定义菜单这一块和之前的被动消息自动回复是不同的,虽然都是网络操作。但是创建自定义菜单这一块只要腾讯服务器和业务服务器对接过一次就行了,然后就算业务服务器不对外网开放了创建菜单不会有问题,因为创建自定义菜单是调用微信的WEB接口.而被动回复消息和接收普通消息或者是接收事件推送就不行了.因为业务服务器不对外网开放首先你就接收不了从腾讯服务器传过来的报文段那就没办法把腾讯服务器传过来的报文段处理之后返回回去了.

学过J2EE的都知道流往出写的方式是POST方式.默认是GET方式.

Open Declaration void java.net.HttpURLConnection.setRequestMethod(String method) throws ProtocolException


Set the method for the URL request, one of: 

GET 
POST 
HEAD 
OPTIONS 
PUT 
DELETE 
TRACE 
are legal, subject to protocol restrictions. The default method is GET.
Parameters:
method the HTTP method
Throws:
ProtocolException - if the method cannot be reset or if the requested method isn't valid for HTTP.
SecurityException - if a security manager is set and the method is "TRACE", but the "allowHttpTrace" NetPermission is not granted.
See Also:
getRequestMethod()

老师的构建自定义菜单的报文的程序的可扩展性比较强.

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import base.token.AccessToken;
import bean.caidan.CaiDan;

import wx.util.WX_CaiDan;
import wx.util.WX_Token;


public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
/*          try {
			//WX_Token.getAccessTokenByNet();
			System.out.println(WX_Token.getAccessTokenByNet());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}*/
		   AccessToken accessToken = null;
		try {
	           accessToken = WX_Token.getAccessTokenByNet();
	           System.out.println(accessToken.getAccess_token());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
          //WX_CaiDan.create(accessToken.getAccess_token(), null);
          
          List<CaiDan> caiDanList = new ArrayList<CaiDan>();
          
          CaiDan caidan001 =  new  CaiDan();
          
          caidan001.setName("说明001");
          caidan001.setType(CaiDan.CLICK);
          caidan001.setKey("001");
          caiDanList.add(caidan001);
          
          CaiDan caidan002 =  new  CaiDan();
          caidan002.setName("说明002");
          caidan002.setType(CaiDan.VIEW);
          caidan002.setKey("002");
          caidan002.setUrl("http://www.baidu.com/");
          caiDanList.add(caidan002);
          
          /**
           * 构建带有下级菜单的
           * sub_caidan001是一级菜单
           */
          CaiDan sub_caidan001 =  new  CaiDan();
          sub_caidan001.setName("sub_caidan001");
          List<CaiDan> sub_buttonList  =  new  ArrayList<CaiDan>();
          sub_caidan001.setSub_button(sub_buttonList);
          /**
           * sub_caiDan001是sub_caidan001的下级菜单
           * name是下级001
           * type是click
           * key是sub001
           */
          CaiDan sub_caiDan001 =  new CaiDan();
          sub_caiDan001.setName("下级001");
          sub_caiDan001.setType(CaiDan.CLICK);
          sub_caiDan001.setKey("sub001");
          sub_buttonList.add(sub_caiDan001);
          /**
           * sub_caiDan002是sub_caidan001的下级菜单
           * name是下级002
           * type是click
           * key是sub002
           */
          CaiDan sub_caiDan002 =  new CaiDan();
          sub_caiDan002.setName("下级002");
          sub_caiDan002.setType(CaiDan.VIEW);
          sub_caiDan002.setUrl("http://www.baidu.com/");
          sub_buttonList.add(sub_caiDan002);

          caiDanList.add(sub_caidan001);

          WX_CaiDan.create(accessToken.getAccess_token(), caiDanList);
          System.out.println(WX_CaiDan.create(accessToken.getAccess_token(), caiDanList));
          
          System.out.println(WX_CaiDan.getStr(caiDanList));
	}

}
package wx.util;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;

import bean.caidan.CaiDan;

public class WX_CaiDan {
	/*
	 * create菜单
	 */
      //public static void createCaiDan() {
	  //public static void create(String access_token,List<CaiDan> caiDanList)  {//token,
	public static String create(String access_token,List<CaiDan> caiDanList)  {//token,
		/*连接对象*/  
		HttpURLConnection connection = null;
		  /*返回的字符串*/
		  StringBuffer strb =  new StringBuffer();
		  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);//流往出写的方式是POST方式.默认是GET方式.
            connection.setRequestMethod("POST");
            
            /*得到输出流*/
            OutputStream  out  =  connection.getOutputStream();
            
            /*封装OutputStreamWriter*/
            OutputStreamWriter writer = new OutputStreamWriter(out);
            
            /*封装BufferedWriter*/
            BufferedWriter bwriter = new BufferedWriter(writer);
            
            //?????????????????????????????
            /*写出*/
            bwriter.write(getStr(caiDanList));
            
            /*flush*/
            bwriter.flush();
            
            /*得到输入流*/
            InputStream in = connection.getInputStream();
            /*封装InputSreamReader*/
            InputStreamReader reader =  new InputStreamReader(in);
            /*封装BufferedReader*/
            BufferedReader breader = new BufferedReader(reader);
            /*读取*/
            String str = null;
            
            while(null!=( str = breader.readLine())){
            	strb.append(str);
            }
            System.out.println(strb);
            /*关闭out*/
            out.close();
            /*关闭writer*/
            writer.close();
            /*关闭bwriter*/
            bwriter.close();
            /*关闭in*/
            in.close();
            /*关闭reader*/
            reader.close();
            /*关闭breader*/
            breader.close();
		  } //catch (MalformedURLException e) {
	   catch (Exception e) {
		// TODO Auto-generated catch block
			e.printStackTrace();
		}//
	    if(null!=connection){
	    	connection.disconnect();
	     }
		//return access_token;
	    return strb.toString();
      }
	/*
	 * 构建自定义菜单的报文
	 */
	public static String getStr(List<CaiDan> caiDanList){
		StringBuffer strb  =  new StringBuffer();
		strb.append("{");
		strb.append("\"button\":[");
		
/*		strb.append("  {   ");
		strb.append("  \"button\":[  ");
		strb.append("  {	  ");
		strb.append("  \"type\":\"click\",");
		strb.append("  \"name\":\"今日歌曲\",");
		strb.append("  \"key\":\"V1001_TODAY_MUSIC\"");
		strb.append("  },  ");
		strb.append("  {  ");
		strb.append("  \"name\":\"菜单\",");
		strb.append("  sub_button\":[");
		strb.append("   { ");
		strb.append("   \"type\":\"view\",");
		strb.append("    name\":\"搜索\",");
		strb.append("   \"url\":\"http://www.soso.com/\"");
		strb.append("   }, ");
		strb.append("     { ");
		strb.append("   \"type\":\"miniprogram\", ");
		strb.append("   \"name\":\"wxa\", ");
		strb.append("  \"url\":\"http://mp.weixin.qq.com\", ");
		strb.append("   \"appid\":\"wx286b93c14bbf93aa\",");
		strb.append("   \"pagepath\":\"pages/lunar/index.html\"");
		strb.append("     },");
		strb.append("    { ");
		strb.append("   \"type\":\"click\",");
		strb.append("   \"name\":\"赞一下我们\",");
		strb.append("   \"key\":\"V1001_GOOD\"");
		strb.append("    }]");
		strb.append("     }] ");
		strb.append("     }] ");
		strb.append("   }");*/
		CaiDan caiDan =  null;
		CaiDan caiDan_ =  null;
		for(int x=0 ; x < caiDanList.size();x++){
			caiDan =  caiDanList.get(x);
			if(null==caiDan.getSub_button()){
			   strb.append("{");
			   strb.append( " \"type\": \""+caiDan.getType()+"\", ");
               strb.append( "       \"name\": \""+caiDan.getName()+"\", ");
       		if(CaiDan.CLICK.equals(caiDan.getType())){
				strb.append("                \"key\": \""+caiDan.getKey()+"\" ");		
			}else if(CaiDan.VIEW.equals(caiDan.getType())){
				strb.append(" \"url\": \""+caiDan.getUrl()+"\" ");
			}   		
			strb.append("             }");
			}else{
			strb.append("    { ");
           strb.append(" \"name\":\""+caiDan.getName()+"\",");
           strb.append(" \"sub_button\":[ ");
           for(int xx=0;xx<caiDan.getSub_button().size();xx++){
        	   caiDan_ = caiDan.getSub_button().get(xx);
        	   strb.append("{");
			   strb.append( " \"type\": \""+caiDan_.getType()+"\", ");
               strb.append( "       \"name\": \""+caiDan_.getName()+"\", ");
       		if(CaiDan.CLICK.equals(caiDan_.getType())){
				strb.append("                \"key\": \""+caiDan_.getKey()+"\" ");		
			}else if(CaiDan.VIEW.equals(caiDan_.getType())){
				strb.append(" \"url\": \""+caiDan_.getUrl()+"\" ");
			}   		
			strb.append("             }");
			if(xx+1!=caiDan.getSub_button().size()){
				strb.append(",");
			}
           }
			strb.append("        ]       ");		
			strb.append("        }       ");		

			}

			if(x+1!=caiDanList.size()){
				strb.append(",");
			}
		}
		strb.append("]");
		strb.append("}");
		
		return strb.toString();
		
	}
	
}

12321321312312

转载于:https://my.oschina.net/u/3206447/blog/910797

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值