Springboot开发微信公众号(四)


1.1 数据结构分析
{
     "button":[
     {    
          "type":"click",
          "name":"今日歌曲",
          "key":"V1001_TODAY_MUSIC"
      },
      {
           "name":"菜单",
           "sub_button":[
           {    
               "type":"view",
               "name":"搜索",
               "url":"http://www.soso.com/"
            },
            {
                 "type":"miniprogram",
                 "name":"wxa",
                 "url":"http://mp.weixin.qq.com",
                 "appid":"wx286b93c14bbf93aa",
                 "pagepath":"pages/lunar/index"
             },
            {
               "type":"click",
               "name":"赞一下我们",
               "key":"V1001_GOOD"
            }]
       }]
 }
{
    "button": [
        {
            "name": "扫码", 
            "sub_button": [
                {
                    "type": "scancode_waitmsg", 
                    "name": "扫码带提示", 
                    "key": "rselfmenu_0_0", 
                    "sub_button": [ ]
                }, 
                {
                    "type": "scancode_push", 
                    "name": "扫码推事件", 
                    "key": "rselfmenu_0_1", 
                    "sub_button": [ ]
                }
            ]
        }, 
        {
            "name": "发图", 
            "sub_button": [
                {
                    "type": "pic_sysphoto", 
                    "name": "系统拍照发图", 
                    "key": "rselfmenu_1_0", 
                   "sub_button": [ ]
                 }, 
                {
                    "type": "pic_photo_or_album", 
                    "name": "拍照或者相册发图", 
                    "key": "rselfmenu_1_1", 
                    "sub_button": [ ]
                }, 
                {
                    "type": "pic_weixin", 
                    "name": "微信相册发图", 
                    "key": "rselfmenu_1_2", 
                    "sub_button": [ ]
                }
            ]
        }, 
        {
            "name": "发送位置", 
            "type": "location_select", 
            "key": "rselfmenu_2_0"
        },
        {
           "type": "media_id", 
           "name": "图片", 
           "media_id": "MEDIA_ID1"
        }, 
        {
           "type": "view_limited", 
           "name": "图文消息", 
           "media_id": "MEDIA_ID2"
        }
    ]
}
1,2 根据json格式的结构,写对应的bean
/**
 * 
 * 类名称: Button
 * 类描述: 按钮
 * @author yuanjun
 * 创建时间:2017年12月8日下午8:35:38
 */
public class Button {
    
    private String name;//菜单标题
    
    private String type;//菜单的响应动作类型
    
    private Button[] sub_button;
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public String getType() {
        return type;
    }
 
    public void setType(String type) {
        this.type = type;
    }
 
    public Button[] getSub_button() {
        return sub_button;
    }
 
    public void setSub_button(Button[] sub_button) {
        this.sub_button = sub_button;
    }
    
    
}
/**
 * 
 * 类名称: ClickButton
 * 类描述: 点击类型
 * @author yuanjun
 * 创建时间:2017年12月8日下午8:38:06
 */
public class ClickButton extends Button{
    
    private String key;//菜单KEY值
 
    public String getKey() {
        return key;
    }
 
    public void setKey(String key) {
        this.key = key;
    }
    
    
    
}
public class ViewButton extends Button{
    
    private String url;//网页链接
 
    public String getUrl() {
        return url;
    }
 
    public void setUrl(String url) {
        this.url = url;
    }
    
    
    
    
}
/**
 * 
 * 类名称: Menu
 * 类描述: 菜单
 * @author yuanjun
 * 创建时间:2017年12月8日下午8:40:18
 */
public class Menu {
    
    private Button[] button;
 
    public Button[] getButton() {
        return button;
    }
 
    public void setButton(Button[] button) {
        this.button = button;
    }
    
    
}
二、调用接口创建自定义菜单(通过测试开发账号)
import net.sf.json.JSONObject;
 
import com.yuanjun.weixindemo.bean.Button;
import com.yuanjun.weixindemo.bean.ClickButton;
import com.yuanjun.weixindemo.bean.Menu;
import com.yuanjun.weixindemo.bean.ViewButton;
 
/**
 * 
 * 类名称: MemuUtil
 * 类描述: 菜单工具
 * @author yuanjun
 * 创建时间:2017年12月8日下午8:42:15
 */
public class MenuUtil {
    
    private static final String CTRATE_MENU_URL  = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN";
    /**
     * 创建菜单
     * @param accessToken 
     * @param Menu 菜单json格式字符串
     * @return
     */
    public static int createMenu(String accessToken,String Menu){
        int result = Integer.MIN_VALUE;
        String url = CTRATE_MENU_URL.replaceAll("ACCESS_TOKEN", accessToken);
        JSONObject json = WeiXinUtil.doPoststr(url, Menu);
        if(json!=null){
            //从返回的数据包中取数据{"errcode":0,"errmsg":"ok"}
            result = json.getInt("errcode");
        }
        return result;
    }
    
    public static String initMenu(){
        String result = "";
        //创建点击一级菜单
        ClickButton button11 = new ClickButton();
        button11.setName("往期活动");
        button11.setKey("11");
        button11.setType("click");
        
        //创建跳转型一级菜单
        ViewButton button21 = new ViewButton();
        button21.setName("百度一下");
        button21.setType("view");
        button21.setUrl("https://www.baidu.com");
        
        //创建其他类型的菜单与click型用法一致
        ClickButton button31 = new ClickButton();
        button31.setName("拍照发图");
        button31.setType("pic_photo_or_album");
        button31.setKey("31");
        
        ClickButton button32 = new ClickButton();
        button32.setName("发送位置");
        button32.setKey("32");
        button32.setType("location_select");
        
        //封装到一级菜单
        Button button = new Button();
        button.setName("菜单");
        button.setType("click");
        button.setSub_button(new Button[]{button31,button32});
        
        //封装菜单
        Menu menu = new Menu();
        menu.setButton(new Button[]{button11,button21,button});
        return JSONObject.fromObject(menu).toString();
    }
}
2.1 后台测试
import com.yuanjun.weixindemo.util.MenuUtil;
import com.yuanjun.weixindemo.util.WeiXinUtil;
 
public class TestMenu {
    public static void main(String[] args) {
        String accessToken  = WeiXinUtil.getAccess_Token();
        String menu = MenuUtil.initMenu();
        System.out.println(menu);
        int result = MenuUtil.createMenu(accessToken,menu);
        if(result==0){
            System.out.println("菜单创建成功");
        }else{
            System.out.println("错误码"+result);
        }
    }
}

参考https://blog.csdn.net/shenbug/article/details/78755297

希望能交流更多技术,关注小白的微信公众号吧。
!希望能交流更多技术,关注小白的微信公众号吧
 

小白技术社
原文地址:https://www.cnblogs.com/xbjss/p/13326696.html