天天看點

4、微信訂閱号之自定義菜單和點選事件消息回複

前言

1、controlelr

@RequestMapping("menu")
@ResponseBody
public ResponseBean todayYouHui(){

    try {

       return ResponseBean.buildSuccess(menuService.byControllerSetMenu());
    }catch (AppException e){
        return ResponseBean.buildFailure(e.getCode(),e.getMessage());
    } catch (Exception e) {
        return ResponseBean.buildFailure(e.getMessage());
    }
}

      

2、service

@Override
    public String byControllerSetMenu() {

        MenuUrl todayYouHuiMenuUrl = menuUrlRepository.findByMenuNameEquals(WechatMenuParams.YOUHUI_TODAY);

        ViewButton todayYouHui = new ViewButton();
        todayYouHui.setName(todayYouHuiMenuUrl.getMenuName());
        todayYouHui.setUrl(todayYouHuiMenuUrl.getUrl());
        todayYouHui.setType(WechatMenuParams.VIEW);


//        ClickButton _618DaCu = new ClickButton();
//        _618DaCu.setName("618大促銷");
//        _618DaCu.setType(WechatMenuParams.CLICK);
//        _618DaCu.setKey("618");

//              BasicButton youhuiTodayYouHui = new BasicButton();
//        youhuiTodayYouHui.setName(todayYouHuiMenuUrl.getMenuName());
//        youhuiTodayYouHui.setSub_button(new BasicButton[]{todayYouHui,_618DaCu});

        MenuUrl findYouHuiMenuUrl = menuUrlRepository.findByMenuNameEquals(WechatMenuParams.YOUHIU_FIND);
        ViewButton findYouHui = new ViewButton();
        findYouHui.setName(findYouHuiMenuUrl.getMenuName());
        findYouHui.setUrl(findYouHuiMenuUrl.getUrl());
        findYouHui.setType(WechatMenuParams.VIEW);


        ClickButton shike = new ClickButton();
        shike.setName("應用試客");
        shike.setType(WechatMenuParams.CLICK);
        shike.setKey("shikeErWeiMa");

        MenuUrl xianLaingMiaoShaMenuUrl = menuUrlRepository.findByMenuNameEquals(WechatMenuParams.YOUHUI_XIANGLIANG_MIAOSHA);
        ViewButton xianLaingMiaoSha = new ViewButton();
        xianLaingMiaoSha.setName(xianLaingMiaoShaMenuUrl.getMenuName());
        xianLaingMiaoSha.setUrl(xianLaingMiaoShaMenuUrl.getUrl());
        xianLaingMiaoSha.setType(WechatMenuParams.VIEW);


//    二級菜單的配置
        BasicButton youhuiXianLaingMiaoSha = new BasicButton();
        youhuiXianLaingMiaoSha.setName(WechatMenuParams.YOUHUI_XIANGLIANG_MIAOSHA);
        youhuiXianLaingMiaoSha.setSub_button(new BasicButton[]{xianLaingMiaoSha,shike});


        /**
         * 總菜單分布
         */
        Menu menu = new Menu();
        menu.setButton(new BasicButton[]{todayYouHui,findYouHui,youhuiXianLaingMiaoSha});

        String menuJson = JSONObject.fromObject(menu).toString();
        log.info(menuJson);

        //此處改為自己想要的結構體,替換即可
        String access_token= AccessToakeUtil.getAccessToaken();
        String createMenuUrl = WechatMenuParams.CREATE_MENU_URL+access_token;

        String body =    SdkHttpHelper.doJsonPost(createMenuUrl,menuJson);
        log.info("建立自定義菜單 傳回結果"+body);

        String result = JSONObject.fromObject(body).getString("errmsg");
        if(StringUtils.equals(result,"ok")){
            log.info("建立自定義菜單成功");
            return  result;
        }else{
            log.error("建立建立自定義菜單失敗自定義菜單失敗");
        }

        return "建立失敗";
    }

      

3、自定義菜單實體類

/**
 * @Desc: 自定義菜單總體
 * @Author HealerJean
 * @Date 2018/5/25  上午9:56.
 */
@Data
public class Menu {

    private BasicButton []  button;

}


/**
 * @Desc: view 菜單 (url菜單)
 * @Author HealerJean
 * @Date 2018/5/25  上午9:57.
 */
@Data
public class ViewButton extends BasicButton {

    private String url ;

}




/**
 * @Desc:
 * @Author HealerJean
 * @Date 2018/5/25  上午10:11.
 */
@Data
public class ClickButton extends BasicButton{

    private String key;

}




@Data
public class BasicButton {

    private String name;

    private String type ;

    /**
     * 二級菜單的數組标簽 為 sub_button
     */
    private BasicButton []sub_button;

}
      

3、點選事件消息回複

ClickButton shike = new ClickButton();
        shike.setName("應用試客");
        shike.setType(WechatMenuParams.CLICK);
        shike.setKey("shikeErWeiMa");      

3.1、針對來自使用者的時間類型擷取消息,然後再擷取key的值進行比對

public Object judgeMessageByMsgType(Map<String, String> map){

    // 消息類型
    String msgType = map.get("MsgType");

    String openId = map.get("FromUserName");
    AccessCallPerson(openId); //接入客服

    if (WeChatMessageParams.MESSAGE_TEXT.equals(msgType)) {// 文本消息
        return  getTestMessage(map,true);
     // 接收消息推送
    }else if(WeChatMessageParams.MESSAGE_EVENT.equals(msgType)) {
        //來自點選事件的event值
        String event = map.get("Event");
        //如果是點選事件,判斷key的值
        if(StringUtils.equals(WeChatMessageParams.MESSAGE_EVENT_CLICK,event)){//點選事件
            if(StringUtils.equals(map.get("EventKey"),"shikeErWeiMa")){
                return getImageMessage(map);
            }
        //使用者關注微信公衆号事件
        }else if(StringUtils.equals(WeChatMessageParams.MESSAGE_EVENT_SUBSCRIBE,event)){
            return getSubscribe(map);
         //使用者取關微信訂閱号
        }else if(StringUtils.equals(WeChatMessageParams.MESSAGE_EVENT_UNSUBSCRIBE,event)){
             unSubScribe(map);
        }
        else {
            return  null;
        }
    }
    else { //目前隻支援文本消息
        return getTestMessage(map,false);
    }
    return  null;
}