1. 메뉴 설명 및 버튼 유형을 사용자 정의합니다
1. 메뉴 설명
1) 사용자 정의 메뉴는 최대 3 개의 1 단계 메뉴를 포함하며 각 1 단계 메뉴에는 최대 5 개의 2 단계 메뉴가 포함되어 있습니다.
2) 첫 번째 레벨 메뉴에는 최대 4 명의 한자가 있으며 두 번째 레벨 메뉴에는 최대 7 자입니다. 추가 부품은 "..."로 대체됩니다.
3) 사용자 정의 메뉴를 작성한 후 메뉴 새로 고침 전략은 사용자가 공식 계정 세션 페이지 또는 공식 계정 프로필 페이지를 입력 할 때 마지막 메뉴를 당기는 마지막 요청이 5 분 전에 메뉴를 가져옵니다. 메뉴가 업데이트되면 클라이언트의 메뉴가 새로 고침됩니다. 테스트 중에 공개 계정을 팔로우하고 다시 팔로우 할 수 있으며 창조 후 효과를 볼 수 있습니다.
2. 사용자 정의 메뉴 인터페이스는 여러 유형의 버튼을 구현할 수 있습니다.
1) 클릭 : 사용자가 푸시 이벤트를 클릭 할 때 클릭 유형 버튼을 클릭 한 후 WeChat 서버는 메시지 인터페이스를 통해 메시지 유형 이벤트의 구조를 개발자에게 푸시하고 (메시지 인터페이스 가이드 참조) 버튼에 개발자가 작성한 키 값을 가져옵니다. 개발자는 사용자 정의 된 키 값을 통해 사용자와 상호 작용할 수 있습니다.
2)보기 : URL 점프 URL 사용자가보기 유형 버튼을 클릭하면 WeChat 클라이언트가 버튼에서 개발자가 작성한 웹 페이지 URL을 열면 웹 페이지 인증과 결합하여 사용자 기본 정보를 얻기 위해 사용자 기본 정보 인터페이스를 얻을 수 있습니다.
3) scancode_push : 사용자가 스캔 코드 푸시 이벤트의 버튼을 클릭 한 후 WeChat 클라이언트는 스캔 도구를 호출하고 스캔 코드 작업을 완료 한 후 스캔 결과를 표시하면 (URL 인 경우 URL이 입력됩니다) 스캔 결과가 개발자에게 전달되며 개발자는 메시지를 보낼 수 있습니다.
4) scancode_waitmsg : 코드를 스캔하여 이벤트를 푸시하고 "메시지 수신"프롬프트 상자가 나타납니다. 사용자가 버튼을 클릭하면 WeChat 클라이언트가 스캔 도구를 호출합니다. 스캔 작업을 완료 한 후 스캔 코드 결과가 개발자에게 전달됩니다. 동시에 스캔 도구가 닫히고 "메시지 수신"프롬프트 상자가 나타납니다. 그런 다음 개발자가 보낸 메시지가 수신 될 수 있습니다.
5) pic_sysphoto : 사용자가 버튼을 클릭 한 후 WeChat 클라이언트가 시스템 카메라를 조정합니다. 사진 작업을 완료하면 캡처 된 사진이 개발자에게 전송되어 이벤트를 개발자에게 푸시합니다. 동시에 시스템 카메라가 닫히고 개발자가 보낸 메시지가 수신 될 수 있습니다.
6) PIC_PHOTO_OR_ALBUM : 사용자가 버튼을 클릭 한 후 WeChat 클라이언트가 선택기를 팝업하여 사용자가 "사진 촬영"또는 "휴대 전화 앨범 선택"을 선택할 수 있도록 선택합니다. 사용자가 선택한 후에는 다른 두 프로세스를 살펴 봅니다.
7) PIC_WEIXIN : 사용자가 WeChat 사진 앨범 발신자의 버튼을 클릭 한 후 WeChat 클라이언트는 WeChat 사진 앨범을 조정합니다. 선택 작업을 완료하면 선택한 사진이 개발자의 서버로 전송되어 이벤트를 개발자에게 푸시합니다. 동시에 앨범이 마감됩니다. 그런 다음 개발자가 보낸 메시지가 수신 될 수 있습니다.
8) Location_Select : 사용자가 버튼을 클릭하면 버튼을 클릭 한 후 WeChat 클라이언트가 지리적 위치 선택 도구를 호출합니다. 선택 작업을 완료하면 선택한 지리적 위치가 개발자의 서버로 전송되고 위치 선택 도구가 닫힙니다. 그런 다음 개발자가 보낸 메시지가 수신 될 수 있습니다.
9) Media_id : 사용자가 Media_ID 유형 버튼을 클릭 한 후 WeChat 서버는 개발자가 작성한 영구 자료 ID에 해당하는 자료를 사용자에게 보냅니다. 영구 자료 유형은 사진, 오디오, 비디오 및 그래픽 메시지 일 수 있습니다. 참고 : 영구 자료 ID는 "자재 관리/추가 영구 자료 추가"인터페이스를 업로드 한 후 얻은 법적 ID 여야합니다.
10) View_Limited : 사용자가 view_Limited 유형 버튼을 클릭 한 후 그래픽 메시지 URL을 점프하면 WeChat 클라이언트는 버튼에서 개발자가 채워진 영구 자료 ID에 해당하는 그래픽 메시지 URL을 엽니 다. 영구 자료 유형은 그래픽 메시지 만 지원합니다. 참고 : 영구 자료 ID는 "자재 관리/추가 영구 자료 추가"인터페이스를 업로드 한 후 얻은 법적 ID 여야합니다.
참고 : 3 ~ 8의 모든 이벤트는 iPhone 5.4.1 이상의 WeChat 사용자와 Android 5.4 이상을 지원합니다. 이전 버전의 WeChat 사용자는 클릭 후 응답하지 않으며 개발자는 이벤트 푸시를 정상적으로받을 수 없습니다. 9 및 10은 WeChat에 의해 인증되지 않은 타사 플랫폼에서 구독 계정에 특별히 준비된 이벤트 유형입니다 (특히 자격 인증으로 승인되지 않음). 그들은 이벤트 푸시가 없으며 그들의 기능은 비교적 제한적입니다. 다른 유형의 공공 계정은 사용할 필요가 없습니다.
2. 메뉴를 작성/쿼리/삭제합니다
공식 클릭 및 뷰 이벤트 데모
{ "button": [{ "type": "click", "name": "오늘의 노래", "키": "v1001_today_music"}, { "name": "menu", "sub_button": [{ "type": "view", "name": "search", "url": "http:///www.so.soso.soso.soso.soso.soso.soso.soso.soso. "type": "miniprogram", "name": "wxa", "url": "http://mp.weixin.qq.com", "appid": "wx286b93c14bbf93aa", "pagepath": "pages/lunar/index"{ "type": "클릭", "", "" "키": "v1001_good"}]}}}기타 유형 (9 및 10 포함)
{ "button": [{ "name": "scancode_waitmsg", "name": "scancode with prompt", "key": "selfmenu_0_0", "sub_button": []}, { "type": "scancode", "scancode_push", "name": "Key": "Key": "selfmenu_0_1", "sub_button": []}]}, { "name": "사진 보내기", "sub_button": [{ "type": "pic_sysphoto", "name": "system photos and post pictures", "selfmenu_10", "sub_button": [ "type}, {"} : "PIC_PHOTO_OR_ALBUM", "이름": "사진을 게시하기 위해 사진 또는 앨범 촬영", "키": "selfmenu_1_1", "sub_button": []}, { "type": "pic_weixin", "이름": "wechat 앨범 사진 및 게시물", "selfmenu_1_1_2" { "name": "send location", "type": "location_select", "key": "selfmenu_2_0"}, { "type": "media_id", "name": "picture", "media_id": "media_id1"}, { "type": "view_limited", "name"1. 예제에 따라 엔티티 클래스 캡슐화 시작
메뉴 버튼 기본 클래스 Basicbutton.java
공개 클래스 BASICBUTTON {개인 문자열 이름; 공개 문자열 getName () {return name; } public void setName (문자열 이름) {this.name = 이름; }} 메뉴. 자바
공개 클래스 메뉴 {공개 최종 정적 문자열 클릭 = "클릭"; // 메뉴를 클릭하여 공개 최종 정적 문자열보기 = "보기"; // URL 메뉴 공개 최종 정적 문자열 scancode_waitmsg = "scancode_waitmsg"; // 코드를 스캔하여 신속한 최종 정적 문자열 Scancode_push = "Scancode_push"를 보냅니다. // 코드를 스캔하여 이벤트를 눌러 공개 최종 정적 문자열 pic_sysphoto = "pic_sysphoto"; // 사진을 찍고 공개 최종 정적 문자열을 게시하는 시스템 PIC_PHOTO_OR_ALBUM = "PIC_PHOTO_OR_ALBUM"; // 사진을 찍거나 사진 앨범을 게시하십시오 앨범 공개 최종 정적 문자열 pic_weixin = "pic_weixin"; // weChat에 사진을 게시 공개 최종 정적 문자열 locate_select = "location_select"; // 위치 보내지 개인 BASICBUTTON [] 버튼; public basicbutton [] getButton () {반환 버튼; } public void setButton (BASICBUTTON [] 버튼) {this.Button = 버튼; }} 보기 유형 버튼 클래스 ViewButton.java. 다른 유형은 이것에 따라 하나씩 포장 할 수 있습니다.
Public Class ViewButton 확장 BasicButton {private String type = menu.view; 개인 문자열 URL; 공개 문자열 gettype () {return type; } public void settype (문자열 유형) {this.type = 유형; } public String getUrl () {return url; } public void seturl (String URL) {this.url = url; }}첫 번째 레벨 메뉴에는 두 번째 레벨 메뉴 ComplexMenu.java의 캡슐화가 포함되어 있습니다.
Public Class ComplexMenu는 BASICBUTTON {private BASICBUTTON [] SUB_BUTTON; public basicbutton [] getsub_button () {return sub_button; } public void setsub_button (Basicbutton [] sub_button) {this.sub_button = sub_button; }}2. 포장을 완료하고 메뉴를 조립하십시오
비공개 정적 메뉴 getMenu () {viewButton btn11 = new ViewButton (); btn11.setName ( "테스트 11"); btn11.seturl ( "http://www.qq.com"); CLICKBUTTON BTN21 = New ClickButton (); btn21.setName ( "테스트 21"); btn21.setkey ( "21"); CLICKBUTTON BTN22 = New ClickButton (); btn22.setname ( "테스트 22"); btn22.setkey ( "22"); // 레벨 1 메뉴 (보조 메뉴 없음) ComplexMenu MainBtn1 = New ComplexMenu (); mainbtn1.setName ( "테스트 1"); mainbtn1.setsub_button (new Basicbutton [] {btn11}); // 레벨 1 메뉴 (보조 메뉴 포함) complexmenu mainbtn2 = new ComplexMenu (); mainbtn2.setName ( "테스트 2"); mainbtn2.setsub_button (new Basicbutton [] {btn21, btn22}); 메뉴 메뉴 = 새 메뉴 (); menu.setButton (new BasicButton [] {mainbtn1, mainbtn2}); 리턴 메뉴; }3. 사용자 정의 메뉴 생성
/ ** * 메뉴 생성 * * @param 메뉴 항목 * @param 토큰 인증 토큰 * @return { "errcode": 0, "errmsg": "ok"} */ public resultstate createmenu (메뉴 메뉴, 문자열 토큰) {treemap <string, map = new Treemap <String, String> (); map.put ( "access_token", 토큰); 문자열 jsondata = jsonutil.tojson (메뉴) .tostring (); 문자열 결과 = httprequtil.httpsdefaultexecute (httprequtil.post_method, wechatconfig.menu_create_url, map, jsondata); return jsonutil.fromjson (result, resultstate.class); }4. 사용자 정의 메뉴 쿼리
반환 된 인스턴스
인터페이스 생성에 해당하면 올바른 JSON이 결과를 반환합니다.
{ "menu": { "button": [{ "type": "click", "name": "name": "today song", "key": "v1001_today_music", "sub_button": []}, { "type": "click", "singer profile", "key": "v1001_singer", "| [v1001_toning": "이름": "메뉴", "sub_button": [{ "type": "view", "name": "search", "url": "http://www.soso.com/", "sub_button": []}, { "type": "view", "name": "video", "url": "http://v.", "sub_button": []}, { "type": "click", "name": "like us", "key": "v1001_good", "sub_button": []}]}}} / ** * 사용자 정의 메뉴 가져 오기 * * @param token * @return */ public string getMenu (String Token) {treemap <String, String> map = new Treemap <String, String> (); map.put ( "access_token", 토큰); 문자열 결과 = httprequtil.httpsdefaultexecute (httprequtil.get_method, wechatconfig.menu_get_url, map ""); 반환 결과; }menuattr.java
/ ** * 메뉴의 모든 속성 * @Author Phil * */ public class menuattr는 basicmenu {private String type; 개인 문자열 URL; 개인 문자열 키; 개인 문자열 sub_button; GET/SET Method} 반환 된 메뉴 클래스 MenureTurn.java
/ ** * 반환 된 메뉴 클래스 * @Author Phil * */ Public Class MenureTurn은 BASICMENU {private Menuattr [] sub_button; public menuattr [] getsub_button () {return sub_button; } public void setsub_button (menuattr [] subbutton) {sub_button = subbutton; }}JSON 형식의 문자열을 메뉴 객체로 변환합니다
/ ** * JSON 형식의 문자열을 메뉴 객체로 변환 * @param json * @return */ public list <MenureTurn> convertMenu (String JSON) {list <menureTurn> list = new arrayList <menureTurn> (); if (json! = null &&! "". equals (json)) {jsonobject object = jsonobject.parseobject (json); jsonArray array = Object.getJsonObject ( "menu"). getJsonArray ( "버튼"); for (int i = 0; i <array.size (); i ++) {menureturn mr = new MenureTurn (); mr = array.getObject (i, menureturn.class); list.add (mr); }} 리턴 목록; }참고 : Fastjson은 여기에서 사용했습니다
다음은 개선 해야하는 방법입니다. 더 나은 것이 있으면 조언을 해주세요
5. 사용자 정의 메뉴 삭제
/ ** * 사용자 정의 메뉴 삭제 * * @param token * @return */ public boolean deletemenu (문자열 토큰) {boolean falg = true; Treemap <String, String> map = new Treemap <String, String> (); map.put ( "access_token", 토큰); 문자열 결과 = httprequtil.httpsdefaultexecute (httprequtil.get_method, wechatconfig.menu_delte_url, map, ""); resultstate state = jsonutil.fromjson (result, resultstate.class); if (state.geterRcode ()! = 0 || state.geterRmsg ()! = "OK") {false = false; } false를 반환합니다. }3. 사용자 정의 메뉴 이벤트 푸시
사용자가 사용자 정의 메뉴를 클릭하면 WeChat은 클릭 이벤트를 개발자에게 푸시합니다. 클릭 메뉴가 하위 메뉴를 팝업하여 보고서를 생성하지 않습니다. 세 번째에서 8 번째까지의 모든 이벤트는 iPhone 5.4.1 이상의 WeChat 사용자와 Android 5.4 이상을 지원합니다. 이전 버전의 WeChat 사용자는 클릭 후 응답하지 않으며 개발자는 이벤트 푸시를 정상적으로받을 수 없습니다.
1. WeChat이 푸시 한 XML 데이터 패킷을 분석하십시오
/*** WeChat (XML)* XML 예제* XML 예제* <XML> <TouserName> <! <msgtype> <! [cdata [event]]> </msgtype> <event> <! [cdata [click]> </eventkey> <! 구문 분석 된 결과를 해시 맵 맵 <문자열, 문자열>지도에 저장하십시오. new Hashmap <string, String> (); // 요청에서 입력 스트림을 가져옵니다. inputStream inputStream = request.getInputStream (); // 입력 스트림을 읽습니다 saxReader reader = new SaxReader (); 문서 문서 = reader.read (inputStream); // XML 루트 요소를 가져옵니다. 요소 root = document.getRootElement (); // 루트 요소 목록의 모든 자식 노드를 가져옵니다 <EMENTMENTLIST = root.elements (); // (요소 e : elementList) map.put (e.getName (), e.getText ())에 대한 모든 자식 노드를 가로지 릅니다. // 리소스 inputStream.close (); inputStream = null; 리턴 맵; }
2. 맵 get (키)을 사용하여 값을 얻습니다
msgtype 메시지 유형, 이벤트
이벤트 이벤트 유형, 클릭
이벤트 키 이벤트 키 값은 사용자 정의 메뉴 인터페이스의 키 값에 해당합니다.
참고 : 키는 매개 변수 이름입니다
첨부 파일 : wechatconfig.java
// 메뉴 생성 공개 정적 최종 문자열 menu_create_url = "https://api.weixin.qq.com/cgi-bin/menu/create"; // 사용자 정의 메뉴 공개 정적 최종 문자열 메뉴 _get_url = "https://api.weixin.qq.com/cgi-bin/menu/get"; // 사용자 정의 메뉴 삭제 공개 정적 최종 문자열 menu_delte_url = "https://api.weixin.qq.com/cgi-bin/menu/delete";
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.