¿Cómo obtener el enlace en la operación de configuración del menú personalizado de la plataforma pública WeChat desde el software de desarrollo (como Microelectronics)?
Si solo hay un cuadro de entrada, puede ser demasiado simple y parecer una línea de comando. El menú personalizado nos brinda mucha flexibilidad y está más acorde con los hábitos operativos de los usuarios. En la pequeña página de conversación de WeChat, se pueden implementar más funciones. El menú es muy intuitivo y no solo proporciona respuesta a eventos, sino que también admite el salto de URL. Si se necesitan funciones más complejas, podemos usar el salto de URL directamente para saltar a nuestra página web.
Nota: en el menú personalizado, solo las cuentas de servicio tienen esta función.
Cómo registrarse, consulte el Capítulo 1: Tutorial de desarrollo de cuentas públicas de WeChat (1) Principios básicos y cuentas públicas de WeChat Registro
El efecto es el siguiente:
A continuación, presentaremos en detalle cómo implementar un menú personalizado.
2. Pasos detallados:
1. Primero obtenga el token de acceso.
El token de acceso es el ticket único global de la cuenta oficial. El token de acceso es necesario. Cuenta oficial para llamar a cada interfaz. En circunstancias normales, el token de acceso es válido durante 7200 segundos. Las visitas repetidas darán como resultado la obtención del último token de acceso. En circunstancias normales, el período de validez de access_token es de 7200 segundos. La adquisición repetida hará que el último access_token deje de ser válido.
La cuenta pública puede usar AppID y AppSecret para llamar a esta interfaz y obtener el token de acceso. Esta interfaz se puede obtener en modo de desarrollo (debe ser desarrollador y la cuenta no tiene un estado anormal). Tenga en cuenta que llamar a todas las interfaces WeChat requiere /cgi-bin/token?grant_type=client_credentialamp;appid=APPIDamp;secret=APPSECRET
Descripción de parámetros
Parámetros
¿Es necesario?
Explicación
grant_type es obtener el token de acceso para completar las credenciales del cliente
appid son las únicas credenciales para usuarios de terceros
secret es la clave de credencial única para usuarios externos, todos son appsecret
Instrucciones de devolución Normalmente, WeChat devolverá el siguiente paquete de datos JSON a la cuenta oficial:
{"access_token" : "ACCESS_TOKEN", "expires_in": 7200}
Parámetros
Descripción
"access_token "es el certificado recuperado
" secreto " es la clave de credencial única del usuario externo appsecret.
expires_in Tiempo de validez del cupón (segundos)
Si ocurre un error, WeChat devolverá un código de error y otra información. El ejemplo del paquete de datos JSON es el siguiente (este ejemplo no es válido). Error de AppID):
p>
{"errcode": 40013, "errmsg": "invalid appid"}
2. Crea un menú personalizado
Los menús personalizados pueden ayudar a las cuentas oficiales a enriquecer sus interfaces, permitiendo a los usuarios comprender mejor y más rápido las funciones de las cuentas oficiales. Después de abrir el menú personalizado, la interfaz de la cuenta oficial es como se muestra en la figura:
Actualmente, el menú personalizado contiene hasta 3 menús de primer nivel, y cada menú de primer nivel contiene hasta 5 menús de segundo nivel. menús de nivel. El número máximo de caracteres en el menú de primer nivel es 4 y el número máximo de caracteres en el menú de segundo nivel es 7. Los caracteres sobrantes serán reemplazados por "...". Tenga en cuenta que después de crear un menú personalizado, el cliente WeChat tardará 24 horas en mostrarse debido al caché del cliente WeChat.
Se recomienda que intente dejar de seguir la cuenta pública y luego seguirla nuevamente para ver el efecto después de la creación.
Actualmente, la interfaz del menú personalizado puede implementar dos tipos de botones, de la siguiente manera:
Clic:
Después de que el usuario hace clic en el botón de tipo clic, WeChat server Se enviará un mensaje al desarrollador a través de la interfaz de mensajes. El tipo de mensaje es una estructura de evento (consulte la guía de la interfaz de mensajes) y el valor clave completado por el desarrollador en el botón se conectará al desarrollador. El desarrollador puede utilizar el valor clave personalizado para conectarse con el desarrollador. Para comunicarse con los usuarios, los usuarios pueden utilizar valores clave.
Ver:
Cuando el usuario hace clic en el botón Ver, el cliente WeChat abrirá el valor de la URL (es decir, el enlace web) completado por el desarrollador en el botón. Abra una página web. Se recomienda combinarlo con la autorización de la página web para obtener información básica de la interfaz de usuario y obtener la información personal de inicio de sesión del usuario.
Descripción de la solicitud de llamada de interfaz
/cgi-bin/menu/create?access_token=ACCESS_TOKEN
Solicitud de ejemplo
{
"botón": [
{
"tipo": "clic",
"nombre": "Canción del día",
"key": "V1001_TODAY_MUSIC"
},
{
"type": "clic",
"name": "Perfil del cantante",
"key": "V1001_TODAY_SINGER"
},
{
"nombre": "menú",
"sub_button": [
{
"tipo": "ver",
"nombre": "Buscar",
"url": "/"
},
{
"tipo": "ver",
"nombre": "vídeo",
"url": "/"
},
{
"type": "clic",
"name": "Me gusta",
"key": "V1001_GOOD"
}]
}]
}]
Descripción del parámetro
Parámetros
Requeridos
Explicación
El botón es una matriz de menú de primer nivel, el número debe ser 1~3
el sub_botón no tiene una matriz de menú de segundo nivel, el número debe ser 1 ~5
tipo es el tipo de operación de respuesta del menú. Actualmente hay dos tipos:
nombre es el título del menú, no más de 16 bytes, y el submenú no. más de 40 bytes
El tipo de clic en la clave debe ser un valor CLAVE de menú, utilizado para enviar mensajes a la interfaz, no más de 128 bytes
El tipo de vista de URL debe ser un enlace web, el usuario hace clic en el menú para abrir el enlace, no más de 256 bytes
Resultado devuelto
El paquete de datos JSON devuelto cuando es correcto es el siguiente:
{ "errcode": 0, "errmsg": "OK"}
El paquete de datos JSON devuelto cuando se produce un error es el siguiente (tomando como ejemplo la longitud del nombre del menú no válido):
{"errcode": 40018, "errmsg": "Tamaño de nombre de botón no válido" }
3. Menú de consulta
Uso de la interfaz Después de crear un menú personalizado, los desarrolladores También puede utilizar la interfaz para consultar la estructura del menú personalizado.
Descripción de la solicitud
/cgi-bin/menu/get?access_token=ACCESS_TOKEN
Descripción de la devolución
Corresponde a la interfaz creada, El resultado de retorno Json correcto es:
{"Menú": {"Botón": [{"Tipo": "Clic", "Nombre": "Canción de hoy", "clave": "V1001_TODAY_MUSIC" , "sub_button": []}, {"type": "clic", "name": "Información del cantante", "key": "V1001_TODAY_SINGER", "sub_button": []}, {"type": "clic ", "nombre": "perfil de cantante", "clave": "V1001_TODAY_SINGER", "sub_botón": []}, {"nombre": "menú", "sub_botón": [{"tipo":" ver" , "nombre": "búsqueda", "url": "/", "sub_button": []}, {"tipo": "ver", "nombre": "vídeo", "url": "/ ", "sub_button": []}, {"type": "click", "name": "Me gusta", "key": "V1001_GOOD", "sub_button": []}]}]}]}} p>
4. Eliminar menú
Después de usar la interfaz para crear un menú personalizado, los desarrolladores también pueden usar la interfaz para eliminar el menú personalizado utilizado actualmente.
Descripción de la solicitud
/cgi-bin/menu/delete?access_token=ACCESS_TOKEN
Descripción de la devolución
Corresponde a la interfaz de creación, El resultado de retorno Json correcto es:
{"errcode": 0, "errmsg"."ok"}
5 Procesamiento de eventos
El usuario hace clic. desde Después de definir el menú, si el botón de menú está configurado para tipo de clic, WeChat enviará eventos de clic al desarrollador. Tenga en cuenta que los clics en el menú del tipo de vista (saltar a URL) no se informarán.
Ejemplo de paquete Push XML:
lt;xmlgt;
lt;ToUserNamegt;lt;! [CDATA[toUser]]gt;lt;/ToUserNamegt;
lt;FromUserNamegt;lt;! [CDATA[FromUser]]gt;lt;/FromUserNamegt;
lt;CreateTimegt;123456789lt;/CreateTimegt;
lt;MsgTypegt;lt;! [CDATA[evento]]gt;lt;/MsgTypegt;
lt;eventgt;lt;! [CDATA[CLIC]]gt;lt;/Eventgt;
lt;EventKeygt;lt;! [CDATA[EVENTKEY]]gt;lt;/EventKeygt;
lt;/xmlgt;
Descripción del parámetro:
Parámetro
Descripción
ToUserName Desarrollador MicroSignal
FromUserName Cuenta del remitente (OpenID)
CreateTime Hora en que se creó el mensaje (entero)
MsgType Mensaje tipo, evento
Tipo de evento de evento, CLIC
Valor de CLAVE del evento EventKey, correspondiente al valor de CLAVE en la interfaz del menú personalizado
3. Sigamos con el artículo anterior. Tutorial de desarrollo de cuentas públicas de WeChat (3) Ejemplo de introducción: Robot (con código fuente)
Agregaremos una función de menú personalizada basada en el artículo anterior.
1. Obtenga access_token
Primero debe obtener AppId y AppSecret
Cuando se convierta en desarrollador, naturalmente podrá verlo en desarrollador. modo Estos dos valores se pueden restablecer.
Luego llame a la operación que se muestra en II.1.
Nota: access_token tiene un tiempo de vencimiento. Si caduca, debes obtenerlo nuevamente.
El código es el siguiente: /summarygt;
cadena estática privada mAccessToken;
/// lt; //
/// lt;/summarygt;
cadena estática pública AccessToken
{
get
{
//Si está vacío o caducado, es necesario volver a obtenerlo
if (string.IsNullOrEmpty(mAccessToken) || HasExpired())
{ p>
//Obtener
mAccessToken = GetAccessToken(AppID, AppSecret
}
Devolver mAccessToken
<); p> }}
}
/// lt; resumen gt; > // /lt;/summarygt;
/// lt;param name="appId"gt;lt;/paramgt;
/// lt;param name=" appSecret" gt;lt;/paramgt;
/// lt;returnsgt;lt;/returnsgt;
cadena estática privada GetAccessToken(cadena appId, cadena appSecret)
{
string url = string.Format("/cgi-bin/token?grant_type=client_credentialamp;appid={0}amp;secret={1}", appId, appSecret);
resultado de cadena = HttpUtility.GetData(url);
XDocument doc = XmlUtility.ParseJson(resultado, "root");
XElement raíz = doc.Root ;
/// Obtener menú
/// lt;/summarygt;
cadena estática pública GetMenu()
{
string url = string.Format("/cgi-bin/menu/get ?access_token={0}", Context.AccessToken);
return HttpUtility.GetData(url);
p>}
/// lt; resumengt;
/// Crear menú
/// lt /summarygt; >
public static void CreateMenu(menú de cadena)
{
string url = string.Format("/cgi-
bin/menu/create?access_token={0}",Context.AccessToken);
//string menu = FileUtility.Read(Menu_Data_Path);
HttpUtility.Read(Menu_Data_Path) SendHttpRequest(url, menú);
}
/// lt; resumengt;
/// EliminarMenú
/// lt;/summarygt;
public static void DeleteMenu()
{
usando (WebResponse respuesta = request.GetResponse())
{
if (respuesta != null)
{
usando (Stream stream = respuesta.GetResponseStream())
{
usando (StreamReader Reader = new StreamReader( stream, Encoding.Ujson, string rootName)
{
return JsonConvert.DeserializeXNode(json, rootName);
}
}
}
}
}
5.
Configure el menú, necesita manejar eventos en este momento. En nuestro diseño anterior de ASPX o WinForm, los eventos del botón estaban vinculados aquí simplemente pasamos la solicitud a través de un mensaje XML. Menú de configuración" en el contenido del menú específico, ya sabemos qué eventos deben procesarse
Haga clic en los eventos que deben procesarse:
1) Me gusta
<. p >2) Consultar el clima de una determinada ciudad, Beijing, Shanghai, Wuhan3) Ayuda
Esto también utiliza el controlador de eventos EventHandler en el capítulo anterior para expandir el procesamiento. /p>
El código de implementación específico es:
Usar sistema;
Usar
espacio de nombres Yank.WeiXin.
/// lt;param name="em"gt;lt;/paramgt;
/// lt;returnsgt;lt;/returnsgt;
cadena privada btnGoodClick(EventMessage em)
{
///Responder al mensaje de bienvenida
Te
/// Ayuda
/// lt; /summarygt;
/// lt; param nombre="em"gt; ; returngt;lt;/returnsgt;
cadena privada btnHelpClick(EventMessage em)
{
///Responder al mensaje de bienvenida
Mensaje de Texto tm = nuevo Mensaje de Texto();
tm. ToUserName = em.FromUserName
tm.FromUserName = em.ToUserName
tm.CreateTime = Common.CreateTime()
tm.CreateTime = Común; .CreateTime();
tm.CreateTime = Common.CreateTime()GenerateContent();
}
/// resumengt; >
/// Consulta el tiempo
///lt;/summarygt;
/// lt;param name="cityName"gt;lt;/paramgt;
/// lt; param nombre="em"gt; /paramgt;
/// lt; p>
cadena privada searchWeather(string cityName, EventMessage em)
{
}
}
6. Efecto
Finalmente hecho, echemos un vistazo al efecto de la imagen