Con respecto al acceso de fondo de la plataforma WeChat, el funcionario ha proporcionado la descarga del ejemplo de PHP. Para el acceso de fondo de Java, actualmente no hay un caso completo para usar directamente. Escribí una versión Java de la demostración para que todos los usen.
1. Preparación
El proyecto está construido con Maven y se puede importar directamente al eclipse. La versión de JDK es 1.8.0_111. Ambos elementos pueden modificarse de acuerdo con las necesidades reales y finalmente la guerra se libera al servidor.
2. Taladros prácticos
Antes de la operación, lea primero el documento oficial y tenga un proceso de idea general, consulte la dirección oficial
1. Establecer en modo de desarrollador:
Después de iniciar sesión en el fondo de la plataforma pública de WeChat, haga clic en "Funciones" - "Funciones avanzadas" - "Modo de desarrollo" para ingresar al modo de desarrollo. Si la plataforma pública muestra "aún no convertirse en desarrollador", haga clic en "convertirse en un desarrollador"
2. Complete la configuración del servidor:
Haga clic en "Desarrollo" - "Configuración básica" - "Complete la configuración del servidor" como se muestra en la Figura 1 a 3
Figura 1
Figura 2
Figura 3
3. Código de muestra:
Sha1.java
paquete com.dqiang.demo; clase pública Sha1 {private final int [] abcde = {0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0}; // matriz de almacenamiento de datos abstracta private int [] digestint = new int [5]; // matriz de almacenamiento de datos temporal private int [] tmpData = new int [80]; // Calcule SHA-1 Digest Private int process_input_bytes (byte [] byteTata) {// prueba preliminar del sistema constante. // Formateo de la matriz de byte de entrada, complemento 10 y data de longitud byte [] newByte = byteArrayFormatData (bytedata); // Obtenga el número de unidades de datos calculadas para el resumen de datos int mCount = newbyte.length / 64; // bucle para resumir cada unidad de datos para (int pos = 0; pos <mcount; pos ++) {// Convertir los datos de cada unidad en 16 datos enteros y guárdelo en los primeros 16 elementos de matriz de tmpData para (int j = 0; j <16; j ++) {tmpData [j] = byteTearrayToint (newByte, (pos * 64)+(J * 4); } // función de cálculo abstracta cifrado (); } return 20; } // Formato de entrada Formato de matriz de byte byte privado [] byteArrayFormatData (byte [] byteTata) {// número de complemento 0 int zeros = 0; // número total de dígitos después del complemento t int size = 0; // Longitud de datos original int n = bytedata.length; // el número restante de dígitos después del mod 64 int m = n % 64; // Calcule el número de 0 agregado y la longitud total después de agregar 10 if (m <56) {zeros = 55 - m; tamaño = n - m + 64; } else if (m == 56) {zeros = 63; tamaño = n + 8 + 64; } else {zeros = 63 - m + 56; tamaño = (n + 64) - m + 64; } // El contenido de la nueva matriz generada después de llenar byte [] newByte = new Byte [size]; // Copiar la parte anterior del sistema de matriz. // Obtener la posición del elemento de datos de adjunto de la matriz int l = n; // El complemento 1 operación newbyte [l ++] = (byte) 0x80; // La operación del complemento 0 para (int i = 0; i <ceros; i ++) {newByte [l ++] = (byte) 0x00; } // Calcule la longitud de los datos, y los bits de longitud de datos son 8 bytes en total, entero largo largo n = (largo) n * 8; byte h8 = (byte) (n & 0xff); byte h7 = (byte) ((n >> 8) y 0xff); byte h6 = (byte) ((n >> 16) y 0xff); byte h5 = (byte) ((n >> 24) y 0xff); byte h4 = (byte) ((n >> 32) y 0xff); byte h3 = (byte) ((n >> 16) y 0xff); byte h5 = (byte) ((n >> 24) y 0xff); byte h4 = (byte) ((n >> 32) y 0xff); byte h3 = (byte) ((n >> 40) y 0xff); byte h2 = (byte) ((n >> 48) y 0xff); byte h1 = (byte) (n >> 56); newbyte [l ++] = h1; newbyte [l ++] = h2; newbyte [l ++] = h3; newbyte [l ++] = h4; newbyte [l ++] = h5; newbyte [l ++] = h6; newbyte [l ++] = h7; newbyte [l ++] = h8; devolver newbyte; } private int f1 (int x, int y, int z) {return (x & y) | (~ x & z); } private int f2 (int x, int y, int z) {return x ^ y ^ z; } private int f3 (int x, int y, int z) {return (x & y) | (x y z) | (y y z); } private int f4 (int x, int y) {return (x << y) | x >>> (32 - y); } // Función de cálculo resumido de la unidad private void encrypt () {for (int i = 16; i <= 79; i ++) {tmpData [i] = f4 (tmpData [i - 3] ^ tmpData [i - 8] ^ tmpData [i - 14] ^ tmpData [i - 16], 1); } int [] tmpabcde = new int [5]; for (int i1 = 0; i1 <tmpabcde.length; i1 ++) {tmpabcde [i1] = digestInt [i1]; } for (int j = 0; j <= 19; j++) { int tmp = f4(tmpabcde[0], 5) + f1(tmpabcde[1], tmpabcde[2], tmpabcde[3]) + tmpabcde[4] + tmpData[j] + 0x5a827999; tmpabcde [4] = tmpabcde [3]; tmpabcde [3] = tmpabcde [2]; tmpabcde [2] = f4 (tmpabcde [1], 30); tmpabcde [1] = tmpabcde [0]; tmpabcde [0] = tmp; } para (int k = 20; k <= 39; k ++) {int tmp = f4 (tmpabcde [0], 5) + f2 (tmpabcde [1], tmpabcde [2], tmpabcde [3]) + tmpabcde [4] + tmpData [k] + 0x6ed9eba1; tmpabcde [4] = tmpabcde [3]; tmpabcde [3] = tmpabcde [2]; tmpabcde [2] = f4 (tmpabcde [1], 30); tmpabcde [1] = tmpabcde [0]; tmpabcde [0] = tmp; } para (int l = 40; l <= 59; l ++) {int tmp = f4 (tmpabcde [0], 5) + f3 (tmpabcde [1], tmpabcde [2], tmpabcde [3]) + tmpabcde [4] + tmpdata [l] + 0x8f1bbcdc; tmpabcde [4] = tmpabcde [3]; tmpabcde [3] = tmpabcde [2]; tmpabcde [2] = f4 (tmpabcde [1], 30); tmpabcde [1] = tmpabcde [0]; tmpabcde [0] = tmp; } para (int m = 60; m <= 79; m ++) {int tmp = f4 (tmpabcde [0], 5) + f2 (tmpabcde [1], tmpabcde [2], tmpabcde [3]) + tmpabcde [4] + tmpdata [m] + 0xCa62c1d6; tmpabcde [4] = tmpabcde [3]; tmpabcde [3] = tmpabcde [2]; tmpabcde [2] = f4 (tmpabcde [1], 30); tmpabcde [1] = tmpabcde [0]; tmpabcde [0] = tmp; } for (int i2 = 0; i2 <tmpabcde.length; i2 ++) {digestInt [i2] = digestInt [i2]+tmpabcde [i2]; } para (int n = 0; n <tmpdata.length; n ++) {tmpData [n] = 0; }} // Convierta una matriz de 4 bytes a Integer private int bytearrayToint (byte [] byteTata, int i) {return ((bytedata [i] & 0xff) << 24) | ((byteTata [i + 1] y 0xff) << 16) | ((byteTata [i + 2] y 0xff) << 8) | (bytedata [i + 3] y 0xff); } // Convierta enteros en matriz de 4 bytes vacío privado inttobytearray (int intValue, byte [] byteTata, int i) {byteTata [i] = (byte) (intValue >>> 24); bytedata [i + 1] = (byte) (intValue >>> 16); bytedata [i + 2] = (byte) (intValue >>> 8); bytedata [i + 3] = (byte) intValue; } // Convertir bytes en cadena hexadecimal static static string bytetoHexString (byte ib) {char [] digit = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; char [] ob = nuevo char [2]; ob [0] = dígito [(ib >>> 4) y 0x0f]; ob [1] = dígito [ib & 0x0f]; Cadena S = nueva cadena (OB); regreso s; } // Convertir la matriz de byte en cadena hexadecimal de cadena privada bytearrayToHexString (byte [] byteArray) {string strdigest = ""; for (int i = 0; i <bytearray.length; i ++) {strdigest+= bytetohexString (bytearray [i]); } return strdigest; } // Calcule el resumen de SHA-1 y devuelva la matriz de byte correspondiente byte public [] getDigESTOFBYTES (byte [] bytedata) {process_input_bytes (byteTata); byte [] digest = new Byte [20]; para (int i = 0; i <digestInt.length; i ++) {inttobytearray (digestInt [i], digest, i * 4); } return digest; } // Calcule el resumen SHA-1 y devuelve la cadena hexadecimal correspondiente de cadena pública getDigestofString (byte [] byteTata) {return byteArrayToHexString (getDigeStofBytes (bytedata)); } public static void main (string [] args) {string data = "tokendemo"; System.out.println (datos); String Digest = new Sha1 (). GetDigeStOfString (data.getBytes ()); System.out.println (digest); }}wechatjavatokenvalidate.java
paquete com.dqiang.demo; import java.io.ioException; import java.util.arrays; import javax.servlet.servletException; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletResponse; /** * @author Stemq * @version v1.0 * Blog: http: //blog.csdn.net/stemq * web: www.dqiang.com */public class wechatjavatokokenvalidate extiende httpservlet {static final static final de privado / * Por ejemplo * URL (dirección del servidor) http://weixin.xxxx.com/wechatjavatokenvalidate/wechattoken * token (token) tokenchat * */private string token = "tokenchat"; // Defina el token por sí mismo de acuerdo con la situación real y complete el token de configuración del servidor (token) lo mismo que @Override protegido void doget (httpservletRequest request, httpservletResponse respuesta) lanza servletException, ioexception {// wechat firature string firature = request.getParameter ("firma"); // cadena aleatoria String echostr = request.getParameter ("echostr"); // TimeStamp String Timestamp = request.getParameter ("timestamp"); // numero aleatorio cadena nonce = request.getParameter ("nonce"); String [] str = {token, timestamp, nonce}; // matrices de clasificación de diccionario. Cadena bigStr = str [0] + str [1] + str [2]; // SHA1 Cifrado String Digest = new Sha1 (). GetDigestofString (BigStr.getBytes ()). TOLOWERCase (); // Confirma la solicitud a WeChat if (digest.equals (firma)) {Response.getWriter (). Print (ECHOSTR); }}}3. Descarga del código fuente: WeChatJavatokeValidate
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.