Das benutzerdefinierte Menü der öffentlichen Plattform WeChat Development erfordert, dass Geld zertifiziert werden soll. Wenn Sie kein Geld ausgeben möchten, können Sie nur mit dem Testkonto spielen, dies hat jedoch keine Auswirkungen auf die Entwicklung. Meine Entwicklung basiert auf der Anwendungsentwicklung der Wechat Public Platform von Lehrer Liu Feng.
Solange wir die öffentliche Plattform verwenden, um das Konto zu testen, können wir ein benutzerdefiniertes Menü entwickeln. Es ist bequemer. Das Testkonto verfügt über viele Schnittstellen, was sehr bequem ist.
Bei der Entwicklung eines benutzerdefinierten Menüs können Sie sich auf das benutzerdefinierte Menü in der Dokumentation der WeChat Public Platform Developer verweisen, um es zu erstellen.
1. Menü anpassen
1. Sonderangehörige sind bis zu 3 Menüs erster Stufe, und jedes Menü der ersten Ebene enthält bis zu 5 Menüs auf der zweiten Ebene.
2. Das Menü der ersten Stufe hat bis zu 4 chinesische Charaktere, und das Menü auf der zweiten Stufe hat bis zu 7 chinesische Charaktere. Die zusätzlichen Teile werden durch "..." ersetzt.
3. Nachdem die Menü -Aktualisierungsstrategie ein benutzerdefiniertes Menü erstellt hat, ist es, wenn der Benutzer die offizielle Account -Sitzungsseite oder die offizielle Kontoprofilseite eingibt. Wenn er feststellt, dass die letzte Anfrage zum Abziehen des Menüs vor 5 Minuten das Menü abzieht. Wenn das Menü aktualisiert wird, wird das Menü des Kunden aktualisiert. Während des Tests können Sie versuchen, das öffentliche Konto nicht zu folgen und ihm erneut zu folgen
Sie können den Effekt nach der Erstellung sehen.
Die benutzerdefinierte Menüschnittstelle kann wie folgt mehrere Schaltetypen implementieren:
1. Klicken Sie Klicken: Klicken Sie, um das Ereignis zu überschreiten
Nachdem der Benutzer auf die Schaltfläche "Klicken" klicken, drückt der WeChat -Server die Struktur des Nachrichten -Typ -Ereignisses über die Nachrichtenschnittstelle (siehe Message Interface Guide) und bringt den vom Entwickler ausgefüllten Schlüsselwert in die Schaltfläche. Der Entwickler kann über den benutzerdefinierten Schlüsselwert mit dem Benutzer interagieren.
2. Blick: Jump URL
Nachdem der Benutzer auf die Schaltfläche "Ansichtstyp" geklickt hat, öffnet der WeChat -Client die vom Entwickler in der Schaltfläche ausgefüllte Webseiten -URL, die mit der Webseitenberechtigung kombiniert werden kann, um die grundlegende Informationsschnittstelle für Benutzer zu erhalten, um Benutzer grundlegende Informationen zu erhalten.
3.. Scancode_push: Scannen Sie den Code, um das Ereignis zu überschreiten
Nachdem der Benutzer auf die Schaltfläche geklickt hat, ruft der WeChat -Client das Scan -Tool auf und zeigt das Scan -Ergebnis nach Abschluss des Scanvorgangs an (wenn es sich um eine URL handelt, wird die URL eingegeben), und das Scan -Ergebnis wird an den Entwickler weitergegeben und der Entwickler kann eine Nachricht senden.
4.. Scancode_waitmsg: Scannen Sie den Code, um das Ereignis zu drücken, und das Eingabeaufforderung "Message Receiping" wird angezeigt
Nachdem der Benutzer auf die Schaltfläche geklickt hat, ruft der WeChat -Client das Scan -Tool auf. Übergeben Sie nach Abschluss des Scan -Code -Vorgangs das Ergebnis des Scan -Code an den Entwickler. Gleichzeitig ist das Scan -Tool geschlossen, und das Eingabeaufforderung "Message Receip" wird angezeigt, und dann kann eine vom Entwickler gesendete Nachricht empfangen werden.
5. PIC_SYSPHOTO: Popup-System zum Aufnehmen von Fotos und Postbildern
Nachdem der Benutzer auf die Schaltfläche geklickt hat, passt der WeChat -Client die Systemkamera an. Nach Abschluss des Fotovorgangs wird die erfassten Fotos an den Entwickler gesendet und das Ereignis an den Entwickler übergeben. Gleichzeitig wird die Systemkamera gehalten und dann eine vom Entwickler gesendete Nachricht erhalten.
6. PIC_PHOTO_OR_ALBUM: Pop Up und machen Sie Bilder oder posten Sie Bilder auf dem Album
Nachdem der Benutzer auf die Schaltfläche geklickt hat, wird der WeChat -Client den Selektor für den Benutzer veröffentlicht, um "ein Foto aufnehmen" oder "Aus dem Handy -Album auswählen" auszuwählen. Nachdem der Benutzer ausgewählt hat, wird er die beiden anderen Prozesse durchlaufen.
7. PIC_WIXIN: Pop-up WeChat Fotoalbum Sender
Nachdem der Benutzer auf die Schaltfläche geklickt hat, passt der WeChat -Client das WeChat -Album an. Nach Abschluss des Auswahlvorgangs wird das ausgewählte Foto an den Server des Entwicklers gesendet und das Ereignis an den Entwickler übertragen. Gleichzeitig wird das Album geschlossen. Anschließend kann eine Nachricht vom Entwickler empfangen werden.
8. location_select: Pop-up-Geolocation-Selektor
Nachdem der Benutzer auf die Schaltfläche geklickt hat, ruft der WeChat -Client das Geolocation -Auswahl -Tool auf. Nach Abschluss des Auswahlvorgangs sendet er den ausgewählten geografischen Standort an den Server des Entwicklers und schließt gleichzeitig das Tool zur Auswahl des Standorts und erhält dann eine vom Entwickler gesendete Nachricht.
9. Media_id: Senden Sie eine Nachricht (außer einer Textnachricht)
Nachdem der Benutzer auf die Schaltfläche "Media_id -Typ" geklickt hat, sendet der WeChat -Server das Material, das der permanenten materiellen ID entspricht, vom Entwickler an den Benutzer. Die dauerhaften Materialtypen können Bilder, Audio-, Video- und Grafiknachrichten sein. Bitte beachten Sie: Die dauerhafte Material -ID muss die rechtliche ID sein, die nach dem Hochladen der Schnittstelle "Materialverwaltung/Hinzufügen von dauerhaftem Material hinzufügen" erhalten wurde.
10. View_Limited: Springe zur URL der Textnachricht
Nachdem der Benutzer auf die Schaltfläche "View_Limited" geklickt hat, öffnet der WeChat -Client die URL der grafischen Nachricht, die der vom Entwickler in der Schaltfläche ausgefüllten permanenten materiellen ID entspricht. Der dauerhafte Materialtyp unterstützt nur eine grafische Nachricht. Bitte beachten Sie: Die dauerhafte Material -ID muss die rechtliche ID sein, die nach dem Hochladen der Schnittstelle "Materialverwaltung/Hinzufügen von dauerhaftem Material hinzufügen" erhalten wurde
2. Greifen Sie auf die benutzerdefinierte Menüschnittstelle zu
1: Holen Sie sich Access_Token
Die Erstellung, Abfrage und Löschung von benutzerdefinierten Menüs erfordern das Aufrufen der benutzerdefinierten Menüschnittstelle für die öffentliche Plattform. Um diese Schnittstelle aufzurufen, müssen Sie Access_Token (Schnittstellenzugriffsanmeldeinformationen) erhalten. Diese Schnittstellen basieren alle auf dem HTTPS -Protokoll. Daher müssen wir zuerst das Problem lösen, wie HTTPS -Anfragen in Java -Programmen gesendet werden.
Holen Sie sich die Schnittstellenzugriffsanmeldeinformationen Access_Token:
Access_Token zu erhalten wird durch GET zugegriffen:
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=appid&secret=appsecret
Der Link enthält drei Parameter, nämlich Grant_type, Appid und Secret. Gemäß der Parameterbeschreibung in der Abbildung übergibt Grant_type das feste Wert client_credential, und Appid und Secret werden uns nach der Bewerbung für das benutzerdefinierte Menü von WeChat zugewiesen.
Nachdem die Anfrage erfolgreich gesendet wurde, gibt der WeChat -Server eine JSON -Zeichenfolge zurück, einschließlich Access_Token und Excres_in. Unter ihnen ist Access_Token der Anmeldeinformator, den wir am Ende benötigen, und läuft ab. Dies bedeutet, dass Sie nicht jedes Mal, wenn Sie auf eine spezielle Schnittstelle zugreifen, die Access_Token wieder aufnehmen müssen, und sie kann verwendet werden, solange sich der Access_Token noch innerhalb der Gültigkeitszeit befindet.
2: Menüerstellung
Um ein Menü zu erstellen, rufen Sie die Menüschnittstelle an
Schnittstellenanforderungsanforderung Beschreibung
HTTP-Anforderungsmethode: Post (Bitte verwenden Sie das HTTPS-Protokoll) https://api.weixin.qq.com/cgi-ner/menu/create?access_token=access_token
In der Tat soll eine JSON-Menüzeichenfolge in Post an die Adresse https://api.weixin.qq.com/cgi-bin/menu/create?access_token=access_Token einreichen.
3.. Kapitulieren Sie die allgemeine Anforderungsmethode (benutzerdefinierter Trust Manager).
Um ein Menü zu erstellen, müssen Sie die Schnittstelle von Access_Token und der anderen zum Anpassen der Menüschnittstelle erhalten. Beide sind HTTPS -Anforderungen.
1: Erstellen Sie einen Certificate Trust Manager
Für HTTPS -Anfragen benötigen wir einen Certificate Trust Manager. Diese Managerklasse muss von selbst definiert werden, muss jedoch die X509Trustmanager -Schnittstelle implementieren. Der Code ist wie folgt:
Paket org.liufeng.weixin.util; Java.security.cert.CertificateException; import Java.security.cert.x509certificate; importieren javax.net.ssl.x509trustmanager; /** * Certificate trust manager (for https requests) * * @author liufeng * @date 2013-08-08 */ public class MyX509TrustManager implements X509TrustManager { public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { } public void checkServerTrusted(X509Certificate[] chain, String authType) löst CertificateException {} public x509Certificate [] getAcceptEDISSUERS () {return null; }} Die Funktion des Zertifikatmanagers besteht darin, allen angegebenen Zertifikaten zu vertrauen.
2: Erstellen Sie eine universelle HTTPS -Anfrage
Universelle HTTPS -Anfrage sollte
1) Unterstützung von HTTPS -Anfragen;
2) Unterstützung und Post;
3) Unterstützung der Parametereinreichung und auch keine Parameter;
Paket org.liufeng.weixin.util; Import Java.io.BufferedReader; importieren java.io.inputstream; importieren java.io.inputStreamReader; importieren java.io.outputstream; importieren java.net.connectException; importieren java.net.url; importieren javax.net.ssl.httpSurlConnection; importieren javax.net.ssl.sslcontext; importieren javax.net.ssl.sslsocketfactory; importieren javax.net.ssl.trustmanager; import net.sf.json.jsonObject; import org.slf4j.logger; import org.slf4j.loggerfactory; / ** * öffentliche Plattform Allgemeine Schnittstellen-Toolklasse * * @Author Liuyq * @date 2013-08-09 */ public class weixinutil {private static logger logger loggerfactory.getLogger (wixinutil.class); / *** Initiieren Sie die HTTPS -Anforderung und erhalten Sie das Ergebnis** @param Requesturl Request Adresse* @Param RequestMethod Request -Methode (GET, post)* @param outputStr gesenkte Daten* @Return jsonObject (Holen Sie sich den Attributwert des JSON -Objekts über JSONObject.get (Schlüssel)*/ public staticjson -Json -Json -Json -Json -Json -Json -Json -Json -Json -Json -Json -Json -Json -Json -Json -Json -Json -Json -Json -Sting -Json -Sting -Action (-Ston -OtputStaton). JsonObject = null; StringBuffer Buffer = new StringBuffer (); Versuchen Sie {// Erstellen Sie ein SSLContext -Objekt und initialisieren Sie TreuhandManager [] tm = {new myx509Trustmanager ()}; SSLContext SSLContext = SSLContext.getInstance ("SSL", "Sunjsse"); SSLContext.init (Null, TM, New Java.security.securerandom ()); // das SSLSOCKETFACTORY -Objekt aus dem obigen SSLContext -Objekt SSLSOCKETFACTORY SSF = SSLCONTEXT.GetSocketFactory () abrufen; URL URL = neue URL (Requesturl); HttpsurlConnection httpurlconn = (httpsurlConnection) url.openconnection (); httpurlconn.setsSlsocketFactory (SSF); httpurlconn.setDooutput (true); httpurlconn.setDoInput (true); httpurlconn.SetUSecaches (falsch); // Anforderungsmethode festlegen (get/post) httpurlconn.setRequestMethod (RequestMethod); if ("get" .EqualSignoreCase (requestMethod)) httpurlconn.connect (); // Wenn Daten vorhanden sind, müssen if (null! // Achten Sie auf das Codierungsformat, um den chinesischen verstümmelten optimalstream.write (outputstr.getBytes ("utf-8") zu verhindern; outputStream.close (); } // den zurückgegebenen Eingabestream in einen String InputStream inputStream = httpurlconn.getInputStream () konvertieren; InputStreamReader InputStreamReader = New InputStreamReader (InputStream, "UTF-8"); BufferedReader bufferedReader = neuer BufferedReader (InputStreamReader); String str = null; while ((str = bufferedReader.readline ())! = null) {buffer.append (str); } bufferedReader.close (); InputStreamReader.CLOSE (); // Ressourceneingabetream freigeben.CLOSE (); inputStream = null; httpurlconn.disconnect (); JsonObject = jsonObject.fromObject (buffer.toString ()); } catch (ConnectException CE) {log.Eror ("Wixin Server -Verbindung zeitlich festgelegt."); } catch (Ausnahme e) {log.Error ("Https Anfrage -Fehler: {}", e); } return JsonObject; }} 4. Die Menüentitätsklasse verkapulieren
1: Klassifizierung von Tasten
Normalerweise betrachten wir benutzerdefinierte Menüelemente als Schaltflächen, und die Schaltetypen sind in Klick (Klicken Sie auf Ereignis) und anzeigen (Besuchen Sie Webseiten).
Schaltflächen des Klick -Typs haben drei Attribute: Typ, Name und Taste, während Schaltflächen des Ansichtstyps drei Attribute haben: Typ, Name und URL
2: Erstens wird der WeChat -Server nach dem Aufrufen der Access -Anmeldeinformationsschnittstelle Daten im JSON -Format zurückgibt: {"Access_Token": "Access_Token", "expires_in": 7200}. Wir verkapulieren es als AccessToken -Objekt. Das Objekt hat zwei Attribute: Token und Ablauf, der Code ist wie folgt:
Paket org.liufeng.weixin.pojo; / ** * WeChat Universal Interface Anmeldeinformationen * * @Author Liufeng * @date 2013-08-08 */ public class AccessToken {// Die erhaltenen Anmeldeinformationen privat String Token; // Die Gültigkeitszeit der Anmeldeinformationen, Einheit: Sekunden private int läuft ab; public String gettoken () {return token; } public void setzte (String token) {this.token = token; } public int getExpiresin () {return läuft aus; } public void setExpiressin (int expiresin) {this.expiresin = expiresin; }} Als nächstes kommt die Einkapselung der Menüstruktur. Da wir objektorientierte Programmierungen verwenden, sollten die endgültigen Menüdaten des JSON-Formats direkt aus dem Objekt konvertiert werden, anstatt viele JSON-Daten in den Programmcode zu informieren. Die Einkapselung der Menüstruktur basiert auf der Menüstruktur der JSON -Format, die im API -Dokument der öffentlichen Plattform angegeben ist, wie unten gezeigt:
Beispiel für die Anfrage für Klick und Ansicht
{ "button":[ { "type":"click", "name":"Today's song", "key":"V1001_TODAY_MUSIC" }, { "name":"menu", "sub_button":[ { "type":"view", "name":"search", "url":"http://www.soso.com/" }, { "Typ": "Ansicht", "Name": "Video", "url": "http://v.qq.com/"}, {"Typ": "Klicken Sie", "Name": "Like Us", "Key": "v1001_good"}]}]}}}}}}} 3: Einkapselungsmenüstruktur
Jedes Schaltflächenobjekt benötigt ein gebräuchliches Namensattribut, sodass eine Schaltflächenobjektbasisklasse definiert werden muss, und alle Tastenobjekte müssen diese Klasse erben. Der Code der Basisklasse lautet wie folgt:
Paket org.liufeng.weixin.pojo; / ** * Basisklasse der Schaltfläche * * @Author Liufeng * @date 2013-08-08 */ public cass button {private Zeichenfolge Name; public String getName () {return name; } public void setName (String -Name) {this.name = name; }} Als nächstes kommt die Einkapselung des Untermenüelements. Das Untermenü ist hier wie folgt definiert: Ein Menüelement ohne Untermenü kann ein sekundäres Menüelement oder ein Primärmenü sein, das kein sekundäres Menü enthält. Diese Art von Untermenü muss drei Attribute enthalten: Typ, Name und Schlüssel. Der eingekapselte Code lautet wie folgt:
Paket org.liufeng.weixin.pojo; / ** * Normale Schaltfläche (Subbutton) * * @author liufeng * @date 2013-08-08 */ public class CommonButton Extends Button {private String-Typ; privater Stringschlüssel; public String gettType () {return type; } public void setType (String -Typ) {this.type = type; } public String getKey () {return key; } public void setKey (String -Schlüssel) {this.key = key; }} Definition des Menüpunkts der Eltern: Ein Menü erster Ebene mit sekundären Menüelementen. Diese Art von Menüelementen enthält zwei Eigenschaften: Name und Sub_Button, und Sub_Button ist ein Array von Untermenüelementen. Der Kapselungscode des übergeordneten Menüelements lautet wie folgt:
Paket org.liufeng.weixin.pojo; / ** * komplexe Schaltfläche (übergeordnete Taste) * * @Author Liufeng * @date 2013-08-08 */ Public Class Complex Button Extends Button {private Button [] sub_button; public button [] getsub_button () {return sub_button; } public void setSub_button (button [] sub_button) {this.sub_button = sub_button; }} Einkapseln Sie das gesamte Menü. Das Menüobjekt enthält mehrere Menüelemente (es kann höchstens 3 sein). Diese Menüelemente können untermenüe Elemente (Menü der ersten Ebene ohne sekundäre Menüs) oder übergeordnete Menüelemente (Menüelemente mit Sekundärmenüs) sein.
Paket org.liufeng.weixin.pojo; / ** * Menü * * @Author Liufeng * @date 2013-08-08 */ Public Class Menü {private Schaltfläche [] Button; public button [] getbutton () {return button; } public void setButton (button [] button) {this.button = button; }}Auf diese Weise vervollständigen wir die Einkapselung der Menüeinheitskurs.
So erhalten Sie Anmeldeinformationen Access_Token
Fügen Sie weiterhin den folgenden Code zur Klasse weixinutil.java der vorherigen Universal Request -Methode hinzu, um Schnittstellenzugriffsanmeldeinformationen zu erhalten:
// Die Schnittstellenadresse von Access_Token (GET) erhalten auf das 200-mal/Tag öffentliche endgültige statische String Access_Token_url = "https://api.wexin.qqq.com/cgi-bin/token?grant_type=client_credential&appid=appid&secret=appseScret"; / ** * access_token erhalten * * @param Appid Anmeldeinformationen * @param AppSecret Key * @return */ public static AccessToken getAccessToken (String Appid, String Appsecret) {AccessToken AccessToken AccessToken = null; String Requesturl = Access_Token_url.replace ("Appid", Appid) .Replace ("AppSecret", Appsecret); JsonObject jsonObject = httprequest (Requesturl, "get", null); // Wenn die Anfrage erfolgreich ist, wenn (null! = JsonObject) {try accessToken = new AccessToken (); AccessToken.Settoken (jsonObject.getString ("Access_Token")); accessToken.setExpiressin (jsonObject.getInt ("expires_in")); } catch (jSonexception e) {accessToken = null; // versäumt es, Token log.Error zu erhalten ("" Es wurde nicht, Token Errcode zu erhalten: {} errmsg: {} ", jsonObject.getInt (" errcode "), jsonObject.getString (" errmsg "); }} return accessToken; } So erstellen Sie ein benutzerdefiniertes Menü
Fügen Sie weiterhin den folgenden Code zur Klasse weixinutil.java der vorherigen Universal Request -Methode hinzu, um ein benutzerdefiniertes Menü zu erstellen:
// Menüerstellung (Post) Limitiert auf 100 Mal/Tag public static String msu_create_url = "https://api.weixin.qqq.com/cgi-bin/menu/create?access_token=access_token"; / *** Menü erstellen** @Param Menümenü // Die URL der Erstellungsmenü -String -Zeichenfolge montieren. // Menüobjekt in JSON String String jsonMenu = jsonObject.fromObject (Menü) .ToString (); // Rufen Sie die Schnittstelle an, um das Menü JsonObject JsonObject = httprequest (URL, "Post", JsonMenu); if (null! = jsonObject) {if (0! log.Error ("Menü erstellen fehlgeschlagener ErrCode: {} errmsg: {}", jsonObject.getInt ("errcode"), jsonObject.getString ("errmsg"); }} Rückgabeergebnis; } Rufen Sie eingekapselte Methoden an, um benutzerdefinierte Menüs zu erstellen
Paket 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; import org.slf4j.loggerfactory; / ** * Menü Manager-Klasse * * @author liufeng * @date 2013-08-08 */ public class Menumanager {private statische Logger log = loggerfactory.getLogger (menumanager.class); public static void main (String [] args) {// Benutzer Drittanbieter eindeutig Anmeldeinformationen String appid = "00000000000000000"; // Benutzer von Drittanbietern eindeutiger Anmeldeinformationen Key String Appsecret = "00000000000000000000000000000000000"; // Rufen Sie die Schnittstelle an, um Access_Token AccessToken at = wixinutil.getAccessToken (AppSecret) zu erhalten; if (null! // Bestimmen Sie das Ergebnis der Menüerstellung, wenn (0 == Ergebnis) log.info ("Menüerstellung erfolgreich!"); sonst log.info ("Menüerstellung fehlgeschlagen, Fehlercode:" + Ergebnis); }} / ** * Menüdaten zusammenstellen * * @return * / privates statisches Menü getMenu () {CommonButton btn11 = new CommonButton (); btn11.setName ("Wettervorhersage"); Btn11.SetType ("Click"); btn11.setKey ("11"); CommonButton Btn12 = neuer CommonButton (); BTN12.SetName ("Bus -Query"); BTN12.SetType ("Click"); BTN12.SetKey ("12"); CommonButton Btn13 = neuer CommonButton (); BTN13.SetName ("periphere Suche"); BTN13.SetType ("Click"); BTN13.SetKey ("13"); CommonButton Btn14 = neuer CommonButton (); btn14.setName ("heute in der Geschichte"); BTN14.SetType ("Click"); btn14.setKey ("14"); CommonButton Btn21 = neuer CommonButton (); btn21.setName ("Song on Demand"); BTN21.SetType ("Click"); Btn21.SetKey ("21"); CommonButton Btn22 = neuer CommonButton (); BTN22.SetName ("Classic Game"); BTN22.SetType ("Click"); BTN22.SetKey ("22"); CommonButton Btn23 = neuer CommonButton (); Btn23.SetName ("schönes Radio"); BTN23.SetType ("Click"); BTN23.SetKey ("23"); CommonButton Btn24 = neuer CommonButton (); Btn24.SetName ("Gesichtserkennung"); BTN24.SetType ("Click"); BTN24.SetKey ("24"); CommonButton Btn25 = neuer CommonButton (); Btn25.setName ("Chat -Chat"); BTN25.SetType ("Click"); Btn25.setKey ("25"); CommonButton Btn31 = neuer CommonButton (); Btn31.SetName ("Q Friends Circle"); Btn31.SetType ("Click"); btn31.setKey ("31"); CommonButton Btn32 = neuer CommonButton (); Btn32.SetName ("Filmranking"); Btn32.SetType ("Click"); Btn32.setKey ("32"); CommonButton Btn33 = neuer CommonButton (); Btn33.SetName ("humorvoller Witz"); BTN33.SetType ("Click"); Btn33.SetKey ("33"); ComplexButton MainBtn1 = neuer Komplexbutton (); MainBTN1.SetName ("Life Assistant"); MainBTN1.SetsUB_Button (neuer CommonButton [] {Btn11, Btn12, Btn13, Btn14}); ComplexButton MainBTN2 = neuer Komplexbutton (); MainBtn2.SetName ("Lucky Station"); MainBtn2.Setsub_Button (neuer CommonButton [] {Btn21, Btn22, Btn23, Btn24, Btn25}); ComplexButton MainBtn3 = neuer Komplexbutton (); MainBtn3.SetName ("Mehr Erfahrung"); MainBtn3.Setsub_Button (neuer CommonButton [] {Btn31, Btn32, Btn33}); /*** Dies ist die aktuelle Menüstruktur des offiziellen Kontos xiaoqrobot. Jedes Menü erster Ebene hat einen Menüpunkt auf zweiter Ebene * * Wenn unter einem bestimmten Menü der ersten Stufe kein Menü auf zweiter Ebene steht, wie sollte das Menü definiert werden? * Zum Beispiel ist der Menüelement der dritten Stufe 1 nicht "mehr Erfahrung", sondern direkt "Humor -Witz", dann sollte das Menü so definiert werden: * Menü */ Menü Menü = neues Menü (); Menü Rückgabemenü; }}Hinweis: Beim Ausführen des oben genannten Code müssen Sie die Appid und den AppSecret durch Ihr eigenes offizielles Konto ersetzen.
Antwort auf das Menü Klicken Sie auf Ereignis
Paket org.liufeng.course.service; import Java.util.date; import Java.util.map; importieren javax.servlet.http.httpServletRequest; import org.liufeng.course.message.resp.textMessage; import org.liufeng.course.util.messageUtil; / ** * CORE Service Class * * @Author Liufeng * @date 2013-05-20 */ öffentliche Klasse Coreservice {/ ** * Prozessanfragen von WeChat * * @param Anfrage * @return */ public static String processRequest (httpServletRequestanfrage) {String Respmessage = null; Versuchen Sie {// Der inhaltliche SMS -Inhalt, der standardmäßig Zeichenfolge respcontent = "Beantragung von Ausnahme, bitte versuchen Sie!"; // XML Anfrage Anfrage Parsing Map <String, String> RequestMap = MessageUtil.Parsexml (Request); // Absenderkonto (open_id) String von renername = requestmap.get ("fromUserername"); // Public Account String tousername = requestmap.get ("tousername"); // Nachrichtentyp String msgType = requestmap.get ("msgType"); // auf Textnachricht textMessage textMessage = new textMessage () antworten; textMessage.settousername (fromuername); textMessage.setFromusername (tousername); textMessage.setCreateTime (neues Datum (). GetTime ()); textMessage.setmsgType (messageUtil.resp_message_type_text); textMessage.setfuncflag (0); // Textnachricht if (msgType.equals (messageUtil.req_message_type_text)) {respcontent = "Sie senden eine Textnachricht!"; } // Bildnachricht else if (msgType.equals (messageUtil.req_message_type_image)) {respcontent = "Sie senden eine Bildnachricht!"; } // Geografische Standortnachricht else if (msgType.equals (messageutil.req_message_type_location)) {respcontent = "Sie senden eine geografische Standortnachricht!"; } // Link -Nachricht else if (msgType.equals (messageUtil.req_message_type_link)) {respcontent = "Sie senden eine Link -Nachricht!"; } // Audio -Nachricht else if (msgType.equals (messageutil.req_message_type_voice)) {respcontent = "Sie senden eine Audio -Nachricht!"; } // Ereignisschub sonst if (msgType.equals (messageUtil.req_message_type_event)) {// Ereignisstyp String eventType = RequestMap.get ("Ereignis"); // abonnieren Sie (eventType.equals (messageUtil.event_type_subscribe)) {respcontent = "Danke für Ihre Aufmerksamkeit!"; } // Abzünden Sie sonst (EventType.equals (messageUtil.event_type_unsubscribe) {// Todo nach Abbestellen kann der Benutzer die Nachricht nicht empfangen, dass die vom offizielle Konto gesendete Nachricht gesendet wird. Wert angegeben beim Erstellen des benutzerdefinierten Menü String EreignisKey = Requestmap.get ("EventKey"); if (eventKey.equals ("11")) {respcontent = "Wettervorhersage werden geklickt!"; } else if (eventKey.equals ("12") {respcontent = "Der Menüpunkt des Busabfrage wird geklickt!"; } else if (eventKey.equals ("13") {respcontent = "Der Menüelement Peripheral Such wird geklickt!"; } else if (eventKey.equals ("14") {respcontent = "Der Menüelement im Verlauf wurde geklickt!"; } else if (eventKey.equals ("21") {respcontent = "Der Menüpunkt des Songs on Demand wird geklickt!"; } else if (eventKey.equals ("22") {respcontent = "Der Menüpunkt des klassischen Spiels wird geklickt!"; } else if (eventKey.equals ("23") {respcontent = "Der Schönheitsradio -Menüpunkt wurde geklickt!"; } else if (eventKey.equals ("24") {respcontent = "Der Menüelement des Gesichtserkennung wird geklickt!"; } else if (eventKey.equals ("25")) {respcontent = "Der Menüpunkt der Chat wird geklickt!"; } else if (eventKey.equals ("31") {respcontent = "Das Menüelement des Q -Kreises wurde geklickt!"; } else if (eventKey.equals ("32") {respcontent = "Der Menüelement des Filmrankings wird geklickt!"; } else if (eventKey.equals ("33") {respcontent = "Der Menüpunkt des Humor -Witzes wird geklickt!"; }}} textMessage.setContent (respcontent); respMessage = messageUtil.textMessAgetoxml (TextMessage); } catch (Ausnahme e) {e.printstacktrace (); } return respMessage; }}Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.