Ich habe in der letzten Woche an der Entwicklung eines benutzerdefinierten WeChat-Menüs gearbeitet. Insgesamt ist es ziemlich deprimierend.
Lassen Sie uns zunächst einige Schnittstellen analysieren:
1: Die Abfrageschnittstelle ist in zwei Teile unterteilt. Eine davon ist die normale Abfrageschnittstelle im Entwicklungsmodus. Sie fragt nur ab, was Sie hinzufügen Die von der Schnittstelle erstellten Menüs und personalisierten Menüs (so dass verschiedene Benutzergruppen des offiziellen Kontos unterschiedliche benutzerdefinierte Menüs sehen können), aber die Menüs, die Sie über die WeChat-Verwaltungsplattform hinzugefügt haben, können nicht abgerufen werden. Es gibt auch eine Schnittstelle, die alle Menüs abfragen kann. Diese Schnittstelle ist etwas umständlich. Wenn Sie zuerst ein Menü zur Plattform hinzufügen und diese Schnittstelle dann im Hintergrund aufrufen, können Sie das Menü abrufen, aber der JSON wird durch diesen Aufruf zurückgegeben Die Schnittstelle ist anders als beim Hinzufügen. Das Format ist anders (das heißt, Sie können kein Menü erstellen, wenn Sie es an Ihren JSON zurücksenden, wie es bei WeChat der Fall ist), und es gibt viele Arten von Menüs, die der WeChat-Plattform hinzugefügt werden Typ des zurückgegebenen JSON Die Formate sind alle unterschiedlich und es ist sehr mühsam, sie zu analysieren. Daher denke ich persönlich, dass es besser ist, die normale Abfrageschnittstelle zu verwenden, da ich den Entwicklermodus gewählt habe.
2: Erstellen Sie eine Schnittstelle. Die Funktion dieser Schnittstelle besteht, wie der Name schon sagt, darin, eine Schnittstelle zu erstellen. Diese Schnittstelle wird jedoch nicht auf der ursprünglichen Basis erstellt, sondern erstellt jedes Mal alle Menüs neu Es heißt: Die verbleibenden Menüs werden in JSON mit festem Format verarbeitet und dann an WeChat gesendet. Wenn Sie sie also einzeln löschen möchten, können Sie das zu löschende Menü entfernen und den Rest in JSON ändern Das Gleiche gilt für Änderungen, die Sie ändern müssen, und konvertieren Sie dann das gesamte Menü in ein JSON-Format und senden Sie es an WeChat.
3: Schnittstelle löschen; diese Schnittstelle wird zum Löschen aller Menüs verwendet, wird jedoch nicht sofort wirksam. Nach dem Aufruf werden Sie die Wirkung anscheinend erst am nächsten Tag und während dieser Zeit sehen Sie sind immer noch Sie können das zuvor erstellte Menü abfragen.
Meine Aufgabe besteht darin, das Hinzufügen, Löschen, Ändern und Abfragen des Menüs in die Backend-Verwaltung zu integrieren. Hier werde ich nur darüber sprechen, wie ich aus meiner Backend-Schnittstelle herauskomme Mein Ansatz besteht darin, diese Zeichenfolge zu analysieren, sie gemäß bestimmten Regeln in ein Objekt zu schreiben und sie der Liste hinzuzufügen, zu löschen oder zu ändern, und die Liste dann in das von WeChat erforderliche Format zurück zu konvertieren Rufen Sie die WeChat-Schnittstelle auf, um das Menü zu erstellen (Die Erstellungsschnittstelle wird für Hinzufügungen, Löschungen und Änderungen aufgerufen). Meine Attribute im Objektteil sind ID (setzen Sie den Index der Liste zur einfachen Bedienung auf ID), Name (Menüname), Typ (Menütyp, es gibt 10 Arten von benutzerdefinierten WeChat-Menüs) und Parent (Name des übergeordneten Menüs). , SecendLvMenu (Anzahl der sekundären Menüs), URL (erforderlich für Link-Menü), Schlüssel (Push-Funktion aufrufen), Mediaid (
muss beim Aufrufen von Materialien madia_id festlegen), Sortieren (Sortierungsnummer).
Das Folgende ist der Code zum Konvertieren von JSON in eine Liste. Das JSON-Paket hier ist Alibabas FastJSON-Paket, das recht einfach zu verwenden ist:
public static List
List
obj=obj.getJSONObject("menu");
JSONObject a=new JSONObject( );
int num=0;
if(obj!=null){
//Holen Sie sich das JSON-Array der Schaltfläche
JSONArray array= obj.getJSONArray(" button");
if(array!=null){
for(int i=0;i a= array.getJSONObject(i); //Keine Typbeschreibung ist ein Menü der ersten Ebene mit einem Menütyp der zweiten Ebene if(a.get("type ")==null){ weixinMenu menu=new weixinMenu(); menu.setId(num); menu.setSort(num); num++; menu.setName(a.getString("name"));//Setzen Sie den Index, legen Sie die Sortiernummer fest und speichern Sie sie in der Liste //Get das Menü der zweiten Ebene unter dem Menü der ersten Ebene JSONArray sub=a.getJSONArray("sub_button"); //Die Anzahl der sekundären Menüs 5 ist, ist es beim Hinzufügen einer Zahl leicht zu beurteilen menu.setSecendLvMenuNum(sub.size()); menulist.add(menu); JSONObject b =new JSONObject(); for(int j =0;j weixinMenu menu2=new weixinMenu(); b=sub.getJSONObject(j); menu2 .setId(num); menu2.setSort(num); num++; menu2 .setName(b.getString("name")); menu2.setParent(a.getString("name"));//Das übergeordnete Menü ist der Name des Menüs der ersten Ebene gerade menu2.setType(b.getString("type")); menu.setKey(a.getString("key")); menu.setMediaId(a.getString("media_id")); menulist.add(menu); } } } } Zurück zur Menüliste; } Dann konvertieren Sie die Liste in weixinJson. Zum Hochladen des JSON von WeChat ist nur der Schaltflächenteil erforderlich: public static JSONObject listToWxJson(List JSONArray array=new JSONArray(); weixinMenu menu=new weixinMenu(); int size=list.size(); for(int i=0;i menu=list.get(i); //Es gibt kein Menü der zweiten Ebene und kein übergeordnetes Menü, dann gibt es kein Menü der ersten Ebene vom Typ zweiter Ebene wenn (menu.getSecendLvMenuNum( )==0&&menu.getParent()==null){ Map map. put("name" , menu.getName()); map.put("type", menu.getType()); if(menu.getUrl()!=null ){ map.put("url", menu.getUrl()); } if(menu.getKey()!=null){ map .put("key", menu.getKey()); } if(menu.getMediaId()!=null){ map.put(" media_id", menu.getMediaId()); } array.add(map); }else if(menu.getParent() ==null){ Ein Menü ohne übergeordnetes Element ist ein Menü der ersten Ebene mit einer zweiten Ebene JSONObject obj=new JSONObject(); JSONArray sub=new JSONArray(); obj.put( "name",menu.getName()); weixinMenu submenu=new weixinMenu(); //Durchlaufe die gesamte Liste und verwende den Namensabgleich um das Menü der zweiten Ebene unter dem Menü der ersten Ebene zu finden for(int j=0;j submenu=list.get(j); Map if((menu.getName()).equals(submenu.getParent())){ map=new HashMap< ;String, Object>(); map.put("name", submenu.getName()); map.put("type", submenu.getType()); if(submenu.getUrl() !=null){ map.put("url", submenu.getUrl()); } if(submenu.getKey()!=null) { map.put("key", submenu.getKey()); } if( submenu.getMediaId()!=null){ map.put("media_id", submenu.getMediaId()); } sub.add(map) ; } } obj.put("sub_button",sub); array.add(obj); } } Map map.put("button",array); //Konvertieren Sie die Karte schließlich direkt in JSON return (JSONObject)JSONObject.toJSON(map); } Dieser Satz ist grundsätzlich festgelegt , und das WeChat-Menü kann analysiert werden, wenn die Liste zurückgegeben wird. Nach Abschluss des Vorgangs wird JSON konvertiert, und die nachfolgenden Vorgänge werden viel einfacher. Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung des personalisierten Menüentwicklungsmodells von WeChat. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!