Red de conocimiento informático - Material del sitio web - Cómo desarrollar WeChat usando Java

Cómo desarrollar WeChat usando Java

Introducción al contenido:

Este tutorial habla principalmente sobre el modelo de desarrollador de la plataforma pública WeChat. Hay muchos artículos similares en Internet, pero muchos de ellos confunden a los principiantes en el desarrollo de WeChat. Resumo Con su propia experiencia en el desarrollo de WeChat, enumera sistemáticamente todo el proceso de desarrollo de WeChat y explica y analiza los códigos principales para que los principiantes puedan comenzar lo antes posible.

Antes de leer este artículo, todos deben comprender los documentos oficiales de desarrollo de la plataforma pública WeChat y saber que los datos recibidos y enviados están en formato xml. Además, al responder al contenido, debe utilizar la interfaz API de Turing Robot. Esta es una plataforma abierta para el análisis del lenguaje natural, que puede ayudarnos a resolver los problemas más difíciles en todo el proceso de desarrollo de WeChat. Para obtener más detalles aquí, lo discutiré a continuación. Hay un método de llamada detallado.

1.1 Después de iniciar sesión en la plataforma oficial WeChat, abra el modo de desarrollador. En este momento, debemos completar la URL y el token. La llamada URL es la interfaz de nuestro propio servidor. implementado con WechatServlet.java La explicación relevante está en los comentarios. Como se explica en, el código es el siguiente:

[java]?view Plain?copy

package?demo.servlet. ;?

importar?java.io.BufferedReader ;?

importar?java.io.IOException;?

importar?java.io.InputStream;?

¿importar?

¿importar?java.io.OutputStream;?

¿importar?javax.servlet.ServletException;?

¿importar? javax.servlet./xml/ns/javaee"

xmlns:xsi="/xml/ns/javaee

/xml/ns/javaee/web-app_2_5.xsd"> ?

Esta es una descripción de mi componente J2EE

Este es el nombre para mostrar del componente J2EE

WechatServlet?

demo.servlet.WechatServlet< /servlet-class>?

>p>

?

WechatServlet ?

/wechat.do?

?

?

index .jsp?

?

?

1.3 Pase el código anterior. Implementamos el marco de desarrollo de la plataforma pública WeChat, es decir, activamos el modo de desarrollador, accedemos, recibimos y enviamos mensajes con éxito en tres pasos.

A continuación se explicará su parte principal: analizar los datos xml recibidos, tomar mensajes de texto como ejemplo e implementar respuestas inteligentes a través de la interfaz API del robot Turing.

2.1 Primero echemos un vistazo al código de procesamiento de todo el proceso, incluido: procesamiento de datos xml, llamada a la API de Turing y encapsulación de los datos xml devueltos.

[java]?ver plano?copia

paquete?demo.process;?

importar?java.util.Date;?

import?demo.entity.ReceiveXmlEntity;?

/**?

*?¿Clase lógica del proceso de procesamiento de mensajes xml de WeChat?

*?@autor?pamchen-1

*?

*/?

¿público?

*?¿Analizar y procesar xml para obtener resultados de respuesta inteligentes (a través de la interfaz API del robot Turing)?

*?@param?xml?¿Recibiste datos de WeChat?

*?@return?resultado final del análisis (datos en formato xml)?

*/?

¿público? ¿Analizar datos xml? */?

ReceiveXmlEntity?xmlEntity?=?new?ReceiveXmlProcess().getMsgEntity(xml);?

/**?Tome los mensajes de texto como ejemplo para llamar al robot de Turing ¿Interfaz API para obtener contenido de respuesta? */?

String?result?=?"" ;?

if("text".endsWith(xmlEntity.getMsgType())){

resultado?=?new?TulingApiProcess().getTulingResult(xmlEntity.getContent());?

}?

}?

/**? En este punto, si el usuario ingresa "Hola", después del procesamiento anterior, el resultado será similar a "Tú también".

*?Dado que la respuesta final de WeChat también está en formato xml, ¿es necesario encapsularla como texto para devolver información?

*?

*?

resultado?=?new?FormatXmlProcess().formatXmlAnswer(xmlEntity.getFromUserName(),?xmlEntity.getToUserName(), ?resultado);?

return?

}?

}?

2.2 Al analizar los datos xml recibidos, hay dos clases , ReceiverXmlEntity.java y ReceiverXmlProcess.java llaman dinámicamente al método set en la clase de entidad a través del mecanismo de reflexión, lo que puede evitar una gran cantidad de juicios repetidos y mejorar la eficiencia del código. El código es el siguiente:

. [? java]?ver plano ?copiar

paquete?demo.entity;?

/**?

*?¿Recibir clase de entidad XML de Microsoft?

*?@autor?pamchen-1?

*?

*/?

¿clase pública?ReceiveXmlEntity?{?

privado?String?ToUserName="";?

privado?

privado?String?CreateTime="";?

privado?String?MsgType="";?

privado?String?MsgId="";?

privado?String?Event="";?

privado?String?EventKey="";?

privado?S

tring?Ticket="";?

privado?String?Latitude="";?

privado?String?Longitude="";?

privado ?String?Precision="";?

privado?String?PicUrl="";?

privado?String?MediaId="";?

privado?String?Title="";?

privado?String?Description="";?

privado?String?Url="";?

privado?String?Location_X="";?

privado?String?Location_Y="";?

privado?String?Scale="";?

privado?String?Label="";?

privado?String?Content="";?

privado?String?

privado?String ?Recognition="";?

¿público?String?getRecognition()?{

¿retorno?

}?

¿público? {

Reconocimiento = Reconocimiento;?

}?

¿público?{

¿devolución?

}?

¿público?{

Formato = formato;?

}?

¿público?{

¿público? ¿Cadena?getContent()?

retorno?

}?

público?{

Contenido = contenido;?

}?

¿público?{

¿devolución?

}?

¿público?{

Ubicación_X = ubicaciónX;?

}?

público?{

retorno?

}?

público ?{

Ubicación_Y = ubicaciónY;?

}?

¿público?{

¿regresar?

} ?

público?{

Escala = escala;?

}?

público?{

regresar ?

}?

público?{

Etiqueta = etiqueta;?

}?

público? {

return?Title;?

}?

public?void?setTitle(String?title)?{

Title = título;?

}?

público?{

devolución?Descripción;?

}?

public?void?setDescription(String?description)?{

Descripción = descripción;?

}?

público?{

devolver

n?Url;?

}?

público?{

Url = url;?

}?

público?{

return?PicUrl;?

}?

público?void?setPicUrl(String?picUrl)?{

PicUrl =?picUrl;?

}?

public?String?getMediaId()?{

retorno?

} ?

público?{

MediaId = mediaId;?

}?

público?String?getEventKey()?{

¿público?String?getEventKey()?

¿regresar?

}?

¿público?void?setEventKey(String?eventKey)?{

EventKey = eventKey;?

}?

¿público?String?getTicket()?{

retorno?

}?

¿público?void?setTicket(String?ticket)?{

Boleto = boleto;?

}?

public?String?getLatitude()?{

¿Boleto?=?ticket;?}

¿devolución?

}?

público?{

Latitud = latitud;?

}?

público?{

Latitud?=?latitud;?}

¿regresar?

}?

¿público?{

Longitud = longitud;?

}?

¿público?{

¿Longitud?=?longitud;?

¿retorno?

}?

¿público? {

Precisión = Precisión;?

}?

público?{

Precisión =?precisión;?

¿regresar?

}?

¿público?{Evento(String?evento)?

¿Evento?

}?

público?{

retorno?

}?

público?{

MsgId = msgId;?

}?

¿público?String?getToUserName()?{

return?ToUserName;?

}?

public?void?setToUserName(String?toUserName)?{