1. Passen Sie die Menübeschreibung und den Schaltetyp an
1. Menübeschreibung
1) Die benutzerdefinierten Menüs umfassen bis zu 3 Menüs erster Ebene, 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ü der zweiten Stufe hat bis zu 7 chinesische Charaktere. Die zusätzlichen Teile werden durch "..." ersetzt.
3) Nachdem ein benutzerdefiniertes Menü erstellt wurde, ist die Menü -Aktualisierungsstrategie, dass wenn der Benutzer die offizielle Kontoseite 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, und Sie können den Effekt nach der Erstellung sehen.
2. Benutzerdefinierte Menüschnittstelle kann mehrere Tastenypen implementieren
1) Klicken Sie: Nachdem der Benutzer beim Klicken auf das Drücken von Ereignis auf die Schaltfläche TYPE auf die Schaltfläche Klicken klickt, drückt der WeChat -Server die Struktur des Nachrichtentyp -Ereignisses über die Nachrichtenschnittstelle (siehe Message Interface Guide) und bringen Sie den vom Entwickler ausgefüllten Schlüsselwert in der Schaltfläche. Der Entwickler kann über den benutzerdefinierten Schlüsselwert mit dem Benutzer interagieren.
2) Ansicht: Jump URL Nachdem der Benutzer auf die Schaltfläche "Ansicht" angeklickt hat, öffnet der WeChat -Client die vom Entwickler in der Schaltfläche ausgefüllte Webseiten -URL, die mit der Webseiten -Autorisierung kombiniert werden kann, um die grundlegende Informationsschnittstelle für Benutzer zu erhalten, um Benutzer grundlegende Informationen zu erhalten.
3) scancode_push: Nachdem der Benutzer auf die Schaltfläche für das SCAN -Code -Push -Ereignis geklickt hat, ruft der WeChat -Client das Scan -Tool auf und zeigt das Scan -Ergebnis nach Abschluss des Scan -Code -Vorgangs 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 Receip" wird angezeigt. Nachdem der Benutzer auf die Schaltfläche geklickt hat, ruft der WeChat -Client das Scan -Tool auf. Nach Abschluss des Scanvorgangs wird das Ergebnis des Scancode an den Entwickler weitergegeben. 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: Nachdem der Benutzer auf die Schaltfläche geklickt hat, passt der WeChat -Client die Systemkamera ein. Nach Abschluss des Fotovorgangs werden die erfassten Fotos an den Entwickler gesendet und das Ereignis an den Entwickler weitergeben. Gleichzeitig wird die Systemkamera geschlossen und die vom Entwickler gesendete Nachricht kann empfangen werden.
6) PIC_PHOTO_OR_ALBUM: Nachdem der Benutzer auf die Schaltfläche geklickt hat, wird der WeChat -Client den Selektor veröffentlicht, damit der Benutzer "Fotos machen" oder "Aus dem Handy -Album auswählen" auswählt. Nachdem der Benutzer ausgewählt hat, wird er die beiden anderen Prozesse durchlaufen.
7) PIC_WIXIN: Nachdem der Benutzer auf die Schaltfläche im WeChat -Fotoalbum -Absender geklickt hat, passt der WeChat -Client das WeChat -Fotoalbum an. Nach Abschluss des Auswahlvorgangs wird das ausgewählte Foto an den Server des Entwicklers gesendet und das Ereignis an den Entwickler weitergeben. Gleichzeitig wird das Album geschlossen. Anschließend kann die vom Entwickler gesendete Nachricht empfangen werden.
8) location_select: Nachdem der Benutzer auf die Schaltfläche geklickt hat, wenn der Benutzer auf die Schaltfläche klickt, ruft der WeChat -Client das Geolocation -Auswahl -Tool auf. Nach Abschluss des Auswahlvorgangs wird der ausgewählte geografische Standort an den Server des Entwicklers gesendet und das Tool für die Standortauswahl geschlossen. Anschließend kann die vom Entwickler gesendete Nachricht empfangen werden.
9) Media_ID: Nachdem der Benutzer auf die Schaltfläche Media_ID geklickt hat, sendet der WeChat -Server das vom Entwickler entsprechende Material an die dauerhafte materielle ID 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: Springen Sie die URL der grafischen Nachricht, nachdem der Benutzer auf die Schaltfläche "View_Limited" geklickt hat, der WeChat -Client öffnet die Grafiknachricht -URL, die der permanenten materiellen ID entspricht, die vom Entwickler in der Schaltfläche ausgefüllt ist. 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.
Hinweis: Alle Ereignisse von 3 bis 8 unterstützen nur WeChat -Benutzer von iPhone 5.4.1 oder höher sowie Android 5.4 oder höher. Benutzer der alten Version von WeChat antworten nach dem Klicken nicht, und Entwickler können Ereignisse nicht normal erhalten. 9 und 10 sind Ereignisstypen, die speziell für Abonnementkonten gemäß Plattformen von Drittanbietern vorbereitet wurden, die nicht von WeChat zertifiziert wurden (insbesondere sind sie nicht von der Qualifikationszertifizierung genehmigt). Sie haben keinen Event -Push und ihre Fähigkeiten sind relativ begrenzt. Andere Arten von öffentlichen Konten müssen nicht verwendet werden.
2. Erstellen/Abfragen/Löschen von Menüs
Offizielle Klick- und Ansichtsereignisdemo
{ "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": "Miniprogramm", "Name": "wxa", "url": "http://mp.weixin.qq.com", "Appid": "WX286B93C14Bbf93aa", "Pagepath": "Pages/Lunar/Index"} ",", ",", ",", ",", ",", ",", ",", "", " "Schlüssel": "v1001_good"}]}]}Andere Typen (einschließlich 9 und 10)
{"Button": [{"Name": "scancode_waitmsg", "name": "scancode mit prompt", "key": "selfmenu_0_0", "sub_button": []}, {"Typ": "Scancode_push "selfmenu_0_1", "sub_button": [ ] } ] }, { "name": "send a picture", "sub_button": [ { "type": "pic_sysphoto", "name": "System photos and post pictures", "key": "selfmenu_1_0", "sub_button": [ ] }, { "type": "pic_photo_or_album", "name": "fotos oder alben, um bilder zu posten", "key": "selfmenu_1_1", "sub_button": []}, {"Typ": "pic_weixin", "Name": "Wechat -Album -Fotos und Post -Bilder", "Key": "Self." {"Name": "Ort senden", "Typ": "location_select", "key": "selfmenu_2_0"}, {"Typ": "media_id", "name": "picture", "media_id": "media_id1"}, {"type": "media": "media" ".1. beginnen
Menü -Schaltfläche Basisklasse BasicButton.java
public class BasicButton {privater String -Name; public String getName () {return name; } public void setName (String -Name) {this.name = name; }} Menü.java
PUBLIC CLASS -Menü {öffentliche endgültige statische Zeichenfolge klick = "klicken"; // Klicken Sie auf das Menü Public Final Static String View = "Ansicht"; // URL -Menü öffentliche endgültige statische String scancode_waitmsg = "scancode_waitmsg"; // scannen Sie den Code, um eine Eingabeaufforderung für öffentliche endgültige statische String scancode_push = "Scancode_push" zu senden. // scannen Sie den Code, um das Ereignis öffentlich endgültige statische String pic_SySphoto = "pic_sySphoto" zu verschieben; // System zum Aufnehmen von Fotos und zum Posten der öffentlichen endgültigen statischen String pic_photo_or_album = "pic_photo_or_album"; // Machen Sie ein Foto oder posten Sie ein Fotoalbum Public Final Static String pic_weixin = "pic_weixin"; // Veröffentlichen Sie ein Foto auf WeChat Public Final Static String location_Select = "location_select"; // Standort private BasicButton [] Button; public BasicButton [] getButton () {Return Button; } public void setButton (BasicButton [] button) {this.button = button; }} Buttyp -Schaltfläche Klassenansicht anzeigen. Java. Andere Typen können dadurch nacheinander verpackt werden.
public class viewbutton erweitert BasicButton {private String type = Menü.View; private String -URL; public String gettType () {return type; } public void setType (String -Typ) {this.type = type; } public String geturl () {return url; } public void seturl (String url) {this.url = url; }}Das Menü erster Stufe enthält die Kapselung des Menü-Menü-Komplexes der zweiten Stufe. Java
Public Class ComplexMenu erweitert BasicButton {private BasicButton [] sub_button; public BasicButton [] getUb_button () {return sub_button; } public void setSub_button (BasicButton [] sub_button) {this.sub_button = sub_button; }}2. Vervollständigen Sie die Verpackung, montieren Sie das Menü
privates statisches Menü getMenu () {viewButton btn11 = new ViewButton (); Btn11.SetName ("Test 11"); btn11.seturl ("http://www.qq.com"); ClickButton btn21 = neuer ClickButton (); Btn21.SetName ("Test 21"); Btn21.SetKey ("21"); ClickButton btn22 = neuer ClickButton (); BTN22.SetName ("Test 22"); BTN22.SetKey ("22"); // Level 1 -Menü (kein sekundäres Menü) ComplexMenu MainBtn1 = New ComplexMenu (); MainBTN1.SetName ("Test 1"); MainBTN1.SetsUB_Button (neuer BasicButton [] {Btn11}); // Stufe 1 Menü (mit sekundärem Menü) ComplexMenu MainBtn2 = neuer KomplexMenu (); MainBtn2.SetName ("Test 2"); MainBtn2.Setsub_Button (neuer BasicButton [] {Btn21, Btn22}); Menümenü = neues Menü (); Menü Rückgabemenü; }3.. Schaffung von Sonderneiernmenüs
/ ** * Menü erstellt * * @param Menü -Menüelement * @param Token Authorization Token * @return {"errCode": 0, "errmsg": "OK"} */ public resultstate createmenu (Menümenü, String Token) {Trade, String> map = New Tremap <String, String> (); map.put ("access_token", token); String jSondata = jsonUtil.tojson (Menü) .ToString (); String result = httprequtil.httpsDefaultExecute (httprequtil.post_method, wechatconfig.menu_create_url, map, jSondata); return jsonUtil.fromjson (Ergebnis, resultstate.class); }4. Abfrage der benutzerdefinierten Menüs
Zurückgegebene Instanz
Entsprechend dem Erstellen einer Schnittstelle gibt das richtige JSON das Ergebnis zurück:
{ "menu": { "button": [ { "type": "click", "name": "Today's Song", "key": "V1001_TODAY_MUSIC", "sub_button": [ ] }, { "type": "click", "name": "Singer Profile", "key": "V1001_TODAY_SINGER", "sub_button": [ ] }, { "Name": "Menü", "sub_button": [{"Typ": "Ansicht", "Name": "Search", "url": "http://www.soso.com/", "sub_button": []}, {"Typ": "Ansicht", "name": "VIDEY", ",", ",": " "sub_button": []}, {"Typ": "klicken", "Name": "Like Us", "Schlüssel": "v1001_good", "sub_button": []}]}}}}}}}} / ** * benutzerdefiniertes Menü erhalten * * @param token * @return */ public String getMenu (String Token) {TREEMAP <String, String> map = new Treemap <String, String> (); map.put ("access_token", token); String result = httprequtil.httpsDefaultExecute (httprequtil.get_method, wechatconfig.menu_get_url, map, ""); Rückgabeergebnis; }Msusedtr.java
/ ** * Alle Eigenschaften des Menüs * @Author Phil * */ public class MUSUETTR erweitert BasicMenu {private String -Typ; private String -URL; privater Stringschlüssel; private String sub_button; Methode get/festlegen} Die zurückgegebene Menüklasse Menureturn.java
/ ** * Rückgegebene Menüklasse * @Author Phil * * */ Public Class Menureturn erweitert BasicMenu {private mususe [] sub_button; public musemense [] getUb_button () {return sub_button; } public void setSub_button (müse [] subbutton) {sub_button = subbutton; }}Konvertieren Sie JSON-formatierte Zeichenfolgen in Menüobjekte
/ ** * Konvertieren Sie eine Zeichenfolge im JSON -Format in ein Menüobjekt * @param JSON * @Return */ publiclist <Menureturn> convertMenu (String json) {list <Menureturn> list = new ArrayList <Mernureturn> (); if (json! = null &&! ". JsonArray Array = Object.getJsonObject ("Menü"). GetJsonArray ("Button"); für (int i = 0; i <array.size (); i ++) {Menureturn mr = new Menureturn (); MR = array.getObject (i, Menureturn.class); list.add (MR); }} Rückgabeliste; }Hinweis: Hier wird Fastjson verwendet
Hier ist eine Methode, die verbessert werden muss. Bitte geben Sie mir einen Rat, wenn Sie bessere haben
5. Benutzerdefiniertes Menü löschen
/ ** * benutzerdefiniertes Menü löschen * * @param token * @return */ public boolean deletemenu (String token) {boolean falg = true; TREEMAP <String, String> map = new Treemap <String, String> (); map.put ("access_token", token); String result = httprequtil.httpsdefaultExecute (httprequtil.get_method, wechatconfig.menu_delte_url, map, ""); ResultStState State = jsonUtil.fromjson (Ergebnis, resultstate.class); if (state.geterrcode ()! = 0 || state.geterrmsg ()! = "ok") {false = false; } return false; }3.. Benutzerdefiniertes Menüereignis Taste
Nachdem der Benutzer auf das benutzerdefinierte Menü geklickt hat, wird WeChat das Klickenereignis an den Entwickler übertragen. Bitte beachten Sie, dass das Klick -Menü das Untermenü erstellt und keinen Bericht generiert. Bitte beachten Sie, dass alle Ereignisse vom dritten bis zum achten WeChat -Benutzer des iPhone 5.4.1 oder höher sowie Android 5.4 oder höher unterstützen. Benutzer der alten Version von WeChat antworten nach dem Klicken nicht, und Entwickler können Ereignisse nicht normal erhalten.
1. Analysieren Sie das von WeChat geplante XML -Datenpaket
/*** Anfragen von WeChat (xml)* xml Beispiel* <xml> <tousername> <! [Cdata [touser]]> </tousername> <fromusername> <! [Cdata [fromuser]] <MsgType><![CDATA[event]]></MsgType> <Event><![CDATA[CLICK]]></Event> <EventKey><![CDATA[EVENTKEY]]></EventKey> </xml> * @param request * @return * @throws Exception */ public static Map<String, String> parseXml(HttpServletRequest request) throws Exception { // Speichern Sie das Parsen -Ergebnis in HashMap -Karte <String, String> map = new Hashmap <String, String> (); // den Eingabestream aus dem Request InputStream InputStream = Request.GetInputStream () abrufen; // Lesen Sie den Eingabestream Saxreader Reader = New SaxReader (); Document document = reader.read (InputStream); // das XML Root Element Element root = document.getRootElement () abrufen; // Erhalten Sie alle untergeordneten Knoten der Root -Elementliste <element> elementList = root.elements (); // Alle untergeordneten Knoten für (Element E: ElementList) map.put (e.getName (), e.getText ()) durchqueren; // freie Ressourceneingabestream.CLOSE () frei; inputStream = null; Rückgabekarte; }2. Verwenden Sie die GET (Schlüssel) der Karte, um Wert zu erhalten
MSGTYPE -Nachrichtentyp, Ereignis
Ereignisereignis Typ, klicken Sie auf
Der Ereigniskey -Ereignisschlüsselwert entspricht dem Schlüsselwert in der benutzerdefinierten Menüschnittstelle
Hinweis: Der Schlüssel ist der Parametername
Anhang: WechatConfig.java
// Erstellen Sie ein Menü public static Final String mseu_create_url = "https://api.weixin.qq.com/cgi-bin/menu/create"; // Abfragen Sie das benutzerdefinierte Menü public static Final String mseu_Get_url = "https://api.weixin.qq.com/cgi-ner/menu/get"; // Löschen Sie das benutzerdefinierte Menü public static Final String Menü_Delte_url = "https://api.weixin.qqqq.com/cgi-ner/menu/delete";
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.