xiaoyong931011
2023-07-15 217882984233d0541de9a9cd99b6a97eb22b2fe9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
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_VnGMZaIo0pkY7WJOfGVnRlqUGC8UQPu0eN4L8Hc9PearLQgIAtWOC2UCaErhctjI7ORBk_aeBg3QudsLWi5z5_lIPd_zwMCf7E4g8rHkqvArD-N8jyKOKJfzNGsGWJeAFAKAN";
 
        // 调用接口创建菜单
        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("https://www.baidu.com/");
 
        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;
    }
}