El menú personalizado de la plataforma pública de WeChat Development requiere que el dinero sea certificado para lograr. Si no desea gastar dinero, solo puede jugar con la cuenta de prueba, pero esto no afecta el desarrollo. Mi desarrollo se basa en el desarrollo de aplicaciones de la plataforma pública WeChat del maestro Liu Feng.
Mientras usemos la plataforma pública para probar la cuenta, podemos desarrollar un menú personalizado. Es más conveniente. La cuenta de prueba tiene muchas interfaces, lo cual es muy conveniente.
Al desarrollar un menú personalizado, puede consultar el menú personalizado en la documentación del desarrollador de la plataforma pública WeChat para crearlo.
1. Personalizar menú
1. Los menús personalizados incluyen hasta 3 menús de primer nivel, y cada menú de primer nivel contiene hasta 5 menús de segundo nivel.
2. El menú de primer nivel tiene hasta 4 caracteres chinos, y el menú de segundo nivel tiene hasta 7 caracteres chinos. Las partes adicionales serán reemplazadas por "...".
3. Después de crear un menú personalizado, la estrategia de actualización del menú es que cuando el usuario ingresa a la página de sesión de cuenta oficial o la página de perfil de cuenta oficial, si encuentra que la última solicitud para extraer el menú fue hace 5 minutos, extraerá el menú. Si el menú se actualiza, el menú del cliente se actualizará. Durante la prueba, puede intentar dejar de seguir la cuenta pública y seguirla nuevamente, luego
Puedes ver el efecto después de la creación.
La interfaz de menú personalizada puede implementar múltiples tipos de botones, de la siguiente manera:
1. Haga clic: haga clic para presionar el evento
Después de que el usuario hace clic en el botón Tipo de clic, el servidor WeChat presionará la estructura del evento de tipo de mensaje al desarrollador a través de la interfaz de mensaje (consulte la Guía de la interfaz de mensajes) y traerá el valor de clave completado por el desarrollador en el botón. El desarrollador puede interactuar con el usuario a través del valor de clave personalizado;
2. Ver: URL de salto
Después de que el usuario hace clic en el botón Ver tipo de vista, el cliente WeChat abrirá la URL de la página web que llena el desarrollador en el botón, que se puede combinar con la autorización de la página web para obtener la interfaz de información básica del usuario para obtener información básica del usuario.
3. Scancode_push: Código de escaneo para presionar el evento
Después de que el usuario haga clic en el botón, el cliente WeChat llamará a la herramienta de escaneo y mostrará el resultado de escaneo después de completar la operación de escaneo (si es una URL, ingresará a la URL), y el resultado de escaneo se pasará al desarrollador, y el desarrollador puede enviar un mensaje.
4. Scancode_waitmsg: escanee el código para presionar el evento y aparece el cuadro de solicitud "Mensaje de recibir"
Después de que el usuario haga clic en el botón, el cliente WeChat llamará a la herramienta de escaneo. Después de completar la operación del código de escaneo, pase el resultado del código de escaneo al desarrollador. Al mismo tiempo, la herramienta de escaneo está cerrada, y aparece el cuadro de solicitud "Mensaje de recibir", y luego se puede recibir un mensaje enviado por el desarrollador.
5. Pic_Sysphoto: sistema emergente para tomar fotos y publicar fotos
Después de que el usuario haga clic en el botón, el cliente WeChat ajustará la cámara del sistema. Después de completar la operación fotográfica, enviará las fotos capturadas al desarrollador y llevará el evento al desarrollador. Al mismo tiempo, sostendrá la cámara del sistema y luego recibirá un mensaje enviado por el desarrollador.
6. PIC_PHOTO_OR_ALBUM: Emplee y tome fotos o publique fotos en el álbum
Después de que el usuario haga clic en el botón, el cliente WeChat aparecerá el selector para que el usuario seleccione "Toma una foto" o "Seleccione del álbum de teléfonos móviles". Después de que el usuario seleccione, pasará por los otros dos procesos.
7. Pic_weixin: emisor de álbum de fotos de WeChat Pop-Up WeChat
Después de que el usuario haga clic en el botón, el cliente WeChat ajustará el álbum WeChat. Después de completar la operación de selección, enviará la foto seleccionada al servidor del desarrollador y empujará el evento al desarrollador. Al mismo tiempo, el álbum estará cerrado. Entonces, se puede recibir un mensaje del desarrollador.
8. Ubicación_Select: Selector de geolocalización emergente
Después de que el usuario haga clic en el botón, el cliente WeChat llamará a la herramienta de selección de geolocalización. Después de completar la operación de selección, enviará la ubicación geográfica seleccionada al servidor del desarrollador, y al mismo tiempo, cerrará la herramienta de selección de ubicación y luego recibirá un mensaje enviado por el desarrollador.
9. Media_id: enviar un mensaje (excepto el mensaje de texto)
Después de que el usuario hace clic en el botón Tipo Media_ID, el servidor WeChat enviará el material correspondiente al ID de material permanente completado por el desarrollador al usuario. Los tipos de material permanente pueden ser imágenes, audio, video y mensajes gráficos. Tenga en cuenta: la ID de material permanente debe ser la ID legal obtenida después de cargar la interfaz "Gestión de material/Agregar material permanente".
10. Ver_LIMITED: salta a la URL del mensaje de texto
Después de que el usuario hace clic en el botón View_Limited Type, el cliente WeChat abrirá la URL del mensaje gráfico correspondiente a la ID de material permanente que el desarrollador llena en el botón. El tipo de material permanente solo admite un mensaje gráfico. Tenga en cuenta: la ID de material permanente debe ser la identificación legal obtenida después de cargar la interfaz "Gestión de material/Agregar material permanente"
2. Acceda a la interfaz de menú personalizada
1: Obtener access_token
La creación, consulta y eliminación de menús personalizados requieren llamar a la interfaz de menú personalizada abierta a la plataforma pública. Para llamar a esta interfaz, debe obtener access_token (credenciales de acceso a la interfaz). Todas estas interfaces se basan en el protocolo HTTPS, por lo que primero debemos resolver el problema de cómo enviar solicitudes HTTPS en los programas Java.
Obtenga las credenciales de acceso a la interfaz Access_Token:
Se accede a Access_Token a través de Get:
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=appid&secret=appsecret
Hay tres parámetros en el enlace, a saber, Grant_Type, Appid y Secret. De acuerdo con la descripción del parámetro en la figura, Grant_Type pasa el valor fijo Client_Credential, y WeChat nos asigna APPID y Secret después de solicitar el menú personalizado.
Después de que la solicitud se envíe correctamente, el servidor WeChat devolverá una cadena JSON, que incluye access_token y expires_in. Entre ellos, Access_Token es la credencial que necesitamos al final, y expires_in es el período de validez de la credencial, la unidad es de segundos y 7200 segundos es de 2 horas. Esto significa que cada vez que accede a una interfaz especial, debe volver a adquirir el access_token, y puede usarse siempre que el access_token todavía esté dentro del período de validez.
2: Creación de menú
Para crear un menú, llame a la interfaz del menú
Descripción de la solicitud de llamada de interfaz
Método de solicitud http: Publicar (utilice el protocolo HTTPS) https://api.weixin.qq.com/cgi-bin/menu/create?access_token=access_token
De hecho, es enviar una cadena de menú JSON en la publicación a la dirección https://api.weixin.qq.com/cgi-bin/menu/create?access_token=access_token.
3. Encapsular el método de solicitud general (Administrador de fideicomiso personalizado)
Para crear un menú, uno es obtener la interfaz Access_Token y la otra es personalizar la interfaz de menú, ambas son solicitudes HTTPS.
1: crear un certificado de gerente de confianza
Para las solicitudes HTTPS, necesitamos un gerente de fideicomiso de certificado. Esta clase de administrador debe definirse por sí misma, pero necesita implementar la interfaz X509TrustManager. El código es el siguiente:
paquete org.liufeng.weixin.util; import java.security.cert.certificateException; import java.security.cert.x509Certificate; import javax.net.ssl.x509TrustManager; / ** * Certificate Trust Manager (para solicitudes HTTPS) * * @author liufeng * @Date 2013-08-08 */ public class Myx509TrustManager implementa x509TrustManager {public void checkClientTrusted (x509Certificate [] cadena, cadena authtype) lanza certificadas de certificación {} void void checkServerTrusted (x509Certificate [] cadena, string authtype) lanza certificateException {} public x509Certificate [] getacceptedissuers () {return null; }} La función del administrador de certificados es confiar en todos los certificados especificados.
2: crear una solicitud HTTPS universal
La solicitud de HTTPS universal debe
1) Soporte de solicitudes HTTPS;
2) Soporte Get and Post;
3) soporte de parámetros de soporte y tampoco admite parámetros sin parámetros;
paquete org.liufeng.weixin.util; import java.io.bufferedReader; import java.io.inputstream; import java.io.inputstreamreader; import java.io.outputstream; import java.net.connectException; import java.net.url; import javax.net.ssl.httpsurlconnection; import javax.net.ssl.sslcontext; import javax.net.ssl.sslsocketfactory; import javax.net.ssl.trustmanager; importar net.sf.json.jsonObject; importar org.slf4j.logger; importar org.slf4j.loggerFactory; / ** * Clase de herramienta de interfaz general de plataforma pública * * @author liuyq * @date 2013-08-09 */ public class weixinutil {private static logger log = loggerFactory.getLogger (weixinutil.class); / *** Inicie la solicitud HTTPS y obtenga el resultado** @Param Solicitar la dirección de solicitud* @param RequestMethod Solicitud Método (get, post)* @param salida stentstr envío data* @return jsonObject (obtenga el valor de atributo del objeto json a través de jsonObject.get (key)*/ public JSonObject htttPrequest (string requestsurletmethod, string outystr) {jonObject static jSonObject httPrequest (string requestmethod, string shonoutStroT, striEutStROUT). jsonObject = nulo; StringBuffer Buffer = new StringBuffer (); Pruebe {// Cree un objeto SSLContext e inicialice TrustManager [] tm = {new MyX509TrustManager ()}; SslContext sslContext = sslContext.getInstance ("SSL", "SunJSse"); sslContext.init (NULL, TM, New Java.Security.SeCurerandom ()); // Obtenga el objeto SSLSocketFactory del objeto SSLContext anterior SSLSocketFactory ssf = sslContext.getSocketFactory (); Url url = nueva url (requestUrl); Httpsurlconnection httpurlconn = (httpsurlconnection) url.openconnection (); httpurlconn.setsslsocketFactory (SSF); httpurlconn.setDoOutput (true); httpurlconn.setDoInput (verdadero); httpurlconn.setUsecaches (falso); // Establecer el método de solicitud (get/post) httpurlconn.setRequestMethod (requestMethod); if ("get" .equalSignorecase (requestMethod)) httpurlconn.connect (); // Cuando hay datos que deben enviarse si (NULL! = OutputStr) {outputStream outputStream = httpurlConn.getOutputStream (); // Presta atención al formato de codificación para evitar la salida de la luz de los conflictos chinos.write (outputstr.getBytes ("UTF-8")); outputStream.close (); } // Convierta la secuencia de entrada devuelta a una cadena inputStream inputStream = httpurlconn.getInputStream (); InputStreamReader inputStreamReader = new InputStreamReader (inputStream, "UTF-8"); BufferedReader BufferedReader = new BufferedReader (inputStreamReader); Cadena str = nulo; while ((str = bufferedReader.readline ())! = null) {buffer.append (str); } bufferedReader.close (); inputStreamReader.Close (); // Liberar recursos inputStream.close (); inputStream = nulo; httpurlconn.disconnect (); jsonObject = jsonObject.FromObject (buffer.ToString ()); } Catch (ConnectException CE) {log.error ("Conexión del servidor Weixin cronometrado"); } catch (excepción e) {log.error ("Error de solicitud https: {}", e); } return jsonObject; }} 4. Clase de entidad de menú encapsular
1: Clasificación de botones
Por lo general, consideramos los elementos del menú personalizados como botones, y los tipos de botones se dividen en hacer clic (hacer el evento) y ver (visite páginas web).
Los botones del tipo de clic tienen tres atributos: tipo, nombre y tecla, mientras que los botones de vista tienen tres atributos: tipo, nombre y URL
2: Primero, después de llamar a la interfaz de la credencial de acceso, el servidor WeChat devolverá los datos en formato JSON: {"access_token": "access_token", "expires_in": 7200}. Lo encapsulamos como un objeto de acceso de acceso. El objeto tiene dos atributos: Token y Expiresin, el código es el siguiente:
paquete org.liufeng.weixin.pojo; / ** * WeChat Credenciales de la interfaz universal * * @author liufeng * @date 2013-08-08 */ public class AccessToken {// Las credenciales obtenidas de la cadena privada Token; // El tiempo de validez de las credenciales, unidad: segundos private int expires; public String getToken () {return token; } public void setToken (token de cadena) {this.token = token; } public int getExpiresin () {return expiresIn; } public void setExpiresin (int expiresin) {this.expiresin = expiresIn; }} La siguiente es la encapsulación de la estructura del menú. Debido a que usamos la programación orientada a objetos, los datos finales del menú de formato JSON enviado deben convertirse directamente desde el objeto, en lugar de deletrear muchos datos JSON en el código del programa. La encapsulación de la estructura del menú se basa en la estructura del menú del formato JSON dada en el documento API de la plataforma pública, como se muestra a continuación:
Ejemplo de solicitud para hacer clic y ver
{"Botón": [{"tipo": "Click", "Nombre": "Canción de hoy", "Key": "V1001_Today_Music"}, {"Nombre": "Menú", "Sub_Button": [{"Tipo": "View", "Nombre": "Buscar", "Url": "Http://www.SoSo.SoSo/" ", {{ "Tipo": "Ver", "Nombre": "Video", "Url": "http://v.qq.com/"}, {"Tipo": "Click", "Nombre": "Like Us", "Key": "V1001_good"}]}]}}}] 3: Estructura del menú de encapsulación
Cada objeto de botón necesita un atributo de nombre común, por lo que se debe definir una clase base de objeto de botón, y todos los objetos de botón deben heredar esta clase. El código de la clase base es el siguiente:
paquete org.liufeng.weixin.pojo; / ** * clase base del botón * * @author liufeng * @date 2013-08-08 */ Button de clase pública {nombre de cadena privada; public String getName () {nombre de retorno; } public void setName (nombre de cadena) {this.name = name; }} La siguiente es la encapsulación del elemento submenú. El submenú se define aquí de la siguiente manera: un elemento de menú sin un submenú puede ser un elemento de menú secundario o un menú principal que no contiene un menú secundario. Este tipo de elemento de submenú debe contener tres atributos: tipo, nombre y clave. El código encapsulado es el siguiente:
paquete org.liufeng.weixin.pojo; / ** * botón normal (subbutton) * * @author liufeng * @date 2013-08-08 */ public class CommonButton extiende el botón {Tipo de cadena privada; clave de cadena privada; public String getType () {Tipo de retorno; } public void settype (tipo de cadena) {this.type = type; } public String getKey () {Key de retorno; } public void setKey (tecla de cadena) {this.key = key; }} Definición del elemento del menú principal: un menú de primer nivel que contiene elementos de menú secundario. Este tipo de elementos del menú contiene dos propiedades: Nombre y Sub_Button, y Sub_Button es una matriz de elementos submenú. El código de encapsulación del elemento del menú principal es el siguiente:
paquete org.liufeng.weixin.pojo; / ** * Botón complejo (botón principal) * * @author liufeng * @date 2013-08-08 */ public class ComplexButton extiende el botón {botón privado [] sub_button; Button public [] getSub_Button () {return sub_button; } public void setSub_Button (botón [] sub_button) {this.sub_button = sub_button; }} Encapsular todo el menú. El objeto de menú contiene múltiples elementos de menú (como máximo, puede haber 3). Estos elementos del menú pueden ser elementos submenú (menú de primer nivel sin menús secundarios) o elementos del menú de padres (elementos de menú que contienen menús secundarios)
paquete org.liufeng.weixin.pojo; / ** * menú * * @author liufeng * @Date 2013-08-08 */ Menú de clase pública {botón privado [] Botón; Button public [] getButton () {Botón de retorno; } public void setButton (botón [] botón) {this.Button = Button; }}De esta manera, completamos la encapsulación de la clase de entidad del menú.
Cómo obtener Credencial Access_Token
Continúe agregando el siguiente código a la clase weixinutil.java del método de solicitud universal anterior para obtener credenciales de acceso a la interfaz:
// Obtenga la dirección de interfaz de Access_Token (Get) Limited a 200 veces/día Public final static string access_token_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=appid&secret=appSecret"; / ** * Get Access_token * * @param Appid Credential * @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 solicitud es exitosa if (null! = JsonObject) {try {accessToken = new AccessToken (); Accesstoken.setToken (jsonObject.getString ("access_token")); accesstoken.setExpiresin (jsonObject.getInt ("expires_in")); } catch (JSonexception e) {accessToken = null; // no se pudo obtener token log.error ("no se pudo obtener token errcode: {} errmsg: {}", jsonObject.getInt ("errcode"), jsonObject.getString ("errmsg")); }} return accessToken; } Cómo crear un menú personalizado
Continúe agregando el siguiente código a la clase weixinutil.java del método de solicitud universal anterior para crear un menú personalizado:
// Creación de menú (POST) Limitada a 100 veces/día de cadena estática pública menú_create_url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=access_token"; / *** Crear menú** @param Ejemplo del menú del menú* @param Accesstoken válido access_token* @return 0 significa éxito, otros valores indican falla*/ public static int CreateMenu (menú de menú, string accessToken) {int resultado = 0; // Ensamble la URL de la cadena del menú de creación url = menú_create_url.replace ("access_token", accessToken); // Convertir objeto de menú a cadena json string jsonmenu = jsonObject.FromObject (menú) .ToString (); // llame a la interfaz para crear menú jsonObject jsonObject = httprequest (url, "post", jsonmenu); if (null! = jsonObject) {if (0! = jsonObject.getInt ("errcode")) {result = jsonObject.getInt ("errcode"); log.error ("Crear menú fallido Errcode: {} errmsg: {}", jsonObject.getInt ("errcode"), jsonObject.getString ("errmsg")); }} Resultado de retorno; } Llame a los métodos encapsulados para crear menús personalizados
paquete org.liufeng.weixin.main; importar org.liufeng.weixin.pojo.accesstoken; importar org.liufeng.weixin.pojo.button; importar org.liufeng.weixin.pojo.commonbutton; importar org.liufeng.weixin.pojo.complexbutton; importar org.liufeng.weixin.pojo.menu; importar org.liufeng.weixin.util.weixinutil; importar org.slf4j.logger; importar org.slf4j.loggerFactory; / ** * Clase del administrador del menú * * @author liufeng * @date 2013-08-08 */ public class Menumanager {private static logger log = loggerFactory.getLogger (Menumanager.class); public static void main (string [] args) {// usuarios de terceros Credential String String Appid = "000000000000000000000"; // CRECINA DE CREDENCIALES UNÚSER DEL USUARIO Cadena de Credencial AppSecret = "00000000000000000000000000000000000000000 ÚLTIMOS"; // llame a la interfaz para obtener access_token accesstoken at = weixinutil.getAccessToken (appid, appSecret); if (null! = at) {// llame a la interfaz para crear menú int resultado = weixinutil.createMenu (getMenu (), at.getToken ()); // determinar el resultado de la creación del menú si (0 == resultado) log.info ("¡Creación del menú sucedido!"); else log.info ("Falló la creación del menú, código de error:" + resultado); }} / ** * Ensamble los datos del menú * * @return * / menú estático privado getMenu () {CommonButton btn11 = new CommonButton (); btn11.setName ("pronóstico del tiempo"); btn11.settype ("hacer clic"); btn11.setkey ("11"); CommonButton btn12 = new CommonButton (); btn12.setName ("consulta de bus"); btn12.settype ("hacer clic"); btn12.setkey ("12"); CommonButton BTN13 = new CommonButton (); btn13.setName ("búsqueda periférica"); btn13.settype ("hacer clic"); btn13.setkey ("13"); CommonButton BTN14 = new CommonButton (); btn14.setName ("Hoy en la historia"); btn14.settype ("hacer clic"); btn14.setkey ("14"); CommonButton BTN21 = new CommonButton (); btn21.setName ("Song On Demand"); btn21.settype ("hacer clic"); btn21.setkey ("21"); CommonButton BTN22 = new CommonButton (); btn22.setName ("juego clásico"); btn22.settype ("hacer clic"); btn22.setkey ("22"); CommonButton BTN23 = new CommonButton (); btn23.setName ("Beautiful Radio"); btn23.settype ("hacer clic"); btn23.setkey ("23"); CommonButton btn24 = new CommonButton (); btn24.setName ("reconocimiento facial"); btn24.settype ("hacer clic"); btn24.setkey ("24"); CommonButton BTN25 = new CommonButton (); btn25.setName ("chat"); btn25.settype ("hacer clic"); btn25.setkey ("25"); CommonButton BTN31 = new CommonButton (); btn31.setName ("Q Friends Circle"); btn31.settype ("hacer clic"); btn31.setkey ("31"); CommonButton BTN32 = new CommonButton (); btn32.setName ("Ranking de películas"); btn32.settype ("hacer clic"); btn32.setkey ("32"); CommonButton BTN33 = new CommonButton (); btn33.setName ("broma humorística"); btn33.settype ("hacer clic"); btn33.setkey ("33"); ComplexButton mainbtn1 = new ComplexButton (); mainbtn1.setName ("Asistente de vida"); mainbtn1.setsub_button (nuevo CommonButton [] {BTN11, BTN12, BTN13, BTN14}); ComplexButton MainBtn2 = new ComplexButton (); mainbtn2.setName ("Lucky Station"); mainbtn2.setsub_button (nuevo CommonButton [] {BTN21, BTN22, BTN23, BTN24, BTN25}); ComplexButton MainBtn3 = new ComplexButton (); mainbtn3.setName ("más experiencia"); mainbtn3.setsub_button (new CommonButton [] {BTN31, BTN32, BTN33}); /*** Esta es la estructura de menú actual de la cuenta oficial XiaoqroBot. Cada menú de primer nivel tiene un elemento de menú de segundo nivel * * Si no hay un menú de segundo nivel en cierto menú de primer nivel, ¿cómo se debe definir el menú? * Por ejemplo, el elemento de menú del tercer nivel uno no es "más experiencia", sino que es directamente "broma de humor", entonces el menú debe definirse así: * menú.setButton (nuevo botón [] {mainbtn1, mainbtn2, btn33}); */ Menú menú = nuevo menú (); menú.setButton (nuevo botón [] {MainBtn1, MainBtn2, MainBtn3}); menú de devolución; }}Nota: Al ejecutar el código anterior, debe reemplazar el APPID y AppSecret con su propia cuenta oficial.
Respuesta al menú Haga clic en el evento
paquete org.liufeng.course.service; import java.util.date; import java.util.map; import javax.servlet.http.httpservletRequest; importar org.liufeng.course.message.resp.textmessage; importar org.liufeng.course.util.messageutil; / ** * clase de servicio central * * @author liufeng * @date 2013-05-20 */ public class CoreService {/ ** * Solicitudes de proceso de wechat * * @param request * @return */ public string string processRequest (httpservletrequest request) {string respmessage = null; Pruebe {// El contenido del mensaje de texto devuelto por cadena predeterminada respcontent = "Excepción de manejo de solicitud, por favor intente!"; // XML Solicitar mapa de análisis <string, string> requestmap = messageUtil.parsexml (solicitud); // Cuenta de remitente (Open_ID) String fromUSername = requestMap.get ("fromUsername"); // String de cuenta pública tousername = requestMap.get ("tousername"); // Tipo de mensaje String msgtype = requestmap.get ("msgtype"); // Responder al mensaje de texto TextMessage TextMessage = new TextMessage (); textMessage.setTouserName (fromUsername); textMessage.setFromUsername (tousername); textMessage.setCreateTime (nueva fecha (). getTime ()); textMessage.SetMsgType (MessageUtil.Resp_Message_Type_Text); textMessage.setFuncflag (0); // mensaje de texto if (msgtype.equals (messageUtil.req_message_type_text)) {respcontent = "¡Está enviando un mensaje de texto!"; } // Mensaje de imagen más if (msgtype.equals (messageUtil.req_message_type_image)) {respcontent = "¡Está enviando un mensaje de imagen!"; } // mensaje de ubicación geográfica más if (msgtype.equals (messageUtil.req_message_type_location)) {respcontent = "¡Está enviando un mensaje de ubicación geográfica!"; } // Mensaje de enlace más if (msgtype.equals (messageUtil.req_message_type_link)) {respcontent = "¡Está enviando un mensaje de enlace!"; } // mensaje de audio más if (msgtype.equals (messageUtil.req_message_type_voice)) {respcontent = "¡Está enviando un mensaje de audio!"; } // Event Push Else if (msgtype.equals (MessageUtil.req_message_type_event)) {// Event Type String EventType = requestmap.get ("Event"); // suscribir if (eventtype.equals (messageUtil.event_type_subscribe)) {respcontent = "¡Gracias por su atención!"; } // Unsubscribe más if (eventType.equals (messageUtil.event_type_unsubscribe)) {// toDo después de unsubscribe, el usuario no puede recibir el mensaje enviado por la cuenta oficial, por lo que no es necesario responder al mensaje} / / menú personalizado de event más si (eventtype.equals (messageUtil.event_typee cclick)} / / hace el menú de eventos más al valor de clave especificado al crear la cadena de menú personalizada eventKey = requestMap.get ("EventKey"); if (eventKey.equals ("11")) {respescontent = "Se hacen clic en los elementos del menú de pronóstico del tiempo!"; } else if (eventKey.equals ("12")) {respcontent = "El elemento del menú de consulta de bus se hizo clic en!"; } else if (eventKey.equals ("13")) {respcontent = "El elemento del menú de búsqueda periférica se hace clic!"; } else if (eventKey.equals ("14")) {respcontent = "¡se hizo clic en el elemento del menú en la historia!"; } else if (eventKey.equals ("21")) {respcontent = "El elemento del menú de la canción a pedido se hace clic!"; } else if (eventKey.equals ("22")) {respcontent = "¡se hace clic en el elemento del menú de juego clásico!"; } else if (eventKey.equals ("23")) {respcontent = "El elemento del menú de radio de belleza se hizo clic en!"; } else if (eventKey.equals ("24")) {respcontent = "El elemento del menú de reconocimiento facial se hace clic!"; } else if (eventKey.equals ("25")) {respcontent = "¡se hace clic en el elemento del menú de chat!"; } else if (eventKey.equals ("31")) {respcontent = "El elemento del menú del círculo Q se hizo clic!"; } else if (eventKey.equals ("32")) {respcontent = "El elemento del menú de clasificación de la película se hace clic!"; } else if (eventKey.equals ("33")) {respcontent = "El elemento del menú de broma de humor se hace clic!"; }}} textMessage.setContent (respcontent); RespMessage = MessageUtil.TextMessageToxml (TextMessage); } catch (Exception e) {E.PrintStackTrace (); } return respsMessage; }}Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.