1、首先需要开通微信公众号
2、获取到公钥私钥
// 用于存放公钥私钥
public class Constant {
public static String APPID = "AppId";
public static String SECRET = "微信私钥";
}
3、调用获取token的工具类获取token
/**
* 获取接口访问凭证
*
* @param appid 凭证
* @param appsecret 密钥
* @return
*/
public static AccessToken getToken(String appid, String appsecret) {
AccessToken token = null;
String requestUrl = token_url.replace("APPID", appid).replace("APPSECRET", appsecret);
// 发起GET请求获取凭证
JSONObject jsonObject = httpsRequest(requestUrl, "GET", null);
if (null != jsonObject) {
try {
token = new AccessToken();
token.setAccessToken(jsonObject.getString("access_token"));
token.setExpiresIn(jsonObject.getInt("expires_in"));
} catch (JSONException e) {
token = null;
// 获取token失败
HttpManager.fail("获取token失败 errcode:{} errmsg:{}" + jsonObject.getInt("errcode") + jsonObject.getString("errmsg"));
}
}
return token;
}
4、controller测试
/**
* 创建微信菜单
*/
@ApiOperation("创建公众号菜单")
@GetMapping("wxCreateMenu")
public void wxCreateMenu() {
AccessToken access_Token = WeChatUtil.getToken(Constant.APPID, Constant.SECRET);
ViewButton viewButton1 = new ViewButton();
viewButton1.setName("男装");
viewButton1.setType("view");
viewButton1.setUrl("https://www.baidu.com");
ViewButton viewButton2 = new ViewButton();
viewButton2.setName("女装");
viewButton2.setType("view");
viewButton2.setUrl("https://www.baidu.com");
ViewButton viewButton3 = new ViewButton();
viewButton3.setName("会员详情");
viewButton3.setType("view");
viewButton3.setUrl("https://www.baidu.com");
//二级菜单创建
GroupButton groupButton = new GroupButton();
groupButton.setName("商品分类");
groupButton.setSub_button(new Button[]{viewButton1, viewButton2});
Menu wxMenu = new Menu();
// 一级菜单创建
// 这个工具类在下方
wxMenu.setButton(new Button[]{groupButton, viewButton3});
createMenu(wxMenu, access_Token.getAccessToken());
}
5、调用接口开始执行完成后去微信公众号中查看
菜单创建、删除、查询工具类
public class MenuUtils {
//1.菜单创建(POST) 限100(次/天)
public static final String CREATE_MENU_URL = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN";
//2.查询菜单数据
public static final String GET_MENU_URL = "https://api.weixin.qq.com/cgi-bin/menu/get?access_token=ACCESS_TOKEN";
//3.删除菜单
public static final String DELETE_MENU_URL = "https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=ACCESS_TOKEN";
/**
* 创建菜单
* @param menu 菜单实例
* @param accessToken 有效凭证
*/
public static void createMenu(Menu menu, String accessToken) {
//1.准备POST请求参数
String data = JSONObject.fromObject(menu).toString();
System.out.println("---------------------------创建微信菜单JSON数据---------------------");
System.out.println(data);
//2.拼装创建菜单的url
String url = CREATE_MENU_URL.replace("ACCESS_TOKEN", accessToken);
//3.发起POST请求,获取返回结果
String result = WeChatUtil.sendPost(url, data);
JSONObject jsonObject = JSONObject.fromObject(result);
System.out.println("---------------------------创建微信菜单返回结果---------------------");
System.out.println(result);
if (null != jsonObject) {
//5.错误消息处理
if (0 != jsonObject.getInt("errcode")) {
System.out.println("---------------------------创建微信菜单错误---------------------");
int errCode = jsonObject.getInt("errcode");
String errMsg = jsonObject.getString("errmsg");
throw new IllegalArgumentException("error code:" + errCode + ", error message:" + errMsg);
} else {
System.out.println("---------------------------创建微信菜单成功---------------------");
}
}
}
/**
* 查询菜单数据
* @param accessToken 有效凭证
* @return
* @throws Exception JSONObject
*/
public static JSONObject getMenu(String accessToken) {
//1.获取请求url
String url = GET_MENU_URL.replace("ACCESS_TOKEN", accessToken);
//2.发起GET请求,获取返回结果
String result = WeChatUtil.sendGet(url, "");
JSONObject jsonObject = JSONObject.fromObject(result);
System.out.println("---------------------------查询微信菜单返回结果---------------------");
System.out.println(result);
//3.解析结果,获取菜单数据
JSONObject returnJsonObject = null;
if (null != jsonObject) {
//4.错误消息处理
if (0 != jsonObject.getInt("errcode")) {
System.out.println("---------------------------查询微信菜单错误---------------------");
int errCode = jsonObject.getInt("errcode");
String errMsg = jsonObject.getString("errmsg");
throw new IllegalArgumentException("error code:" + errCode + ", error message:" + errMsg);
//5.成功获取菜单数据
} else {
returnJsonObject = jsonObject;
}
}
return returnJsonObject;
}
/**
* 删除菜单
* @param accessToken 有效凭证
* @throws Exception void
*/
public static void deleteMenu(String accessToken) {
//1.获取请求url
String url = DELETE_MENU_URL.replace("ACCESS_TOKEN", accessToken);
//2.发起GET请求,获取返回结果
String result = WeChatUtil.sendGet(url, "");
JSONObject jsonObject = JSONObject.fromObject(result);
System.out.println("---------------------------删除微信菜单返回结果---------------------");
System.out.println(result);
//3.解析结果
if (null != jsonObject) {
//4.错误消息处理
if (0 != jsonObject.getInt("errcode")) {
System.out.println("---------------------------删除微信菜单错误---------------------");
int errCode = jsonObject.getInt("errcode");
String errMsg = jsonObject.getString("errmsg");
throw new IllegalArgumentException("error code:" + errCode + ", error message:" + errMsg);
//5.成功删除菜单
} else {
System.out.println("---------------------------删除微信菜单成功---------------------");
}
}
}
public static final String toJSONString(Object object, SerializerFeature... features) {
SerializeWriter out = new SerializeWriter();
try {
JSONSerializer serializer = new JSONSerializer(out);
for (com.alibaba.fastjson.serializer.SerializerFeature feature : features) {
serializer.config(feature, true);
}
serializer.write(object);
return out.toString();
} finally {
out.close();
}
}
}