Le menu personnalisé de la plate-forme publique de développement de WECHAT exige que de l'argent soit certifié pour réaliser. Si vous ne voulez pas dépenser de l'argent, vous ne pouvez jouer qu'avec le compte de test, mais cela n'affecte pas le développement. Mon développement est basé sur l'élaboration des applications de la plate-forme publique WeChat de l'enseignant Liu Feng.
Tant que nous utilisons la plate-forme publique pour tester le compte, nous pouvons développer un menu personnalisé. C'est plus pratique. Le compte de test contient de nombreuses interfaces, ce qui est très pratique.
Lors du développement d'un menu personnalisé, vous pouvez vous référer au menu personnalisé de la documentation du développeur de plate-forme publique WeChat pour la créer.
1. Personnaliser le 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 de le suivre à nouveau, puis
Vous pouvez voir l'effet après la création.
L'interface de menu personnalisée peut implémenter plusieurs types de boutons, comme suit:
1. Cliquez: cliquez sur l'événement pour pousser
Une fois que l'utilisateur a cliqué sur le bouton Click Type, 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 de message) et apportez la valeur de clé remplie par le développeur dans le bouton. Le développeur peut interagir avec l'utilisateur via la valeur clé personnalisée;
2. Voir: URL de saut
Une fois 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: scanner le code pour pousser l'événement
Une fois que l'utilisateur a cliqué sur le bouton, le client WeChat appellera l'outil d'analyse et affichera le résultat de la numérisation après avoir terminé l'opération de numérisation (s'il s'agit d'une URL, il entrera l'URL) et le résultat de la 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 "reçoit 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 code de numérisation, passez le résultat du code de numérisation 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: Système pop-up pour prendre des photos et publier des photos
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, il enverra les photos capturées au développeur et repoussera l'événement vers le développeur. Dans le même temps, il conservera la caméra système puis recevra un message envoyé par le développeur.
6. Pic_photo_or_album: apparaître et prendre des photos ou publier des photos sur l'album
Après que l'utilisateur a cliqué sur le bouton, le client WeChat apparaîtra le sélecteur pour que l'utilisateur sélectionne "prendre une photo" ou "Sélectionner dans l'album de téléphone mobile". Une fois l'utilisateur sélectionné, il passera par les deux autres processus.
7. PIC_WEIXIN: Sender de l'album photo de la pop-up WeChat
Après que l'utilisateur a cliqué sur le bouton, le client WeChat ajustera l'album WeChat. Après avoir terminé l'opération de sélection, il enverra la photo sélectionnée sur le serveur du développeur et repoussera l'événement vers le développeur. En même temps, l'album sera fermé. Ensuite, un message peut être reçu du développeur.
8. Location_Select: sélecteur de géolocalisation pop-up
Après que l'utilisateur a cliqué 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, il enverra l'emplacement géographique sélectionné au serveur du développeur, et en même temps, il fermera l'outil de sélection de l'emplacement, puis recevra un message envoyé par le développeur.
9. Media_id: Envoyer un message (sauf le message texte)
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ériau 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 SMS
Une fois 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 "Management Material / Add Permanent Material"
2. Accédez à l'interface du menu personnalisé
1: Obtenez Access_token
La création, la requête et la suppression des menus personnalisés nécessitent d'appeler l'interface de menu personnalisée ouverte sur la plate-forme publique. Pour appeler cette interface, vous devez obtenir Access_token (Interface Access Idedentials). Ces interfaces sont toutes basées sur le protocole HTTPS, nous devons donc d'abord résoudre le problème de la façon d'envoyer des demandes HTTPS dans les programmes Java.
Obtenez les informations d'identification d'accès à l'interface Access_token:
Obtenir Access_token est accessible via Get:
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=appid&secret=AppSecret
Il y a trois paramètres dans le lien, à savoir Grant_Type, AppID et Secret. Selon la description du paramètre sur la figure, Grant_Type passe la valeur fixe client_credential, et AppID et Secret nous sont attribués par WeChat après avoir postulé pour le menu personnalisé.
Une fois la demande envoyée avec succès, le serveur WeChat renvoie une chaîne JSON, y compris Access_token et expires_in. Parmi eux, Access_token est le diplôme dont nous avons besoin à la fin, et expires_in est la période de validité des informations d'identification, l'unité est des secondes et 7200 secondes est de 2 heures. Cela signifie que chaque fois que vous accédez à une interface spéciale, vous devez réaccompagner l'accès_token, et il peut être utilisé tant que l'accès_token est toujours dans la période de validité.
2: Création de menu
Pour créer un menu, appelez l'interface de menu
Description de la demande d'appel d'interface
Méthode de demande HTTP: Post (veuillez utiliser le protocole HTTPS) https://api.weixin.qq.com/cgi-bin/menu/create?access_token=access_token
En fait, il s'agit de soumettre une chaîne de menu JSON dans la publication à l'adresse https://api.weixin.qq.com/cgi-bin/menu/create?access_token=access_token.
3. Encapsuler la méthode de demande générale (Custom Trust Manager)
Pour créer un menu, l'un consiste à obtenir l'interface Access_token et l'autre est de personnaliser l'interface de menu, les deux sont des demandes HTTPS.
1: Créez un gestionnaire de confiance de certificat
Pour les demandes HTTPS, nous avons besoin d'un Certificate Trust Manager. Cette classe Manager doit être définie par elle-même, mais elle doit implémenter l'interface X509TrustManager. Le code est le suivant:
Package org.liufeng.weixin.util; Importer java.security.cert.certificateException; Importer java.security.cert.x509Certificate; Importer javax.net.ssl.x509TrustManager; / ** * Certificate Trust Manager (pour les demandes HTTPS) * * @author liufeng * @Date 2013-08-08 * / public class MyX509TrustManager implémente x509TrustManager {public void CheckClientTruted (x509Certificate [] chaîne, string authype) Throws CertificateException {} public Void CheckServerTruted (x509Certificate [] chaîne, String AuthType) lève CertificateException {} public x509Certificate [] getACceptedSisuers () {return null; }} La fonction du gestionnaire de certificats est de faire confiance à tous les certificats spécifiés.
2: Créez une demande HTTPS universelle
La demande universelle HTTPS devrait
1) Prise en charge des demandes HTTPS;
2) Support Get and Post;
3) Soumission des paramètres de support et supporte également aucun paramètre;
Package org.liufeng.weixin.util; Importer java.io.bufferedReader; import java.io.inputStream; Importer java.io.inputStreamReader; import java.io.outputStream; import java.net.connectException; Importer java.net.url; Importer javax.net.ssl.httpsurlconnection; import javax.net.ssl.sslcontext; Importer javax.net.ssl.sslsockingfactory; import javax.net.ssl.trustManager; importer net.sf.json.jsonObject; import org.slf4j.logger; import org.slf4j.loggerfactory; / ** * Classe d'outils d'interface générale de plate-forme publique * * @author liuyq * @date 2013-08-09 * / public class weixinutil {private static logger log = loggerfactory.getLogger (weixinutil.class); / ** * Initier la demande HTTPS et obtenir le résultat * * @param demande de demande d'adresse * @Param RequestMethod Request Method (get, post) * @param outputstr data soumis * @return jsonObject (Obtenez la valeur d'attribut de l'objet JSON via JSONObject.get (Key)) * / public static jsonObject httprequest (string requestrull JSONObject = null; StringBuffer Buffer = new StringBuffer (); Essayez {// Créez un objet SSLContext et initialisez TrustManager [] tm = {new Myx509TrustManager ()}; SslContext sslcontext = sslcontext.getInstance ("ssl", "sunjsse"); sslcontext.init (null, tm, new java.security.securerAndom ()); // Obtenez l'objet SSLSocketFactory de l'objet SSLContext ci-dessus sslSocketFactory ssf = sslContext.getSocketFactory (); Url url = nouvelle URL (requestUrl); HttpSurlConnection httpurlConn = (httpSurlConnection) url.openconnection (); httpurlConn.SetsSLSocketFactory (SSF); httpurlConn.setDoOutput (true); httpurlConn.setDoInput (true); httpurlConn.seTUsecaches (false); // Définir la méthode de la demande (get / post) httpurlConn.setRequestMethod (requestMethod); if ("get" .equalsIgnoreCase (requestMethod)) httpurlConn.connect (); // Lorsqu'il existe des données qui doivent être soumises si (null! = Outputstr) {outputStream outputStream = httpurlConn.getOutputStream (); // prête attention au format de codage pour empêcher le chinois de sortie BrilledStstream.write (outputstr.getBytes ("UTF-8")); outputStream.close (); } // Convertir le flux d'entrée renvoyé en une chaîne inputStream inputStream = httpurlConn.getInputStream (); InputStreamReader inputStreamReader = new inputStreamReader (inputStream, "utf-8"); BufferedReader BufferedReader = new BufferedReader (InputStreamReader); String str = null; while ((str = bufferedReader.readline ())! = null) {buffer.append (str); } bufferedReader.close (); inputStreamReader.close (); // Release Resource inputStream.close (); inputStream = null; httpurlConn.disconnect (); JSONObject = jsonObject.FromObject (Buffer.ToString ()); } catch (ConnectException CE) {Log.Error ("La connexion du serveur Weixin a chronométré."); } catch (exception e) {log.error ("Erreur de demande https: {}", e); } return jsonObject; }} 4. Classe d'entité de menu encapsulé
1: Classification des boutons
Nous considérons généralement les éléments de menu personnalisés comme des boutons, et les types de boutons sont divisés en clic (événement cliquez) et affichez (visitez les pages Web).
Les boutons du type de clic ont trois attributs: type, nom et clé, tandis que les boutons de la vue ont trois attributs: type, nom et URL
2: Tout d'abord, après avoir appelé l'interface d'identification d'accès, le serveur WeChat renverra les données au format JSON: {"Access_token": "Access_token", "expires_in": 7200}. Nous l'encapsulons comme un objet AccessToken. L'objet a deux attributs: jeton et expiresin, le code est le suivant:
package org.liufeng.weixin.pojo; / ** * WECHAT Universal Interface Indementials * * @author liufeng * @Date 2013-08-08 * / public class AccessToken {// Le jeton de chaîne privé obtenu des informations d'identification; // Le temps de validité des informations d'identification, unité: secondes privées int expiresin; public String getToken () {return token; } public void Setthen (token de chaîne) {this.token = token; } public int getExpiresin () {return expiresIn; } public void setExpiresIn (int expiresin) {this.expiresin = expiresin; }} Vient ensuite l'encapsulation de la structure du menu. Parce que nous utilisons la programmation orientée objet, les données finales du menu de format JSON soumises doivent être directement converties à partir de l'objet, plutôt que d'orthographe de nombreuses données JSON dans le code du programme. L'encapsulation de la structure du menu est basée sur la structure du menu du format JSON donné dans le document API de la plate-forme publique, comme indiqué ci-dessous:
Exemple de demande de clic et de vue
{"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": "View", "Name": "Video", "URL": "http://v.qq.com/"}, {"type": "cliquez", "nom": "comme nous", "key": "v1001_good"}]}]]} 3: Structure du menu d'encapsulation
Chaque objet de bouton a besoin d'un attribut de nom commun, donc une classe de base d'objets de bouton doit être définie et tous les objets de bouton doivent hériter de cette classe. Le code de la classe de base est le suivant:
package org.liufeng.weixin.pojo; / ** * Classe de base du bouton * * @author liufeng * @Date 2013-08-08 * / Button de classe publique {Nom de chaîne privée; public String getName () {Nom de retour; } public void setName (string name) {this.name = name; }} Vient ensuite l'encapsulation de l'élément sous-menu. Le sous-menu est défini ici comme suit: Un élément de menu sans sous-menu peut être un élément de menu secondaire ou un menu principal qui ne contient pas de menu secondaire. Ce type d'élément sous-menu doit contenir trois attributs: type, nom et clé. Le code encapsulé est le suivant:
package org.liufeng.weixin.pojo; / ** * Bouton normal (Subbutton) * * @author liufeng * @date 2013-08-08 * / classe publique CommonButton étend le bouton {Type de chaîne privée; clé de chaîne privée; public String getType () {return type; } public void setType (String Type) {this.type = type; } public String getKey () {return key; } public void setKey (string key) {this.key = key; }} Définition de l'élément de menu parent: Un menu de premier niveau contenant des éléments de menu secondaire. Ce type d'éléments de menu contient deux propriétés: Nom et Sub_Button, et Sub_Button est un tableau d'éléments sous-menu. Le code d'encapsulation de l'élément de menu parent est le suivant:
package org.liufeng.weixin.pojo; / ** * Bouton complexe (bouton parent) * * @author liufeng * @date 2013-08-08 * / classe publique ComplexButton étend le bouton {bouton privé [] sub_button; bouton public [] getSub_button () {return sub_button; } public void setsub_button (bouton [] sub_button) {this.sub_button = sub_button; }} Encapsuler l'intégralité du menu. L'objet de menu contient plusieurs éléments de menu (tout au plus, il peut y en avoir 3). Ces éléments de menu peuvent être des éléments sous-menu (menu de premier niveau sans menus secondaires) ou des éléments de menu parent (éléments de menu contenant des menus secondaires)
package org.liufeng.weixin.pojo; / ** * Menu * * @author liufeng * @Date 2013-08-08 * / Menu de classe publique {bouton privé [] bouton; Bouton public [] getButton () {Button de retour; } public void setButton (bouton [] bouton) {this.button = bouton; }}De cette façon, nous terminons l'encapsulation de la classe d'entité de menu.
Comment obtenir des informations d'identification access_token
Continuez à ajouter le code suivant à la classe Weixinutil.java de la méthode de demande universelle précédente pour obtenir des informations d'accès à l'interface:
// Obtenez l'adresse d'interface d'accès_token (GET) Limited à 200 fois / jour publique final String static Access_token_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=Client_Credential&appid=Appid&secret=AppSecret"; / ** * Get Access_token * * @param appid idemedential * @param appSecret Key * @return * / public static accessToken getAccessToken (String appid, string appSecret) {AccessToken AccessToken = null; String requestUrl = access_token_url.replace ("appid", appid) .replace ("appsecret", appSecret); JSONObject JSONObject = httpRequest (requestUrl, "get", null); // si la demande réussit si (null! = JsonObject) {try {AccessToken = new AccessToken (); AccessToken.setToken (jsonObject.getString ("Access_token")); accessToken.setExpiresIn (jsonObject.getInt ("exires_in")); } catch (jSonException e) {AccessToken = null; // n'a pas réussi à obtenir un log.Error ("échoué pour obtenir un jet de token: {} errmsg: {}", jsonObject.getInt ("errcode"), jsonObject.getString ("errmsg")); }} return AccessToken; } Comment créer un menu personnalisé
Continuez à ajouter le code suivant à la classe Weixinutil.java de la méthode de demande universelle précédente pour créer un menu personnalisé:
// Création de menu (post) limité à 100 fois / jour public static String menu_create_url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=access_token"; / ** * Créer le menu * * @param Menu Menu Exemple * @param AccessToken valid Access_Token * @return 0 signifie succès, d'autres valeurs indiquent l'échec * / public static int createmenu (menu menu, String AccessToken) {int result = 0; // Assemblez l'URL de la chaîne de menu de création url = menu_create_url.replace ("access_token", accessToken); // Convertir l'objet de menu en json string string jsonMenu = jsonObject.fromObject (menu) .toString (); // Appelez l'interface pour créer le menu jsonObject jSonObject = httpRequest (url, "post", jsonMenu); if (null! = jsonObject) {if (0! = jsonObject.getInt ("errcode")) {result = jsonObject.getInt ("errcode"); log.Error ("Create Menu a échoué errcode: {} errmsg: {}", jsonObject.getInt ("errcode"), jsonObject.getString ("errmsg")); }} Retour Résultat; } Appel de méthodes encapsulées pour créer des menus personnalisés
Package org.liufeng.weixin.main; import org.liufeng.weixin.pojo.accesstoken; import org.liufeng.weixin.pojo.button; import org.liufeng.weixin.pojo.commonButton; import org.liufeng.weixin.pojo.complexbutton; import org.liufeng.weixin.pojo.menu; import org.liufeng.weixin.util.weixinutil; import org.slf4j.logger; import org.slf4j.loggerfactory; / ** * Menu Manager Class * * @author liufeng * @Date 2013-08-08 * / public class MenuManager {private static logger log = loggerfactory.getlogger (menumanager.class); public static void main (String [] args) {// Utilisateur tiers UNIQUE COURTENCE String appid = "00000000000000000"; // Utilisateur tiers UNIQUE CEDENAL CEALDING String AppSecret = "000000000000000000000000000000000000000"; // appelle l'interface pour obtenir Access_token AccessToken à = weixinutil.getAccessToken (appid, appSecret); if (null! = at) {// Appelez l'interface pour créer le menu int résultat = weixinutil.createmenu (getMenu (), at.gettoken ()); // déterminer le résultat de la création de menu si (0 == résultat) log.info ("La création de menu a réussi!"); else log.info ("Création de menu a échoué, code d'erreur:" + résultat); }} / ** * assembler les données de menu * * @return * / menu statique privé getMenu () {CommonButton btn11 = new CommonButton (); btn11.setname ("prévision météorologique"); btn11.setType ("cliquez"); btn11.setkey ("11"); CommonButton BTN12 = New CommonButton (); BTN12.SetName ("Bus Query"); BTN12.SetType ("Click"); BTN12.SetKey ("12"); CommonButton BTN13 = New CommonButton (); BTN13.SetName ("Recherche périphérique"); BTN13.SetType ("Click"); BTN13.SetKey ("13"); CommonButton BTN14 = New CommonButton (); BTN14.SetName ("Aujourd'hui dans l'histoire"); BTN14.SetType ("Click"); BTN14.SetKey ("14"); CommonButton BTN21 = New CommonButton (); btn21.setName ("Song on Demand"); btn21.setType ("cliquez"); btn21.setkey ("21"); CommonButton BTN22 = New CommonButton (); BTN22.SetName ("Game classique"); btn22.setType ("cliquez"); BTN22.SetKey ("22"); CommonButton BTN23 = New CommonButton (); btn23.setName ("belle radio"); btn23.setType ("cliquez"); BTN23.SetKey ("23"); CommonButton BTN24 = new CommonButton (); BTN24.SetName ("Reconnaissance du visage"); BTN24.SetType ("Click"); BTN24.SetKey ("24"); CommonButton BTN25 = New CommonButton (); btn25.setName ("chat"); BTN25.SetType ("Click"); BTN25.SetKey ("25"); CommonButton BTN31 = New CommonButton (); btn31.setName ("Q Friends Circle"); btn31.setType ("cliquez"); btn31.setkey ("31"); CommonButton BTN32 = New CommonButton (); btn32.setName ("Ranking de films"); btn32.setType ("cliquez"); btn32.setKey ("32"); CommonButton BTN33 = New CommonButton (); btn33.setname ("blague humoristique"); BTN33.SetType ("Click"); btn33.setKey ("33"); ComplexButton mainBtn1 = new complexButton (); mainbtn1.setName ("Life Assistant"); mainbtn1.setsub_button (New CommonButton [] {btn11, btn12, btn13, btn14}); ComplexButton mainBtn2 = new complexButton (); MainBtn2.SetName ("Station Lucky"); MainBtn2.SetSub_Button (New CommonButton [] {BTN21, BTN22, BTN23, BTN24, BTN25}); ComplexButton mainBtn3 = new complexButton (); MainBtn3.SetName ("plus d'expérience"); MainBtn3.SetSub_Button (New CommonButton [] {BTN31, BTN32, BTN33}); / ** * Il s'agit de la structure de menu actuelle du compte officiel xiaoqrobot. Chaque menu de premier niveau a un élément de menu de deuxième niveau * * S'il n'y a pas de menu de deuxième niveau dans un certain menu de premier niveau, comment le menu doit-il être défini? * Par exemple, le troisième élément de menu de niveau un n'est pas "plus d'expérience", mais est directement "blague d'humour", alors le menu doit être défini comme ceci: * menu.setButton (nouveau bouton [] {MainBtn1, mainbtn2, btn33}); * / Menu menu = nouveau menu (); menu.setButton (nouveau bouton [] {mainbtn1, mainbtn2, mainbtn3}); menu de retour; }}Remarque: Lorsque vous exécutez le code ci-dessus, vous devez remplacer l'AppID et AppSecret par votre propre compte officiel.
Réponse au menu Cliquez sur l'événement
Package org.liufeng.course.service; Importer java.util.date; importation java.util.map; Importer javax.servlet.http.httpservletRequest; import org.liufeng.ccourse.message.resp.TextMessage; Import org.liufeng.course.util.messageutil; / ** * CLASSE DE SERVICE CORE * * @Author Liufeng * @Date 2013-05-20 * / classe publique CoreService {/ ** * Processus Demandes de WeChat * * @param request * @return * / public static string processRequest (httpServleTrequest request) {String respsensage = null; Essayez {// Le contenu du message texte renvoyé par défaut String respact = "Demande d'exception de gestion, veuillez essayer!"; // Map d'analyse de demande XML <String, String> requestMap = MessageUtil.ParsExml (request); // String du compte Sender (Open_ID) FROMUSERNAME = requestmap.get ("FromUserName"); // String de compte public Tausername = requestmap.get ("Tausername"); // Type de message String msgType = requestmap.get ("msgType"); // Répondre au message texte textMessage textMessage = new TextMessage (); textMessage.setTouserName (FromUserName); textMessage.setFromUsername (Tausername); textMessage.setCreateTime (new Date (). GetTime ()); textMessage.setmsGtype (messageutil.resp_message_type_text); textMessage.setfuncflag (0); // Message texte if (msgType.equals (messageutil.req_message_type_text)) {respacent = "Vous envoyez un message texte!"; } // Message d'image else if (msgtype.equals (messageutil.req_message_type_image)) {respacent = "vous envoyez un message d'image!"; } // Message d'emplacement géographique else if (msgtype.equals (messageutil.req_message_type_location)) {respact = "Vous envoyez un message d'emplacement géographique!"; } // Message de liaison else if (msgtype.equals (messageutil.req_message_type_link)) {respact = "Vous envoyez un message de lien!"; } // message audio else if (msgtype.equals (messageutil.req_message_type_voice)) {respact = "vous envoyez un message audio!"; } // Événement push else if (msgtype.equals (messageutil.req_message_type_event)) {// Type d'événement String EventType = requestMap.get ("Event"); // Abonnez-vous if (eventType.equals (messageutil.event_type_subscribe)) {respact = "Merci pour votre attention!"; } // Désubscribe else if (eventType.equals (messageutil.event_type_unsubscribe)) {// todo après désabscribe, l'utilisateur ne peut pas recevoir le message envoyé par le compte officiel, il n'y a donc pas besoin de répondre au message} // menu personnalisé Cliquez sur Event else if (eventType.Equals (MessageUtil. spécifié lors de la création de la chaîne de menu personnalisée EventKey = requestmap.get ("EventKey"); if (eventKey.equals ("11")) {respontent = "Les éléments du menu de prévision météo sont cliqués!"; } else if (eventKey.equals ("12")) {respacent = "L'élément de menu de requête de bus a été cliqué!"; } else if (eventKey.equals ("13")) {respacent = "L'élément de menu de recherche périphérique est cliqué!"; } else if (eventKey.equals ("14")) {respacent = "L'élément de menu de l'histoire a été cliqué!"; } else if (eventKey.equals ("21")) {respacent = "L'élément de menu Song On Demand est cliqué!"; } else if (eventKey.equals ("22")) {respacent = "L'élément de menu de jeu classique est cliqué!"; } else if (eventKey.equals ("23")) {respacent = "L'élément de menu de radio Beauty a été cliqué!"; } else if (eventKey.equals ("24")) {respontent = "L'élément de menu de reconnaissance face est cliqué!"; } else if (eventKey.equals ("25")) {respontent = "L'élément de menu de chat est cliqué!"; } else if (eventKey.equals ("31")) {respacent = "L'élément de menu du cercle Q a été cliqué!"; } else if (eventKey.equals ("32")) {respact) "L'élément de menu de classement du film est cliqué!"; } else if (eventKey.equals ("33")) {respacent = "L'élément de menu de blague d'humour est cliqué!"; }}} textMessage.setContent (respontent); respMessage = MessageUtil.TextMessageTOxML (TextMessage); } catch (exception e) {e.printStackTrace (); } return reswessage; }}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.