1. Personnaliser la description du menu et le type de bouton
1. Description du menu
1) Les menus personnalisés comprennent jusqu'à 3 menus de premier niveau, et chaque menu de premier niveau contient jusqu'à 5 menus de deuxième niveau.
2) Le menu de premier niveau a jusqu'à 4 caractères chinois, et le menu de deuxième niveau a jusqu'à 7 caractères chinois. Les pièces supplémentaires seront remplacées par "...".
3) Après avoir créé un menu personnalisé, la stratégie de rafraîchissement du menu est que lorsque l'utilisateur entre dans la page officielle de la session du compte ou la page officielle du profil du compte, s'il constate que la dernière demande pour retirer le menu était il y a 5 minutes, il tirera le menu. Si le menu est mis à jour, le menu du client sera actualisé. Pendant le test, vous pouvez essayer de ne pas suivre le compte public et le suivre à nouveau, et vous pouvez voir l'effet après la création.
2. L'interface de menu personnalisée peut implémenter plusieurs types de boutons
1) Cliquez sur: Une fois que l'utilisateur a cliqué sur le bouton Click Type lorsque vous cliquez sur l'événement push, le serveur WeChat appuyera sur la structure de l'événement de type de message vers le développeur via l'interface de message (reportez-vous au guide d'interface du message) et apportez la valeur clé remplie par le développeur dans le bouton. Le développeur peut interagir avec l'utilisateur via la valeur clé personnalisée;
2) Affichage: URL JUMP après que l'utilisateur a cliqué sur le bouton Type de vue, le client WeChat ouvrira l'URL de la page Web rempli par le développeur dans le bouton, qui peut être combiné avec l'autorisation de la page Web pour obtenir l'interface d'information de base de l'utilisateur pour obtenir des informations de base de l'utilisateur.
3) scancode_push: Une fois que l'utilisateur a cliqué sur le bouton pour l'événement de push de code d'analyse, le client WeChat appellera l'outil de numérisation et affichera le résultat de numérisation après avoir terminé l'opération de code d'analyse (s'il s'agit d'une URL, il entrera l'URL) et le résultat de numérisation sera transmis au développeur, et le développeur peut envoyer un message.
4) scancode_waitmsg: scannez le code pour pousser l'événement et la boîte d'invite "Receçonne du message" apparaît. Après que l'utilisateur a cliqué sur le bouton, le client WeChat appellera l'outil d'analyse. Après avoir terminé l'opération de balayage, le résultat du code de numérisation est transmis au développeur. Dans le même temps, l'outil d'analyse est fermé, et la boîte d'invite "Recevoir du message" apparaît, puis un message envoyé par le développeur peut être reçu.
5) PIC_SYSPHOTO: Après que l'utilisateur a cliqué sur le bouton, le client WeChat ajustera la caméra système. Après avoir terminé l'opération photo, les photos capturées seront envoyées au développeur et repousseront l'événement vers le développeur. Dans le même temps, la caméra système sera fermée et le message envoyé par le développeur peut être reçu.
6) PIC_PHOTO_OR_ALBUM: Après que l'utilisateur clique sur le bouton, le client WeChat apparaîtra le sélecteur pour que l'utilisateur sélectionne "Prenez des photos" ou "Sélectionnez From Mobile Phone Album". Une fois l'utilisateur sélectionné, il passera par les deux autres processus.
7) PIC_WEIXIN: Après que l'utilisateur clique sur le bouton de l'expéditeur de l'album photo WeChat, le client WeChat ajustera l'album photo WeChat. Après avoir terminé l'opération de sélection, la photo sélectionnée sera envoyée au serveur du développeur et appuyera l'événement vers le développeur. En même temps, l'album sera fermé. Ensuite, le message envoyé par le développeur peut être reçu.
8) Location_Select: Une fois que l'utilisateur a cliqué sur le bouton lorsque l'utilisateur clique sur le bouton, le client WeChat appellera l'outil de sélection de géolocalisation. Après avoir terminé l'opération de sélection, l'emplacement géographique sélectionné sera envoyé au serveur du développeur et l'outil de sélection de l'emplacement sera fermé. Ensuite, le message envoyé par le développeur peut être reçu.
9) Media_id: Une fois que l'utilisateur a cliqué sur le bouton MEDIA_ID Type, le serveur WeChat enverra le matériau correspondant à l'ID de matériel permanent rempli par le développeur à l'utilisateur. Les types de matériaux permanents peuvent être des images, des audio, des vidéos et des messages graphiques. Veuillez noter: L'ID de matériel permanent doit être l'ID légal obtenu après le téléchargement de l'interface "Gestion du matériel / ajouter du matériel permanent".
10) View_limited: Sautez l'URL du message graphique après que l'utilisateur a cliqué sur le bouton View_limited, le client WeChat ouvrira l'URL du message graphique correspondant à l'ID de matériel permanent rempli par le développeur dans le bouton. Le type de matériau permanent ne prend en charge que le message graphique. Veuillez noter: L'ID de matériel permanent doit être l'ID légal obtenu après le téléchargement de l'interface "Gestion du matériel / ajouter du matériel permanent".
Remarque: Tous les événements de 3 à 8 ne prennent en charge que les utilisateurs de WeChat de l'iPhone 5.4.1 ou plus, et Android 5.4 ou plus. Les utilisateurs de l'ancienne version de WeChat ne répondront pas après avoir cliqué et les développeurs ne peuvent pas recevoir de poussées d'événements normalement. 9 et 10 sont des types d'événements spécialement préparés pour les comptes d'abonnement sous des plateformes tierces qui n'ont pas été certifiées par WeChat (en particulier, elles ne sont pas approuvées par la certification de qualification). Ils n'ont pas de poussée d'événements et leurs capacités sont relativement limitées. D'autres types de comptes publics n'ont pas besoin d'être utilisés.
2. Créer / requérir / supprimer les menus
Demo officiel de clic et de visualisation
{"Button": [{"type": "cliquez", "nom": "Today's Song", "Key": "v1001_today_music"}, {"name": "menu", "sub_button": [{"type": "voir", "nom": "search", "url": "http:///www.soso.com/". " "type": "miniprogramme", "nom": "wxa", "url": "http://mp.weixin.qq.com", "appid": "wx286b93c14bbf93aa", "pagepath": "pages / lunar / index"}, {"type": "cliquez" "clé": "v1001_good"}]}]}Autres types (y compris 9 et 10)
{"Button": [{"name": "scancode_waitmsg", "name": "scancode avec invite", "key": "selfMenu_0_0", "sub_button": []}, {"type": "scancode_push", "nom": "scancode_push", "name": "scancode push event", "key": " "selfMenu_0_1", "sub_button": []}]}, {"name": "Envoyer une image", "sub_button": [{"type": "pic_sysphoto", "nom": "System Photos", "Key": "SelfMenu_1_0", "sub_button": []}, {"Tapy": "pic_photo_or_album", "nom": "prendre des photos ou des albums pour publier des images", "key": "selfmenu_1_1", "sub_button": []}, {"type": "pic_weixin", "name": "Wechat album photos et publier des photos": ":" SelfMenu_1_2 "", "sub_button": [ {"name": "Envoyer l'emplacement", "type": "emplacement_select", "key": "selfmenu_2_0"}, {"type": "media_id", "name": "image", "media_id": "media_id1"}, {"type": "View_limited"]1. Commencez à encapsuler la classe d'entité selon l'exemple
Menu Button Base Class BasicButton.java
classe publique BasicButton {nom de chaîne privée; public String getName () {Nom de retour; } public void setName (string name) {this.name = name; }} Menu.java
Menu de classe publique {public final statique String click = "cliquez"; // Cliquez sur le menu public final static String View = "View"; // Menu d'URL public final statique statique scancode_waitmsg = "scancode_waitmsg"; // Scannez le code pour envoyer une chaîne statique publique invite scancode_push = "scancode_push"; // Scannez le code pour pousser l'événement public final statique String pic_sysphoto = "pic_sysphoto"; // système pour prendre des photos et publier une chaîne statique finale publique pic_photo_or_album = "pic_photo_or_album"; // Prenez une photo ou publiez un album photo public final statique statique pic_weixin = "pic_weixin"; // Publier une photo sur WeChat public Final Static String Location_Select = "Location_Select"; // Envoi de l'emplacement privé BasicButton [] bouton; public BasicButton [] getButton () {Button de retour; } public void setButton (BasicButton [] bouton) {this.button = bouton; }} Affichage de la classe de bouton de type ViewButton.java. D'autres types peuvent être emballés un par un selon cela.
classe publique ViewButton étend BasicButton {private String type = menu.view; URL de chaîne privée; public String getType () {return type; } public void setType (String Type) {this.type = type; } public String getUrl () {return url; } public void setUrl (string url) {this.url = url; }}Le menu de premier niveau contient l'encapsulation du menu de deuxième niveau complexmenu.java
classe publique ComplexMenu étend BasicButton {privé BasicButton [] sub_button; public BasicButton [] getSub_button () {return sub_button; } public void setsub_button (BasicButton [] sub_button) {this.sub_button = sub_button; }}2. Emballage complet, assemblez le menu
Menu statique privé getMenu () {ViewButton btn11 = new ViewButton (); btn11.setname ("test 11"); btn11.setUrl ("http://www.qq.com"); ClickButton BTN21 = new ClickButton (); btn21.setName ("test 21"); btn21.setkey ("21"); ClickButton BTN22 = new ClickButton (); btn22.setName ("test 22"); BTN22.SetKey ("22"); // Menu de niveau 1 (pas de menu secondaire) ComplexMenu MainBtn1 = new complexMenu (); mainbtn1.setName ("test 1"); mainbtn1.setsub_button (new BasicButton [] {btn11}); // Menu de niveau 1 (avec menu secondaire) ComplexMenu MainBtn2 = new complexMenu (); MainBtn2.SetName ("Test 2"); mainbtn2.setsub_button (new BasicButton [] {btn21, btn22}); Menu menu = nouveau menu (); menu.setButton (new BasicButton [] {MainBtn1, mainbtn2}); menu de retour; }3. Création de menus personnalisés
/ ** * menu créé * * @param menu menu itel * @param token Authorization token * @return {"errcode": 0, "errmsg": "ok"} * / public resultState CreateMenu (menu menu, String token); map.put ("Access_token", token); String jSondata = JSonUtil.tojson (menu) .toString (); Résultat de la chaîne = httprequtil.httpsdefaultExECUTE (httprequtil.post_method, wechatconfig.menu_create_url, map, jSondata); return jsonutil.fromjson (résultat, resultState.class); }4. Requête des menus personnalisés
Instance renvoyée
Correspondant à créer une interface, le JSON correct renvoie le résultat:
{"Menu": {"Button": [{"type": "cliquez", "nom": "Today's Song", "Key": "V1001_Today_Music", "Sub_button": []}, {"Type": "Click", "Name": "Singer Profile", "Key": "V1001_Today_ "name": "menu", "sub_button": [ { "type": "view", "name": "search", "url": "http://www.soso.com/", "sub_button": [ ] }, { "type": "view", "name": "video", "url": "http://v.qq.com/", "sub_button": []}, {"type": "cliquez", "nom": "comme nous", "key": "v1001_good", "sub_button": []}]}]}} / ** * Obtenez le menu personnalisé * * @param token * @return * / public String getMenu (String token) {Treemap <String, String> map = new Treemap <String, String> (); map.put ("Access_token", token); Résultat de la chaîne = httprequtil.httpsdefaultExECUTE (httprequtil.get_method, wechatconfig.menu_get_url, map, ""); Résultat de retour; }Menuattr.java
/ ** * Toutes les propriétés du menu * @author phil * * / classe publique menuaTtr étend BasicMenu {Type de chaîne privée; URL de chaîne privée; clé de chaîne privée; chaîne privée sub_button; Méthode Get / Set} La classe de menu retourné menureturn.java
/ ** * Classe de menu renvoyée * @author phil * * / classe publique MenureTurn étend BasicMenu {private menuAttr [] sub_button; public menuAttr [] getSub_button () {return sub_button; } public void setsub_button (menuaTtr [] subbutton) {sub_button = subbutton; }}Convertir les chaînes de format JSON en objets de menu
/ ** * Convertir une chaîne au format JSON en un objet de menu * @param json * @return * / public list <enureTurn> convertMenu (String JSON) {list <menureTurn> list = new ArrayList <enureTurn> (); if (JSON! = null &&! "". equals (json)) {jsonObject object = jsonObject.ParseObject (json); JSONArray array = object.getjsonObject ("menu"). GetJsonArray ("bouton"); pour (int i = 0; i <array.size (); i ++) {menureTurn mr = new MenureTurn (); mr = array.getObject (i, menureTurn.class); list.add (MR); }} Retour List; }Remarque: Fastjson utilisé ici
Voici une méthode qui doit être améliorée. S'il vous plaît donnez-moi des conseils si vous en avez de meilleurs
5. Supprimer le menu personnalisé
/ ** * Supprimer le menu personnalisé * * @param token * @return * / public boolean Deletemenu (String token) {boolean falg = true; Treemap <String, String> map = new Treemap <String, String> (); map.put ("Access_token", token); Résultat de la chaîne = httprequtil.httpsdefaultExECUTE (httprequtil.get_method, wechatconfig.menu_delte_url, map, ""); ResultState State = JSonUtil.fromjson (résultat, resultState.class); if (state.geterRCode ()! = 0 || state.getERRMSG ()! = "OK") {false = false; } return false; }3. Événement de menu personnalisé Push
Après que l'utilisateur a cliqué sur le menu personnalisé, WeChat appuyera sur l'événement Click vers le développeur. Veuillez noter que le menu de clics apparaît du sous-menu et ne générera pas de rapport. Veuillez noter que tous les événements du troisième au huitième ne prennent en charge que les utilisateurs de WeChat de l'iPhone 5.4.1 ou plus, et Android 5.4 ou supérieur. Les utilisateurs de l'ancienne version de WeChat ne répondront pas après avoir cliqué et les développeurs ne peuvent pas recevoir de poussées d'événements normalement.
1. Analyser le paquet de données XML poussé par WeChat
/ ** * Analyser les demandes de WeChat (XML) * Exemple XML * <xml> <Tousername> <! [CDATA [TOULER]]> </ TOUSERNAME> <FROMUSERNAME> <! [CDATA [FromUser]]> </ FromUserName> <CreateEtime> 123456789 </reatetime> <sgType> <! [CDATA [EVENT]]> </sgtype> <event> <! [Cdata [click]]> </ event> <eventkey> <! [CDATA [Eventkey]]> </ EventKey> </xml> * @param request * @return * @throws exception * / public static map <String> PARSEXMMl (HTTPSerSERVET // Stockez le résultat analysé dans HashMap Map <String, String> map = new HashMap <String, String> (); // Obtenez le flux d'entrée de la demande inputStream inputStream = request.getInputStream (); // Lire le Stream d'entrée SAXREDER Reader = new saxReader (); Document document = reader.read (inputStream); // Obtenez l'élément root xml root root = document.getRootelement (); // Obtenez tous les nœuds enfants de la liste des éléments racinaires <element> elementList = root.Elements (); // Traverse tous les nœuds enfants pour (élément e: elementList) map.put (e.getName (), e.getText ()); // libre de la ressource inputStream.close (); inputStream = null; carte de retour; }
2. Utilisez la carte Get (clé) pour obtenir de la valeur
Type de message MSGTYPE, événement
Type d'événement de l'événement, cliquez
La valeur de clé de l'événement EventKey correspond à la valeur clé de l'interface de menu personnalisé
Remarque: la clé est le nom du paramètre
Attachement: wechatconfig.java
// Créer un menu public static final string menu_create_url = "https://api.weixin.qq.com/cgi-bin/menu/create"; // interroge le menu personnalisé public statique final string menu_get_url = "https://api.weixin.qq.com/cgi-bin/menu/get"; // Supprimer le menu personnalisé public static final string menu_delte_url = "https://api.weixin.qq.com/cgi-bin/menu/delete";
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.