Maison  >  Article  >  Applet WeChat  >  Explication détaillée du modèle de développement de menu personnalisé WeChat

Explication détaillée du modèle de développement de menu personnalisé WeChat

高洛峰
高洛峰original
2017-03-22 16:15:061381parcourir

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 menulist=new ArrayList();

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"));

menu2.setUrl(b.getString("url"));

menu2.setKey(b .getString("key"));

menu2.setMediaId(b .getString("media_id"));

menulist.add(menu2);

}

}else{//Sinon c'est un menu de premier niveau sans menu de deuxième niveau, cliquez pour sauter directement ou déclencher l'événement correspondant

weixinMenu menu=new weixinMenu();

menu.setId(num);

menu.setSort(num);

num++;

menu.setName(a.getString("name") );

menu.setParent(null);

menu.setSecendLvMenuNum( 0);

menu.setType(a.getString("type"));

menu.setUrl(a.getString("url"));

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 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=new HashMap();

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 map=null ;

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=new HashMap();

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn