WeChat Development Public Platform의 사용자 정의 메뉴는 돈을 얻기 위해 인증을 받아야합니다. 돈을 쓰고 싶지 않다면 테스트 계정만으로 플레이 할 수 있지만 개발에는 영향을 미치지 않습니다. 저의 개발은 Liu Feng의 Wechat Public Platform 교사의 응용 프로그램 개발을 기반으로합니다.
공개 플랫폼을 사용하여 계정을 테스트하는 한 사용자 정의 메뉴를 개발할 수 있습니다. 더 편리합니다. 테스트 계정에는 많은 인터페이스가있어 매우 편리합니다.
사용자 정의 메뉴를 개발할 때는 WeChat Public Platform Developer 문서의 사용자 정의 메뉴를 참조하여이를 작성할 수 있습니다.
1. 메뉴를 사용자 정의하십시오
1. 사용자 정의 메뉴는 최대 3 개의 1 단계 메뉴가 포함되어 있으며 각 1 단계 메뉴에는 최대 5 개의 2 단계 메뉴가 포함되어 있습니다.
2. 첫 번째 레벨 메뉴에는 최대 4 명의 한자가 있으며 두 번째 레벨 메뉴에는 최대 7 자입니다. 추가 부품은 "..."로 대체됩니다.
3. 사용자 정의 메뉴를 작성한 후 메뉴 새로 고침 전략은 사용자가 공식 계정 세션 페이지 또는 공식 계정 프로필 페이지를 입력 할 때 메뉴를 가져 오는 마지막 요청이 5 분 전에 임명되면 메뉴를 가져옵니다. 메뉴가 업데이트되면 클라이언트의 메뉴가 새로 고침됩니다. 테스트 중에 공개 계정을 팔로우하고 다시 팔로우 할 수 있습니다.
창조 후 효과를 볼 수 있습니다.
사용자 정의 메뉴 인터페이스는 다음과 같이 여러 유형의 버튼을 구현할 수 있습니다.
1. 클릭 : 클릭하여 이벤트를 푸시하십시오
사용자가 클릭 유형 버튼을 클릭하면 WeChat 서버는 메시지 인터페이스를 통해 메시지 유형 이벤트의 구조를 개발자에게 푸시하고 (메시지 인터페이스 가이드 참조) 버튼에 개발자가 작성한 키 값을 가져옵니다. 개발자는 사용자 정의 된 키 값을 통해 사용자와 상호 작용할 수 있습니다.
2.보기 : 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 : 문자 메시지의 URL로 점프
사용자가 View_Limited 유형 버튼을 클릭하면 WeChat 클라이언트가 버튼의 개발자가 채워진 영구 자료 ID에 해당하는 그래픽 메시지 URL을 열 것입니다. 영구 자료 유형은 그래픽 메시지 만 지원합니다. 참고 : 영구 자료 ID는 "자재 관리/영구 자료 추가"인터페이스를 업로드 한 후 얻은 법적 ID 여야합니다.
2. 사용자 정의 메뉴 인터페이스에 액세스하십시오
1 : access_token을 얻으십시오
사용자 정의 메뉴의 생성, 쿼리 및 삭제에는 사용자 정의 메뉴 인터페이스를 공개 플랫폼에 열어야합니다. 이 인터페이스를 호출하려면 Access_Token (인터페이스 액세스 자격 증명)을 얻어야합니다. 이 인터페이스는 모두 HTTPS 프로토콜을 기반으로하므로 먼저 Java 프로그램에서 HTTPS 요청을 보내는 방법에 대한 문제를 해결해야합니다.
인터페이스 액세스 자격 증명 Access_Token :
ac
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=appid&secret=appsecret
링크에는 grant_type, appid 및 secret에 세 가지 매개 변수가 있습니다. 그림의 매개 변수 설명에 따르면 Grant_type는 고정 값 Client_Credential을 전달하고 사용자 정의 메뉴를 신청 한 후 weChat에 의해 AppId와 Secret을 할당합니다.
요청이 성공적으로 전송되면 WeChat 서버는 Access_Token 및 Frepires_in을 포함한 JSON 문자열을 반환합니다. 그중에서도 Access_token은 결국 필요한 자격 증명이며, Expires_in은 자격 증명의 유효 기간이며, 장치는 초이며 7200 초는 2 시간입니다. 즉, 특수 인터페이스에 액세스 할 때마다 Access_Token을 다시 접근해야하며 Access_Token이 여전히 유효 기간 내에있는 한 사용할 수 있습니다.
2 : 메뉴 작성
메뉴를 만들려면 메뉴 인터페이스를 호출하십시오
인터페이스 호출 요청 설명
http 요청 방법 : post (https 프로토콜 사용) https://api.weixin.qq.com/cgi-bin/menu/create?access_token=access_token
실제로, 주소에 게시물에 JSON 메뉴 문자열을 https://api.weixin.qq.com/cgi-bin/menu/create?access_token=access_token에 제출하는 것입니다.
3. 일반 요청 방법 (Custom Trust Manager) 캡슐화
메뉴를 만들려면 하나는 access_token 인터페이스를 얻고 다른 하나는 메뉴 인터페이스를 사용자 정의하는 것입니다. 둘 다 https 요청입니다.
1 : 인증서 신탁 관리자를 만듭니다
HTTPS 요청에는 인증서 신탁 관리자가 필요합니다. 이 관리자 클래스는 자체적으로 정의해야하지만 X509TrustManager 인터페이스를 구현해야합니다. 코드는 다음과 같습니다.
패키지 org.liufeng.weixin.util; java.security.cert.certificateException 가져 오기; Java.security.cert.x509Certificate 가져 오기; import javax.net.ssl.x509trustmanager; / ** * 인증서 신탁 관리자 (HTTPS 요청) * * @Author liufeng * @date 2013-08-08 */ public class myx509trustmanager 구현 x509trustmanager {public void checklientTrusted (x509certificate, string authtype) public void CheckServerTrusted (x509certificate [] chain, String authtype)는 증명서 exception {} public x509certificate [] getAcceptedIssuers () {return null; }} 인증서 관리자의 기능은 지정된 모든 인증서를 신뢰하는 것입니다.
2 : 범용 HTTPS 요청을 작성하십시오
범용 HTTPS 요청이 필요합니다
1) HTTPS 요청 지원;
2) 지원 받기 및 게시;
3) 매개 변수 제출을 지원하고 매개 변수도 지원하지 않습니다.
패키지 org.liufeng.weixin.util; import java.io.bufferedReader; import java.io.inputstream; import java.io.inputStreamReader; import java.io.outputStream; import java.net.connectException; import java.net.url; import javax.net.ssl.httpsurlconnection; import javax.net.ssl.sslcontext; import javax.net.ssl.sslsocketfactory; import javax.net.ssl.trustmanager; import net.sf.json.jsonobject; import org.slf4j.logger; org.slf4j.loggerfactory; / ** * 공개 플랫폼 일반 인터페이스 도구 클래스 * * @Author liuyq * @date 2013-08-09 */ public class weixinutil {private static logger log = loggerfactory.getLogger (weixinutil.class); / *** https 요청을 시작하고 결과를 얻습니다** @param requesturl 요청 주소 주소* @param requestod request method (get, post)* @param outputstr data* @return jsonobject (@return jsonobject (jsonobject.get)*/ public static jsonobject (string requesturl, string requestod, string requestod, string rithethod, strest). jsonobject jsonobject = null; StringBuffer buffer = new StringBuffer (); {// sslcontext 객체를 만들고 trustmanager [] tm = {new myx509trustmanager ()}; sslcontext sslcontext = sslcontext.getInstance ( "ssl", "sunjsse"); sslcontext.init (null, tm, new java.security.securerandom ()); // 위의 sslcontext 객체에서 sslsocketfactory 객체를 가져옵니다. sslsocketfactory ssf = sslcontext.getSocketFactory (); url url = 새 URL (requestUrl); httpsurlconnection httpurlconn = (httpsurlConnection) url.openConnection (); httpurlconn.setsslsocketfactory (SSF); httpurlconn.setdooutput (true); httpurlconn.setdoinput (true); httpurlconn.setusecaches (false); // 요청 메소드 설정 (get/post) httpurlconn.setRequestMethod (requestMethod); if ( "get".EqualSeignoreCase (requestMethod)) httpurlconn.connect (); // if (null! = outputstr) {outputStream outputStream = httpurlconn.getOutputStream (); // 중국어가 달린 outputStream.write (outputstr.getBytes ( "UTF-8"))를 방지하기 위해 인코딩 형식에주의를 기울입니다. outputStream.close (); } // 반환 된 입력 스트림을 문자열로 변환 inputStream inputStream = httpurlconn.getInputStream (); inputStreamReader inputStreamReader = new inputStreamReader (inputStream, "utf-8"); bufferedReader bufferedReader = new bufferedReader (inputStreamReader); 문자열 str = null; while ((str = bufferedReader.Readline ())! = null) {buffer.append (str); } bufferedReader.close (); inputStreamReader.close (); // 릴리스 리소스 inputStream.close (); inputStream = null; httpurlconn.disconnect (); jsonobject = jsonobject.fromobject (buffer.tostring ()); } catch (connectexception ce) {log.error ( "Weixin Server 연결 시간이 시작되었습니다."); } catch (예외 e) {log.error ( "https 요청 오류 : {}", e); } return JsonObject; }} 4. 캡슐화 메뉴 엔티티 클래스
1 : 버튼 분류
우리는 일반적으로 사용자 정의 메뉴 항목을 버튼으로 간주하며 버튼 유형은 클릭 (클릭 이벤트) 및보기 (웹 페이지 방문)로 나뉩니다.
클릭 유형의 버튼에는 세 가지 속성이 있습니다 : 유형, 이름 및 키, View 유형의 버튼에는 유형, 이름 및 URL의 세 가지 속성이 있습니다.
2 : 먼저 액세스 자격 증명 인터페이스를 호출 한 후 WeChat 서버는 JSON 형식으로 데이터를 반환합니다. { "access_token": "access_token", "expires_in": 7200}. AccessToken 객체로 캡슐화합니다. 객체에는 두 가지 속성이 있습니다 : 토큰과 만료, 코드는 다음과 같습니다.
패키지 org.liufeng.weixin.pojo; / ** * Wechat Universal Interface Credentials * * @author liufeng * @date 2013-08-08 */ public class accesstoken {// 획득 된 자격 증명 개인 문자열 토큰; // 자격 증명의 타당성 시간, 단위 : Seconds private int expiresin; public String getToken () {return 토큰; } public void settoken (문자열 토큰) {this.token = 토큰; } public int getExpiresin () {return expiresin; } public void setexpiresin (int expiresin) {this.expiresin = expiresin; }} 다음은 메뉴 구조의 캡슐화입니다. 객체 지향 프로그래밍을 사용하기 때문에 최종 제출 된 JSON 형식 메뉴 데이터는 많은 JSON 데이터를 프로그램 코드에 철자하는 대신 객체에서 직접 변환해야합니다. 메뉴 구조 캡슐화는 다음과 같이 공개 플랫폼 API 문서에 주어진 JSON 형식 메뉴 구조를 기반으로합니다.
클릭 및보기 요청의 예
{ "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": "view", "name": "비디오", "URL": "http://v.qq.com/"}, { "type": "click", "name": "like us", "key": "v1001_good"}}}}. 3 : 캡슐화 메뉴 구조
각 버튼 객체에는 공통 이름 속성이 필요하므로 버튼 객체 기본 클래스를 정의해야하며 모든 버튼 객체는이 클래스를 상속해야합니다. 기본 클래스의 코드는 다음과 같습니다.
패키지 org.liufeng.weixin.pojo; / ** * 버튼의 기본 클래스 * * @author liufeng * @date 2013-08-08 */ public 클래스 버튼 {개인 문자열 이름; 공개 문자열 getName () {return name; } public void setName (문자열 이름) {this.name = 이름; }} 다음은 하위 메뉴 항목의 캡슐화입니다. 하위 메뉴는 여기에서 다음과 같이 정의됩니다. 하위 메뉴가없는 메뉴 항목은 보조 메뉴 항목이거나 보조 메뉴가 포함되지 않은 기본 메뉴 일 수 있습니다. 이 유형의 하위 메뉴 항목에는 유형, 이름 및 키의 세 가지 속성이 포함되어야합니다. 캡슐화 된 코드는 다음과 같습니다.
패키지 org.liufeng.weixin.pojo; / ** * 일반 버튼 (subbutton) * * @author liufeng * @date 2013-08-08 */ public class commonButton 확장 버튼 {private String type; 개인 문자열 키; 공개 문자열 gettype () {return type; } public void settype (문자열 유형) {this.type = 유형; } public String getKey () {return 키; } public void setkey (문자열 키) {this.key = 키; }} 부모 메뉴 항목의 정의 : 보조 메뉴 항목이 포함 된 첫 번째 레벨 메뉴. 이 유형의 메뉴 항목에는 이름과 sub_button의 두 가지 속성이 포함되어 있으며 Sub_Button은 다양한 하위 메뉴 항목입니다. 상위 메뉴 항목의 캡슐화 코드는 다음과 같습니다.
패키지 org.liufeng.weixin.pojo; / ** * 복잡한 버튼 (부모 버튼) * * @author liufeng * @date 2013-08-08 */ public class complexbutton 확장 버튼 {private button [] sub_button; 공개 버튼 [] getsub_button () {return sub_button; } public void setsub_button (button [] sub_button) {this.sub_button = sub_button; }} 전체 메뉴를 캡슐화하십시오. 메뉴 객체에는 여러 메뉴 항목이 포함되어 있습니다 (최대 3 개). 이 메뉴 항목은 하위 메뉴 항목 (2 차 메뉴가없는 첫 번째 레벨 메뉴) 또는 상위 메뉴 항목 (2 차 메뉴가 포함 된 메뉴 항목) 일 수 있습니다.
패키지 org.liufeng.weixin.pojo; / ** * 메뉴 * * @author liufeng * @date 2013-08-08 */ public class 메뉴 {private button [] 버튼; 공개 버튼 [] getButton () {반환 버튼; } public void setButton (버튼 [] 버튼) {this.button = 버튼; }}이러한 방식으로 메뉴 엔티티 클래스의 캡슐화를 완료합니다.
자격 증명 access_token을 얻는 방법
인터페이스 액세스 자격 증명을 얻기 위해 이전 범용 요청 방법의 클래스 weixinutil.java에 다음 코드를 계속 추가하십시오.
// access_token (get)의 인터페이스 주소를 200 회 공개 최종 정적 문자열 access_token_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=appid&secret=appsecret"; / ** * get ac 문자열 requestUrl = access_token_url.replace ( "appid", appid) .replace ( "appsecret", appsecret); jsonobject jsonobject = httprequest (requestUrl, "get", null); // 요청이 성공한 경우 (null! = jsonobject) {try {accessToken = new AccessToken (); accessToken.setToken (jsonObject.getString ( "access_token")); AccessToken.setexpiresin (jsonobject.getint ( "expires_in")); } catch (jsonexception e) {accesstoken = null; // 토큰 log.error를 얻지 못했습니다 ( "Token errcode를 얻지 못했습니다 : {} errmsg : {}", jsonobject.getInt ( "errcode"), jsonObject.getString ( "errmsg")); }} return accessToken; } 사용자 정의 메뉴를 만드는 방법
이전 범용 요청 메소드의 클래스 weixinutil.java에 다음 코드를 계속 추가하여 사용자 정의 메뉴를 만듭니다.
// 메뉴 작성 (POST)은 100 회/일 공개 정적 문자열 메뉴 _create_url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=access_token"; / *** 메뉴 작성** @param 메뉴 메뉴 예* @Param AccessToken 유효한 access_token* @return 0 성공을 의미합니다. 다른 값은 실패를 나타냅니다*/ public static int createMenu (메뉴 메뉴, 문자열 액세스 톨) {int result = 0; // 생성 메뉴의 URL을 조립하십시오. 문자열 url = menu_create_url.replace ( "access_token", accessToken); // 메뉴 객체를 JSON 문자열로 변환하십시오. String jsonMenu = jsonObject.fromObject (Menu) .toString (); // 메뉴를 만들려면 인터페이스를 호출하여 jsonObject jsonObject = httprequest (url, "post", jsonmenu); if (null! = jsonobject) {if (0! = jsonobject.getInt ( "errcode")) {result = jsonobject.getInt ( "errcode"); log.error ( "create menu diured errcode : {} errmsg : {}", jsonobject.getint ( "errcode"), jsonobject.getString ( "errmsg")); }} 반환 결과; } 캡슐화 된 메소드를 호출하여 사용자 정의 메뉴를 생성합니다
패키지 org.liufeng.weixin.main; import org.liufeng.weixin.pojo.accesstoken; import org.liufeng.weixin.pojo.button; import org.liufeng.weixin.pojo.commonbutton; import org.liufeng.weixin.pojo.complexbutton; import org.liufeng.weixin.pojo.menu; import org.liufeng.weixin.util.weixinutil; import org.slf4j.logger; org.slf4j.loggerfactory; / ** * 메뉴 관리자 클래스 * * @author liufeng * @date 2013-08-08 */ public class menumanager {private static logger log = loggerfactory.getLogger (menumanager.class); public static void main (String [] args) {// 타사 사용자 고유 자격 증명 문자열 appid = "00000000000000000"; // 타사 사용자 고유 자격 증명 키 문자열 appSecret = "00000000000000000000000000000000000"; // ac if (null! = at) {// 인터페이스를 호출하여 int result = weixinutil.createmenu (getMenu (), at.getToken ()); // 메뉴 작성 결과를 결정합니다. else log.info ( "메뉴 작성 실패, 오류 코드 :" + 결과); }} / ** * 메뉴 데이터 조립 * * @return * / 개인 정적 메뉴 getMenu () {CommonButton Btn11 = New CommonButton (); btn11.setName ( "일기 예보"); btn11.settype ( "클릭"); btn11.setkey ( "11"); CommonButton BTN12 = New CommonButton (); btn12.setName ( "버스 쿼리"); btn12.settype ( "클릭"); btn12.setkey ( "12"); CommonButton BTN13 = New CommonButton (); btn13.setName ( "주변 검색"); btn13.settype ( "클릭"); btn13.setkey ( "13"); CommonButton BTN14 = New CommonButton (); btn14.setName ( "오늘 역사에서"); btn14.settype ( "클릭"); BTN14. 세트 키 ( "14"); CommonButton BTN21 = 새로운 CommonButton (); btn21.setName ( "Song On Demand"); btn21.settype ( "클릭"); btn21.setkey ( "21"); CommonButton BTN22 = 새로운 CommonButton (); btn22.setName ( "클래식 게임"); btn22.settype ( "클릭"); btn22.setkey ( "22"); CommonButton BTN23 = New CommonButton (); btn23.setName ( "아름다운 라디오"); btn23.settype ( "클릭"); btn23.setkey ( "23"); CommonButton BTN24 = New CommonButton (); btn24.setName ( "얼굴 인식"); btn24.settype ( "클릭"); btn24. 세트 키 ( "24"); CommonButton BTN25 = New CommonButton (); btn25. 세트 이름 ( "채팅"); btn25. 세트 타입 ( "클릭"); BTN25. 세트 키 ( "25"); CommonButton BTN31 = New CommonButton (); btn31.setName ( "Q Friends Circle"); btn31.settype ( "클릭"); btn31.setkey ( "31"); CommonButton BTN32 = New CommonButton (); btn32.setName ( "영화 순위"); btn32.settype ( "클릭"); btn32.setkey ( "32"); CommonButton BTN33 = New CommonButton (); btn33.setName ( "유머 농담"); btn33.settype ( "클릭"); btn33. 세트 키 ( "33"); complexbutton mainbtn1 = 새로운 complexbutton (); mainbtn1.setName ( "생명 조수"); mainbtn1.setsub_button (New CommonButton [] {btn11, btn12, btn13, btn14}); complexbutton mainbtn2 = 새로운 complexbutton (); mainbtn2.setName ( "럭키 스테이션"); mainbtn2.setsub_button (New CommonButton [] {btn21, btn22, btn23, btn24, btn25}); complexbutton mainbtn3 = 새로운 complexbutton (); mainbtn3.setName ( "더 많은 경험"); mainbtn3.setsub_button (New CommonButton [] {btn31, btn32, btn33}); /*** 이것은 공식 계정 XIAOQROBOT의 현재 메뉴 구조입니다. 각 첫 번째 레벨 메뉴에는 두 번째 레벨 메뉴 항목 * * 특정 첫 번째 레벨 메뉴에 두 번째 레벨 메뉴가없는 경우 메뉴를 어떻게 정의해야합니까? 예를 들어, 세 번째 레벨 원 메뉴 항목은 "더 많은 경험"이 아니지만 직접 "유머 농담"이므로 메뉴는 다음과 같이 정의되어야합니다. * Menu.setButton (새 버튼 [] {mainbtn1, mainbtn2, btn33}); */ 메뉴 메뉴 = 새 메뉴 (); menu.setButton (새 버튼 [] {mainbtn1, mainbtn2, mainbtn3}); 리턴 메뉴; }}참고 : 위의 코드를 실행할 때는 AppID 및 AppSecret을 자신의 공식 계정으로 바꿔야합니다.
메뉴 클릭 이벤트에 대한 응답
패키지 org.liufeng.course.service; import java.util.date; java.util.map import; import javax.servlet.http.httpservletrequest; import org.liufeng.course.message.resp.textmessage; import org.liufeng.course.util.messageUtil; / ** * 핵심 서비스 클래스 * * @author liufeng * @date 2013-05-20 */ public class coreservice {/ ** * wechat의 프로세스 요청 * * @param request */ public static string processRequest (httpservletRequest 요청) {String respmessage = null; 시도 {// 기본적으로 리턴 된 문자 메시지 컨텐츠 respContent = "요청 처리 예외, 시도하십시오!"; // xml 요청 구문 분석 맵 <string, String> requestmap = messageUtil.persexml (request); // sender ac // 공개 계정 문자열 touserName = requestMap.get ( "touserName"); // 메시지 유형 문자열 msgtype = requestMap.get ( "msgtype"); // 문자 메시지 텍스트 메신저에 응답 textMessage = new TextMessage (); TextMessage.setTounserName (FromuserName); TextMessage.setfromusername (tousername); TextMessage.setCreateTime (새 날짜 (). gettime ()); TextMessage.setmsgtype (MessageUtil.resp_message_type_text); TextMessage.setfuncflag (0); // 문자 메시지 if (msgtype.equals (messageutil.req_message_type_text)) {respcontent = "문자 메시지를 보내고 있습니다!"; } // 그림 메시지 else if (msgtype.equals (messageutil.req_message_type_image)) {respcontent = "이미지 메시지를 보내고 있습니다!"; } // 지리적 위치 메시지 else if (msgtype.equals (messageutil.req_message_type_location)) {respcontent = "지리적 위치 메시지를 보내고 있습니다!"; } // 링크 메시지 else if (msgtype.equals (messageutil.req_message_type_link)) {respcontent = "링크 메시지를 보내고 있습니다!"; } // 오디오 메시지 else if (msgtype.equals (messageutil.req_message_type_voice)) {respcontent = "오디오 메시지를 보내고 있습니다!"; } // 이벤트 푸시 if (msgtype.equals (messageUtil.Req_Message_Type_event)) {// 이벤트 유형 string eventType = requestMap.get ( "event"); // if (eventType.equals (messageUtil.event_type_subscribe)) {respcontent = "주의를 기울여 주셔서 감사합니다!"; } // oustcribe else if (evirpe.equals (messageutil.event_type_unsubscribe))) {// undubscribe 후, 사용자는 공식 계정에서 보낸 메시지를받을 수 없으므로 메시지에 응답 할 필요가 없습니다} // eventType.equals (messageUtil.equals ky value) {equit _ kype value)}). 사용자 정의 메뉴 문자열을 만들 때 지정된 EventKey = requestMap.get ( "EventKey"); if (eventkey.equals ( "11")) {respcontent = "일기 예보 메뉴 항목이 클릭됩니다!"; } else if (eventkey.equals ( "12")) {respcontent = "버스 쿼리 메뉴 항목이 클릭되었습니다!"; } else if (eventkey.equals ( "13")) {respcontent = "주변 검색 메뉴 항목이 클릭됩니다!"; } else if (eventkey.equals ( "14")) {respcontent = "역사의 메뉴 항목이 클릭되었습니다!"; } else if (eventkey.equals ( "21")) {respcontent = "노래의 노래 메뉴 항목이 클릭됩니다!"; } else if (eventkey.equals ( "22")) {respcontent = "클래식 게임 메뉴 항목이 클릭됩니다!"; } else if (eventkey.equals ( "23")) {respcontent = "뷰티 라디오 메뉴 항목이 클릭되었습니다!"; } else if (eventkey.equals ( "24")) {respcontent = "얼굴 인식 메뉴 항목이 클릭됩니다!"; } else if (eventkey.equals ( "25")) {respcontent = "채팅 메뉴 항목이 클릭됩니다!"; } else if (eventkey.equals ( "31")) {respcontent = "Q 서클 메뉴 항목이 클릭되었습니다!"; } else if (eventkey.equals ( "32")) {respcontent = "영화 순위 메뉴 항목이 클릭됩니다!"; } else if (eventkey.equals ( "33")) {respcontent = "유머 농담 메뉴 항목이 클릭됩니다!"; }}} textMessage.setContent (respcontent); respmessage = messageutil.textmessagetoxml (TextMessage); } catch (예외 e) {e.printstacktrace (); } return respmessage; }}위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.