微信公众号开发,代码自定义菜单

package com.wzqj.wsp.util;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import com.wzqj.wsp.http.HttpUtil;
import com.wzqj.wsp.prop.PropertiesUtil;
import org.apache.commons.lang3.StringUtils;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;

public class MenuUtils {

	/**
	 * 获取accessToken
	 */
	public static String getAccessToken(String appid, String appsecret) {
		String uri = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="
				+ appid + "&secret=" + appsecret;
		String jsonStr = getJSONStr(uri);
		JSONObject object = JSONObject.parseObject(jsonStr);
		String access_token = object.getString("access_token");
		// ACCESS_TOKEN_CACHE.put(ACCESS_TOKEN_KEY, access_token);
		return access_token;
	}

	/**
	 * 查询菜单
	 */
	public static String getMenuInfo(String accessToken) throws Exception {
		String uri = "https://api.weixin.qq.com/cgi-bin/menu/get?access_token="
				+ accessToken;
		return getJSONStr(uri);
	}

	/**
	 * 创建自定义菜单
	 */
	public static void createMenu(String meunStr, String accessToken) {
		System.out.println("wirte menu--->" + meunStr);
		if (StringUtils.isBlank(meunStr)) {
			return;
		}
		StringBuffer bufferRes = new StringBuffer();
		try {
			URL realUrl = new URL(
					"https://api.weixin.qq.com/cgi-bin/menu/create?access_token="
							+ accessToken);
			HttpURLConnection conn = (HttpURLConnection) realUrl
					.openConnection();
			// 连接超时
			conn.setConnectTimeout(25000);
			// 读取超时 --服务器响应比较慢,增大时间
			conn.setReadTimeout(25000);
			HttpURLConnection.setFollowRedirects(true);
			// 请求方式
			conn.setRequestMethod("POST");
			conn.setDoOutput(true);
			conn.setDoInput(true);
			conn.setRequestProperty("User-Agent",
					"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0");
			conn.setRequestProperty("Referer", "https://api.weixin.qq.com/");
			conn.connect();
			// 获取URLConnection对象对应的输出流
			OutputStreamWriter out = new OutputStreamWriter(
					conn.getOutputStream());
			// 发送请求参数
			// out.write(URLEncoder.encode(params,"UTF-8"));
			out.write(meunStr);
			out.flush();
			out.close();
			InputStream in = conn.getInputStream();
			BufferedReader read = new BufferedReader(new InputStreamReader(in,
					"UTF-8"));
			String valueString = null;
			while ((valueString = read.readLine()) != null) {
				bufferRes.append(valueString);
			}
			System.out.println(bufferRes.toString());
			in.close();
			if (conn != null) {
				conn.disconnect();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 删除自定义菜单
	 */
	/*
	 * public static String getDelMenuInfo(String accessToken) throws Exception
	 * { String uri =
	 * "https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=" +
	 * accessToken; String jsonStr = getJSONStr(uri); JSONObject object =
	 * JSONObject.parseObject(jsonStr); return object.getString("errmsg"); }
	 */

	/**
	 * 通过get方式获取json数据
	 *
	 * @param url
	 * @return
	 */
	private static String getJSONStr(String url) {
		try {
			return HttpUtil.getResult(url);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;

	}

	/**
	 * 根据参数生成临时带参二维码
	 * 
	 * @param token
	 * @param sceneid
	 * @return
	 */
	/*
	 * public static String createTicket(String token,long sceneid){ String url
	 * = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=%s"; url
	 * = String.format(url, token); String jsonStr = ""; Map<String, Object>
	 * params = new HashMap<String,Object>(); Map<String, Object> scenes = new
	 * HashMap<String,Object>(); Map<String, Object> scene = new
	 * HashMap<String,Object>(); scene.put("scene_id",sceneid);
	 * scenes.put("scene",scene); params.put("expire_seconds",604800);
	 * params.put("action_name","QR_SCENE"); params.put("action_info",scenes);
	 * try {jiamin gg lasses jsonStr = HttpUtil.requestPostJSON(url, params); }
	 * catch (Exception e) { e.printStackTrace(); } JSONObject object =
	 * JSONObject.parseObject(jsonStr); return object.toJSONString(); }
	 */

	public static void main(String[] args) {
		try {
			String token = getAccessToken("xxx", "xxx");// appid,secret
			long sceneid = 3333333;
			System.out.println("token===>" + token);
			JSONObject subBtn1 = new JSONObject();
			subBtn1.put("type", "view");
			subBtn1.put("name", "首页");
			subBtn1.put("url", "http://xxx");
			JSONObject subBtn2 = new JSONObject();
			subBtn2.put("type", "view");
			subBtn2.put("name", "收银数据");
			subBtn2.put("url", "http://xxx");
			JSONObject subBtn3 = new JSONObject();
			subBtn3.put("type", "view");
			subBtn3.put("name", "会员数据");
			subBtn3.put("url", "http://xxx");
			JSONObject subBtn4 = new JSONObject();
			subBtn4.put("type", "view");
			subBtn4.put("name", "卡券数据");
			subBtn4.put("url", "http://xxx");
			JSONObject subBtn = new JSONObject();
			JSONArray array = new JSONArray();
			array.add(subBtn1);
			array.add(subBtn2);
			array.add(subBtn3);
			array.add(subBtn4);
			subBtn.put("name", "xx平台");
			subBtn.put("sub_button", array);
			JSONObject btn = new JSONObject();

			JSONObject subB003 = new JSONObject();
			subB003.put("type", "click");
			subB003.put("name", "微信客服");
			subB003.put("key", "wxcustomer");
			JSONArray array003 = new JSONArray();
			array003.add(subB003);

			JSONArray arrayBtn = new JSONArray();
			// arrayBtn.add(subB001);
			arrayBtn.add(subBtn);
			arrayBtn.add(subB003);
			btn.put("button", arrayBtn);
			String newMenu = btn.toString();
			System.out.println(newMenu);
			/**
			 * 微信接收数据格式举例 { "button": [ {"type":"click", "name":"旺立方",
			 * "key":"旺立方" }, { "name": "商户平台", "sub_button": [ { "type":
			 * "view", "name": "首页", "url": "http: //xxxx" }, { "type": "view",
			 * "name": "收银数据", "url": "http: //xxxx" }, { "type": "view",
			 * "name": "会员数据", "url": "http: //xxxx" }, { "type": "view",
			 * "name": "卡券数据", "url": "http: //xxxx" } ] }, {"type":"click",
			 * "name":"旺立方", "key":"旺立方" } ] }
			 */
			createMenu(newMenu, token);
			String menu = getMenuInfo(token);
			System.out.println("menu===>" + menu);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}



转载于:https://my.oschina.net/bkc/blog/637201

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值