package cc.mrbird.febs.pay.util; import cc.mrbird.febs.pay.model.Button; import cc.mrbird.febs.pay.model.CommonButton; import cc.mrbird.febs.pay.model.ComplexButton; import cc.mrbird.febs.pay.model.Menu; import cn.hutool.json.JSONUtil; import lombok.extern.slf4j.Slf4j; import net.sf.json.JSONObject; import org.springframework.http.converter.StringHttpMessageConverter; import org.springframework.web.client.RestTemplate; import java.nio.charset.Charset; /** * 菜单初始化 */ @Slf4j public class WechatMenuUtil { public static void main(String[] args) { // 第三方用户唯一凭证 String appId = "wx052716b1a388b13c"; // 第三方用户唯一凭证密钥 String appSecret = "e7cf355e7234f035d8fea6a3a19513b9"; String accessToken = "70_LkVymFk8YsaB6EfPqJARigNJoM4fL5gqHE90HHG8o9zureJ34jFYOcal97lTpCD1sNhxHRbZzIs6CylMHyMou3GWj51HNg37lKUlTzrCkpeEGERAnT2gQCCjyOgTKAfAIAGXN"; // 调用接口创建菜单 String result = createMenu(getMenu(), accessToken); // 判断菜单创建结果 if ("0".equals(result)) log.info("菜单创建成功!"); else log.info("菜单创建失败,错误码:" + result); } // 菜单创建(POST) 限100(次/天) public static String menu_create_url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN"; /** * 创建菜单 * * @param menu 菜单实例 * @param accessToken 有效的access_token * @return 0表示成功,其他值表示失败 */ public static String createMenu(Menu menu, String accessToken) { RestTemplate restTemplate = new RestTemplate(); restTemplate.getMessageConverters().stream().filter(converter -> converter instanceof StringHttpMessageConverter).forEach(converter -> ((StringHttpMessageConverter) converter).setDefaultCharset(Charset.forName("UTF-8"))); String result = "0"; // 拼装创建菜单的url String url = menu_create_url.replace("ACCESS_TOKEN", accessToken); // 将菜单对象转换成json字符串 String jsonMenu = JSONObject.fromObject(menu).toString(); System.out.println(result); // 调用接口创建菜单 try { // 发送post请求,并打印结果,以String类型接收响应结果JSON字符串 String jsonObject = restTemplate.postForObject(url, jsonMenu, String.class); if (null != jsonObject) { cn.hutool.json.JSONObject parseObj = JSONUtil.parseObj(jsonObject); if (!"0".equals(parseObj.getStr("errcode"))) { result = parseObj.getStr("errcode"); log.error("创建菜单失败 errcode:{} errmsg:{}", result, parseObj.getStr("errmsg")); } } } catch (Exception e) { log.error("创建菜单失败",e); } return result; } /** * 组装菜单数据 * * @return */ private static Menu getMenu() { CommonButton btn11 = new CommonButton(); btn11.setName("商城"); btn11.setType("view"); btn11.setKey("11"); btn11.setUrl("http://ywgouth.meiao.biz/"); CommonButton btn24 = new CommonButton(); btn24.setName("公司简介"); btn24.setType("click"); btn24.setKey("24"); CommonButton btn31 = new CommonButton(); btn31.setName("我的分享码"); btn31.setType("click"); btn31.setKey("31"); /** * 微信: mainBtn1,mainBtn2,mainBtn3底部的三个一级菜单。 */ ComplexButton mainBtn1 = new ComplexButton(); mainBtn1.setName("药王谷铺子"); mainBtn1.setSub_button(new CommonButton[] { btn11}); ComplexButton mainBtn2 = new ComplexButton(); mainBtn2.setName("公司简介"); mainBtn2.setSub_button(new CommonButton[] { btn24 }); ComplexButton mainBtn3 = new ComplexButton(); mainBtn3.setName("我的分享码"); mainBtn3.setSub_button(new CommonButton[] { btn31 }); /** * 封装整个菜单 */ Menu menu = new Menu(); menu.setButton(new Button[] { mainBtn1, mainBtn2, mainBtn3 }); return menu; } }