>  기사  >  위챗 애플릿  >  WeChat 공개 계정을 위한 맞춤형 메뉴 개발에 대한 예제 튜토리얼 공유

WeChat 공개 계정을 위한 맞춤형 메뉴 개발에 대한 예제 튜토리얼 공유

零下一度
零下一度원래의
2017-05-19 16:12:504027검색

메시지를 남겨주신 것을 환영합니다.

프로젝트 소스 코드 참조 주소를 보려면 저를 클릭하세요--시작을 환영합니다

이전 기사에서 프로젝트를 가져오는 방법을 이미 설명했습니다. 구성 프로젝트를 시작하는 방법, 개발자가 되는 방법, 소스 코드 분석 메시지와 상호 작용하는 방법(처음 네 가지 항목이 명확하지 않은 경우 여기를 읽고 WeChat 공개 계정을 빠르게 개발할 수 있습니다. 이 기사에서는 방법에 대해 설명합니다. 사용자 정의 메뉴 구현

사용자 정의 메뉴를 구현하는 방법은 두 가지가 있습니다
1. 편집 모드
2. 개발 모드

편집 모드는 매우 간단합니다. 자세한 내용은 다루지 않겠습니다...

사용자 정의 메뉴 구현을 위한 개발 모드

1. WeChat 공개 플랫폼 인터페이스 디버깅 도구를 사용하여 구현
2. 공식 인터페이스를 사용하여 구현

사전 준비

참고:
1. 현재 订阅号 편집 모드만 사용할 수 있으며, 개발 모드는 WeChat 인증 후에만 사용할 수 있습니다. 🎜>2. 편집모드와 개발모드는 동시에 켤 수 없습니다
3. 생성된 메뉴는 바로(다음날) 표시되지 않습니다. 바로 효과를 보고 싶으시면 언팔로우 하시면 됩니다. 다시

플러그인 추가

WeChat 공개 계정을 위한 맞춤형 메뉴 개발에 대한 예제 튜토리얼 공유

K8WTIEI86W9W5XERD`MRD{6.png

WeChat 공개 플랫폼 인터페이스 사용 구현하기 위한 디버깅 도구

WeChat 공개 계정을 위한 맞춤형 메뉴 개발에 대한 예제 튜토리얼 공유

사용자 정의 메뉴 인터페이스 디버깅 도구.png

두 개의 매개변수가 필수이고 둘 다 필수인 것을 볼 수 있습니다

access_tokenbody

이 두 매개변수를 어떻게 구하는지 물어보시는 분이 계시죠.

사실 메뉴를 생성해야 하는데 body 공식에서 제공하는데요. 참고로 JSON对象

 {
     "button":[
     {    
          "type":"click",
          "name":"今日歌曲",
          "key":"V1001_TODAY_MUSIC"
      },
      {
           "name":"菜单",
           "sub_button":[
           {    
               "type":"view",
               "name":"搜索",
               "url":"http://www.soso.com/"
            },
            {
               "type":"view",
               "name":"视频",
               "url":"http://v.qq.com/"
            },
            {
               "type":"click",
               "name":"赞一下我们",
               "key":"V1001_GOOD"
            }]
       }]
 }

획득은 아래와 같습니다. access_tokenCustom menu-get access_token.png

공식 인터페이스를 사용하여

WeChat 공개 계정을 위한 맞춤형 메뉴 개발에 대한 예제 튜토리얼 공유
위챗 맞춤 메뉴를 처음 배우는 학생들은 공식문서를 3번 읽어보시길 권합니다

에서는 캡슐화된 메뉴를 생성, 조회, 삭제도 가능합니다

맞춤 메뉴의 일치 결과 테스트

Jfinal-weixin맞춤 메뉴-메뉴 캡슐화 인터페이스.png

그렇다면 캡슐화 후 어떻게 사용하느냐는 질문입니다.

제공되는 패키지는 다음과 같습니다. WeChat 공개 계정을 위한 맞춤형 메뉴 개발에 대한 예제 튜토리얼 공유

    //查询自定义菜单
    public static ApiResult getMenu() {
        String jsonResult = HttpUtils.get(getMenu + AccessTokenApi.getAccessTokenStr());
        return new ApiResult(jsonResult);
    }
    //创建自定义菜单
    public static ApiResult createMenu(String jsonStr) {
        String jsonResult = HttpUtils.post(createMenu + AccessTokenApi.getAccessTokenStr(), jsonStr);
        return new ApiResult(jsonResult);
    }
    //删除自定义菜单
    public static ApiResult deleteMenu() {
        String jsonResult = HttpUtils.get(deleteMenuUrl + AccessTokenApi.getAccessTokenStr());
        return new ApiResult(jsonResult);
    }
    //创建个性化自定义菜单
    public static ApiResult addConditional(String jsonStr) {
        String jsonResult = HttpUtils.post(addConditionalUrl + AccessTokenApi.getAccessTokenStr(), jsonStr);
        return new ApiResult(jsonResult);
    }
    //删除个性化自定义菜单
    public static ApiResult delConditional(String menuid) {
        HashMap params = new HashMap();
        params.put("menuid", menuid);
        String url = delConditionalUrl + AccessTokenApi.getAccessTokenStr();
        String jsonResult = HttpUtils.post(url, JsonUtils.toJson(params));
        return new ApiResult(jsonResult);
    }
    //测试个性化菜单匹配结果
    public static ApiResult tryMatch(String userId) {
        HashMap params = new HashMap();
        params.put("user_id", userId);
        String url = tryMatchUrl + AccessTokenApi.getAccessTokenStr();
        String jsonResult = HttpUtils.post(url, JsonUtils.toJson(params));
        return new ApiResult(jsonResult);
    }

    public static ApiResult getCurrentSelfMenuInfo() {
        String jsonResult = HttpUtils.get(getCurrentSelfMenuInfoUrl + AccessTokenApi.getAccessTokenStr());
        return new ApiResult(jsonResult);
    }

인터페이스에서는

public static void main(String[] args) { 

           // 将菜单对象转换成json字符串
           String jsonMenu = JsonKit.toJson(getTestMenu()).toString();
           System.out.println(jsonMenu);
           ApiConfig ac = new ApiConfig();

            // 配置微信 API 相关常量 请使用你自己公众号的
            ac.setAppId("wx614c453e0d1dcd12");
            ac.setAppSecret("19a02e4927d346484fc70327970457f9");
//          ac.setAppId(PropKit.get("appId"));
//          ac.setAppSecret(PropKit.get("appSecret"));
            ApiConfigKit.setThreadLocalApiConfig(ac);

           //创建菜单
           ApiResult apiResult=MenuApi.createMenu(jsonMenu);
           System.out.println(apiResult.getJson());
     }

오픈소스 프로젝트 weixin_guide 클래스

를 보면


를 호출한 다음

com.javen.weixin.menu.MenuManager에서 호출하는 것을 볼 수 있습니다. 메뉴의 엔터티 개체를 JSON으로

MenuApi.createMenu(jsonMenu)
jsonMenu

/** 
         * 组装菜单数据 
         *  
         * @return 
         */  
        private static Menu getTestMenu() {  
            ClickButton btn11 = new ClickButton();  
            btn11.setName("微信相册发图");  
            btn11.setType("pic_weixin");  
            btn11.setKey("rselfmenu_1_1");

            ClickButton btn12 = new ClickButton();  
            btn12.setName("拍照或者相册发图");  
            btn12.setType("pic_photo_or_album");  
            btn12.setKey("rselfmenu_1_2");;  

            ClickButton btn13 = new ClickButton();  
            btn13.setName("系统拍照发图");  
            btn13.setType("pic_sysphoto");  
            btn13.setKey("rselfmenu_1_3");

            ClickButton btn21 = new ClickButton();  
            btn21.setName("扫码带提示");  
            btn21.setType("scancode_waitmsg");  
            btn21.setKey("rselfmenu_2_1");;  

            ClickButton btn22 = new ClickButton();  
            btn22.setName("扫码推事件");  
            btn22.setType("scancode_push");  
            btn22.setKey("rselfmenu_2_2");;  

            ViewButton btn23 = new ViewButton();  
            btn23.setName("我的设备");  
            btn23.setType("view");  
            btn23.setUrl("https://hw.weixin.qq.com/devicectrl/panel/device-list.html?appid=wx614c453e0d1dcd12"); 

            ViewButton btn31 = new ViewButton();  
            btn31.setName("微社区");  
            btn31.setType("view");  
            btn31.setUrl("http://whsf.tunnel.mobi/whsf/msg/wsq");  


            ClickButton btn32 = new ClickButton();  
            btn32.setName("发送位置");  
            btn32.setType("location_select");  
            btn32.setKey("rselfmenu_3_2"); 

            //http://tencent://message/?uin=572839485&Site=在线咨询&Menu=yes
            //http://wpa.qq.com/msgrd?v=3&uin=572839485&site=qq&menu=yes

            ViewButton btn33 = new ViewButton();  
            btn33.setName("在线咨询");  
            btn33.setType("view");  
            btn33.setUrl("http://wpa.qq.com/msgrd?v=3&uin=572839485&site=qq&menu=yes");  

            ViewButton btn34 = new ViewButton();  
            btn34.setName("我的博客");  
            btn34.setType("view");  
            btn34.setUrl("http://www.cnblogs.com/zyw-205520"); 

            ClickButton btn35 = new ClickButton();  
            btn35.setName("点击事件");  
            btn35.setType("click");  
            btn35.setKey("rselfmenu_3_5"); 

            ComButton mainBtn1 = new ComButton();  
            mainBtn1.setName("发图");  
            mainBtn1.setSub_button(new Button[] { btn11, btn12, btn13});  

            ComButton mainBtn2 = new ComButton();  
            mainBtn2.setName("扫码");  
            mainBtn2.setSub_button(new Button[] { btn21, btn22 ,btn23});  

            ComButton mainBtn3 = new ComButton();  
            mainBtn3.setName("个人中心");  
            mainBtn3.setSub_button(new Button[] { btn31, btn32, btn33, btn34 ,btn35 });  

            /** 
             * 这是公众号xiaoqrobot目前的菜单结构,每个一级菜单都有二级菜单项<br> 
             *  
             * 在某个一级菜单下没有二级菜单的情况,menu该如何定义呢?<br> 
             * 比如,第三个一级菜单项不是“更多体验”,而直接是“幽默笑话”,那么menu应该这样定义:<br> 
             * menu.setButton(new Button[] { mainBtn1, mainBtn2, btn33 }); 
             */  
            Menu menu = new Menu();  
            menu.setButton(new Button[] { mainBtn1, mainBtn2, mainBtn3 });  
            return menu;  
        }

기본 메서드는 생성된 메뉴의 JSON과 응답 상태

生成菜单的JSON:{"button":[{"sub_button":[{"name":"微信相册发图","type":"pic_weixin","key":"rselfmenu_1_1"},{"name":"拍照或者相册发图","type":"pic_photo_or_album","key":"rselfmenu_1_2"},{"name":"系统拍照发图","type":"pic_sysphoto","key":"rselfmenu_1_3"}],"name":"发图","type":null},{"sub_button":[{"name":"扫码带提示","type":"scancode_waitmsg","key":"rselfmenu_2_1"},{"name":"扫码推事件","type":"scancode_push","key":"rselfmenu_2_2"},{"name":"我的设备","type":"view","url":"https://hw.weixin.qq.com/devicectrl/panel/device-list.html?appid=wx614c453e0d1dcd12"}],"name":"扫码","type":null},{"sub_button":[{"name":"微社区","type":"view","url":"http://whsf.tunnel.mobi/whsf/msg/wsq"},{"name":"发送位置","type":"location_select","key":"rselfmenu_3_2"},{"name":"在线咨询","type":"view","url":"http://wpa.qq.com/msgrd?v=3&uin=572839485&site=qq&menu=yes"},{"name":"我的博客","type":"view","url":"http://www.cnblogs.com/zyw-205520"},{"name":"点击事件","type":"click","key":"rselfmenu_3_5"}],"name":"个人中心","type":null}],"matchrule":null}

响应的状态: {"errcode":0,"errmsg":"ok"}
위는 사용자 정의 메뉴를 생성하는 전체 과정입니다.

String jsonMenu = JsonKit.toJson(getTestMenu()).toString();[관련 추천]

1.

위챗 공개계정 플랫폼 소스코드 다운로드

Weizhichuang T+ 위챗 로봇 소스코드

3. WeChat People Network v3.4.5 고급 비즈니스 버전 WeChat 루빅스 큐브 소스 코드

위 내용은 WeChat 공개 계정을 위한 맞춤형 메뉴 개발에 대한 예제 튜토리얼 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.