首页>代码>Java通过Spring MVC开发的微信公众平台开发框架>/wechat-develop-framework-master/src/wechat-framework/src/main/java/com/xgzhang/wechat/framework/MenuUpdater.java
package com.xgzhang.wechat.framework;

import java.io.StringWriter;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.codehaus.jackson.JsonFactory;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.SerializationConfig;
import org.json.JSONObject;

import com.xgzhang.wechat.framework.domain.menu.ButtonWrap;

public class MenuUpdater {
	private String _appId;
	private String _secret;
	private MenuFactory _menuFactory;
	
	public MenuUpdater(String appId, String secret, MenuFactory menuFactory){
		this._appId = appId;
		this._secret = secret;
		this._menuFactory = menuFactory;
	}
	
	public int update() throws Exception {
		// Access token
		HttpGet tokenHttpGet = new HttpGet(String.format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s", this._appId, this._secret));
		HttpClient httpClient = new DefaultHttpClient();
		HttpResponse tokenResponse = httpClient.execute(tokenHttpGet);
		byte[] tokenBytes = EntityUtils.toByteArray(tokenResponse.getEntity());
		String token = (new JSONObject(new String(tokenBytes, "utf8"))).getString("access_token");

		// Delete old menus
		HttpGet deleteHttpGet = new HttpGet("https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=" + token);
		HttpResponse deleteResponse = httpClient.execute(deleteHttpGet);
		byte[] deleteBytes = EntityUtils.toByteArray(deleteResponse.getEntity());
		int errorCode = (new JSONObject(new String(deleteBytes, "utf8"))).getInt("errcode");
		if(errorCode != 0)
			return errorCode;

		// Create new menus
		HttpPost createPost = new HttpPost("https://api.weixin.qq.com/cgi-bin/menu/create?access_token=" + token);
		StringEntity contentEntity = new StringEntity(createMenuJsonString());
		createPost.setEntity(contentEntity);
		HttpResponse createResponse = httpClient.execute(createPost);
		byte[] createBytes = EntityUtils.toByteArray(createResponse.getEntity());
		errorCode = (new JSONObject(new String(createBytes, "utf8"))).getInt("errcode");
		return errorCode;
	}
	
	private String createMenuJsonString() throws Exception {
		String jsonStr = null;
		ObjectMapper mapper = new ObjectMapper();
		mapper.disable(SerializationConfig.Feature.WRITE_EMPTY_JSON_ARRAYS);
		mapper.disable(SerializationConfig.Feature.WRITE_NULL_PROPERTIES);
		StringWriter sw = new StringWriter();
		JsonGenerator gen = new JsonFactory().createJsonGenerator(sw);
		mapper.writeValue(gen, new ButtonWrap(this._menuFactory.generateMenu()));
		gen.close();
		jsonStr = sw.toString();
		return jsonStr;
	}
}
最近下载更多
我就我的 LV6前天
月亮星星星星
1763157114 LV153月29日
月亮月亮月亮星星星星星星
hellow1 LV31月31日
星星星星星星
皇朝灬焱轩 LV81月25日
月亮月亮
zt3631877 LV92020年12月10日
月亮月亮星星
HUANG888 LV62020年9月3日
月亮星星星星
aaa最代码 LV122020年8月21日
月亮月亮月亮
fzlzxc LV102020年8月12日
月亮月亮星星星星
郑志敏 LV72020年7月25日
月亮星星星星星星
kamiomisuzu LV92020年7月16日
月亮月亮星星
最近浏览更多
我就我的 LV6前天
月亮星星星星
暂无贡献等级
蹦迪的小熊 LV34月9日
星星星星星星
张泰然3月23日
暂无贡献等级
liuxie LV123月18日
月亮月亮月亮
dongren88 LV53月8日
月亮星星
Joker_ZST LV32月24日
星星星星星星
songjiahui LV182月20日
太阳星星星星
gong001002003 LV12月17日
星星
im-LiuM LV52月8日
月亮星星
顶部客服微信二维码底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友