Red de conocimiento informático - Material del sitio web - Cómo usar C# para crear código que responda a las visitas de WeChat y a las respuestas automáticas

Cómo usar C# para crear código que responda a las visitas de WeChat y a las respuestas automáticas

Abra Visual Studio 2010 y cree un nuevo proyecto de tipo de aplicación WEB ASPX. Visual Studio creará automáticamente algunos archivos para nosotros. Después de obtener Bobo, ignórelo directamente. Una vez completada la creación, como se muestra a continuación, haga clic derecho en el proyecto. "Agregar" - "Crear un nuevo elemento", como se muestra a continuación, seleccione "Controlador universal", asígnele el nombre "mp.ashx" y asígnele el nombre "mp.ashx". Como se muestra en la figura siguiente, seleccione "Nuevo elemento", seleccione "Manejador general" y asígnele el nombre "mp.ashx".

Créelo, agregando las siguientes referencias:

Use System;

Use System.Collections.Generic

Use System.Linq;

Usar System.Web

Usar System.Data.SqlClient

Usar System.Data.SqlClient; .Data.SqlClient

Usar System.Data.SqlClient

Usar System.IO

Usar System.Text; Sistema .Xml;

Utilice System.Xml.XPath. Seguridad;

Utilice System.Net;

Utilice System.Collections;

Utilice System.Security.Cryptography;

Consejos: A programa de procesamiento general que puede devolver datos de respuesta HTTP en varios formatos, incluidas, entre otras, imágenes en GIF y otros formatos. Es muy potente y flexible, pero la dificultad de desarrollo es un poco alta. en LOL porque admite micro El formato de datos devuelto por la plataforma pública de Botantan es generalmente XML y también incluye algunas cadenas que no son XML, etc., por lo que podemos completar bien la tarea utilizando un programa de procesamiento general.

2. Escriba la función de verificación de firma

El proceso de acceso a la interfaz es realmente muy simple, para usar las palabras de un hombre rudo, gritaré "Oye hermana, por favor responde". ..." .."

Hermano, piénsalo, si no fueras tú quien se subió a la cama de la niña en medio de la noche, sino un hacker llamado dosboy, entonces no lo haría. poder pensar en las consecuencias, así que antes de abrir WeChat, hermana, debes decirle al hermano (plataforma WeChat) la contraseña (un token preestablecido en WeChat)

Cada vez que el hermano tiene una solicitud de acceso, La hermana puede verificarlo debido a la red. Todo lo anterior está en texto claro (dosboy lo monitoreará debajo de la ventana), por lo que esta verificación no se puede pasar directamente al Token, pero el documento WeChat se descarga a través de un determinado algoritmo:

Según el documento WeChat, después de que el desarrollador envíe la información, el servidor WeChat enviará una solicitud GET para completar la solicitud GET. La solicitud GET lleva cuatro parámetros:

Parámetros

Descripción

Firma Firma cifrada de WeChat La firma combina el parámetro token completado por el desarrollador con el parámetro de marca de tiempo y el parámetro nonce en la solicitud

marca de tiempo

. p>

número aleatorio nonce

ehostr.Cadena aleatoria

El desarrollador verifica la solicitud verificando la firma (hay varios métodos a continuación si se confirma que GET). La solicitud proviene del servidor WeChat, devuelva el contenido del parámetro echostr tal como está, el acceso tendrá efecto y el desarrollador accederá con éxito; de lo contrario, el acceso falla.

El proceso de cifrado/verificación es el siguiente: 1. Ordene los tres parámetros de token, marca de tiempo y nonce en el orden del diccionario 2. Empalme los tres parámetros en una cadena y realice el cifrado sha1 3. El desarrollador obtiene La cadena cifrada se puede comparar con la firma.

Basado en la información anterior, escribí una función que debe usarse. Si insistes en no usar checkSignature, el código de la plataforma también puede acceder a ella, pero tú. Puede juzgar el grado de peligro usted mismo:

private bool checkSignature (firma de cadena, marca de tiempo de cadena, nonce de cadena, token de cadena)

{

ArrayList tmpArray = new ArrayList();

tmpArray.Add(token);

tmpArray.Add(marca de tiempo);

tmpArray.Sort();

string tmpStr = (string) tmpArray[0] + (string)tmpArray[1] + (string)tmpArray[2];

//Construir objeto SHA1

SHA1 sha = new SHA1CryptoServiceProvider();

p>

//convierte mystr a byte[]

ASCIIEncoding enc = new ASCIIEncoding();

byte[ ] dataToHash = enc. GetBytes(tmpStr);

//Operación hash

byte[] dataHashed = sha.ComputeHash(dataToHash);

//Convierte el resultado de la operación en una cadena

string hash = BitConverter.ToString(dataHashed);