J'ai travaillé sur le développement d'un menu personnalisé WeChat la semaine dernière, dans l'ensemble, c'est assez déprimant.
Analysons d'abord quelques interfaces :
1 : Interface de requête ; l'interface de requête est divisée en deux, l'une est l'interface de requête ordinaire en mode développement, elle interrogera uniquement ce que vous transmettez. Ajouter les menus créés par l'interface et les menus personnalisés (permettant aux différents groupes d'utilisateurs du compte officiel de voir différents menus personnalisés), mais les menus que vous avez ajoutés via la plateforme de gestion WeChat ne peuvent pas être obtenus. Il existe également une interface qui peut interroger tous les menus. Cette interface est un peu pénible. Si vous ajoutez d'abord un menu à la plateforme, puis appelez cette interface en arrière-plan, vous pouvez obtenir le menu, mais le json est renvoyé en appelant ceci. L'interface est différente de celle lors de l'ajout. Le format est différent (c'est-à-dire que vous ne pouvez pas créer un menu si vous le renvoyez à votre json comme c'est le cas pour WeChat), et il existe de nombreux types de menus ajoutés à la plate-forme WeChat, et chacun type de json renvoyé Les formats sont tous différents et il est très difficile de les analyser, donc je pense personnellement que puisque j'ai choisi le mode développeur, il est préférable d'utiliser l'interface de requête ordinaire.
2 : Créer une interface ; la fonction de cette interface, comme son nom l'indique, est de créer une interface, mais cette interface n'est pas créée sur la base originale, mais recrée à chaque fois tous les menus. il s'appelle, vous le ferez. Les menus restants sont traités en json au format fixe puis envoyés à WeChat, donc si vous souhaitez les supprimer individuellement, vous pouvez supprimer le menu que vous souhaitez supprimer et changer le reste en json. il en va de même pour les modifications. Remplacez les données que vous devez modifier, puis convertissez l'intégralité du menu en json et envoyez-le à WeChat.
3 : Supprimer l'interface ; cette interface est utilisée pour supprimer tous les menus, mais elle ne prendra pas effet immédiatement. Après l'avoir appelée, il semble que vous ne verrez l'effet que le lendemain, et pendant ce temps. vous êtes toujours Vous pouvez interroger le menu que vous avez créé auparavant.
Ma tâche est d'intégrer l'ajout, la suppression, la modification et la requête du menu dans la gestion du backend. Ici, je parlerai uniquement de la façon de sortir de mon backend. La requête à l'interface WeChat renvoie un json. string. Mon approche consiste à analyser cette chaîne, à l'écrire dans un objet selon certaines règles et à l'ajouter à la liste. Utiliser la liste lors de l'ajout, de la suppression ou de la modification, puis reconvertir la liste en json dans le format requis par WeChat, et. appelez l'interface WeChat pour créer le menu. (L'interface de création est appelée pour les ajouts, suppressions et modifications). Mes attributs dans la partie objet sont id (définissez l'indice de la liste sur id pour une utilisation facile), nom (nom du menu), type (type de menu, il existe 10 types de menus personnalisés WeChat), parent (nom du menu parent) ) , SecendLvMenu (nombre de menus secondaires), url (obligatoire pour le menu de liens), clé (fonction d'appel push), mediaid (
doit définir madia_id lors de l'appel des matériaux), sort (numéro de tri).
Voici le code pour convertir json en liste. Le package json ici est le package fastjson d'Alibaba, qui est assez facile à utiliser :
public static List
Liste
obj=obj.getJSONObject("menu");
JSONObject a=new JSONObject( );
int num=0;
if(obj!=null){
//Obtenir le tableau json du bouton
JSONArray array= obj.getJSONArray("bouton");
if(array!=null){
for(int i=0;i a= array.getJSONObject(i); //Aucune description de type n'est un menu de premier niveau avec un type de menu de deuxième niveau if(a.get("type ")==null){ weixinMenu menu=new weixinMenu(); menu.setId(num); menu.setSort(num); num++; menu.setName(a.getString("name"));//Définissez l'indice, définissez le numéro de tri et stockez-le dans la liste //Get le menu de deuxième niveau sous le menu de premier niveau JSONArray sub=a.getJSONArray("sub_button"); //Le nombre de menus secondaires Depuis la limite supérieure des menus secondaires. est 5, il est facile de juger lors de l'ajout d'un nombre 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"));//Le menu parent est le nom du menu de premier niveau à l'instant menu2.setType(b.getString("type")); menu.setKey(a.getString("key")); menu.setMediaId(a.getString("media_id")); menulist.add(menu); } } } } retour à la liste du menu ; } Ensuite, convertissez la liste en weixinJson. Le téléchargement du json de WeChat ne nécessite que la partie bouton : 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); //Pas de menu de deuxième niveau et pas de menu parent, alors il n'y a pas de menu de premier niveau de type deuxième niveau if(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){ Un menu sans parent est un menu de premier niveau avec un deuxième niveau JSONObject obj=new JSONObject(); JSONArray sub=new JSONArray(); obj.put( "name",menu.getName()); weixinMenu submenu=new weixinMenu(); //Parcourez la liste entière et utilisez la correspondance de nom pour trouver le menu de deuxième niveau sous le menu de premier niveau for(int j=0;j submenu=list.get(j); Map if((menu.getName()).equals(submenu.getParent())){ map=new HashMap 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); //Enfin, convertissez la carte directement en json return (JSONObject)JSONObject.toJSON(map); } Cet ensemble est fondamentalement corrigé, et le menu WeChat peut être analysé en liste, une fois l'opération terminée, convertissez json et les opérations ultérieures seront beaucoup plus faciles. Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!