Em relação ao acesso de fundo da plataforma WeChat, o funcionário forneceu o download do exemplo do PHP. Para o acesso em segundo plano do Java, atualmente não há caso completo para usar diretamente. Eu escrevi uma versão Java da demonstração para que todos usem.
1. Preparação
O projeto é construído com Maven e pode ser importado diretamente para o Eclipse. A versão do JDK é 1.8.0_111. Ambos os itens podem ser modificados de acordo com as necessidades reais e, finalmente, a guerra é liberada no servidor.
2. Exercícios práticos
Antes da operação, leia o documento oficial primeiro e tenha um processo de idéia geral, consulte o endereço oficial
1. Definir no modo de desenvolvedor:
Depois de fazer login no fundo da plataforma pública do WeChat, clique em "Funções" - "Funções avançadas" - "Modo de desenvolvimento" para entrar no modo de desenvolvimento. Se a plataforma pública exibir "ainda não se tornar um desenvolvedor", clique em "Torne -se um desenvolvedor"
2. Preencha a configuração do servidor:
Clique em "Desenvolvimento" - "Configuração básica" - "Preencha a configuração do servidor", como mostrado na Figura 1 a 3
Figura 1
Figura 2
Figura 3
3. Código de amostra:
Sha1.java
pacote com.dqiang.demo; classe pública sha1 {private final int [] abcde = {0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0}; // ABRACT Data Storage Array Private Int [] Digestint = new Int [5]; // Matriz temporária de armazenamento de dados privado int [] tmpdata = new int [80]; // calcule o sha-1 digers private int process_input_bytes (byte [] bytedata) {// estudo preliminar do sistema constante.arraycopy (abcde, 0, digestint, 0, abcde.length); // formate a matriz de bytes de entrada, suplemento 10 e dados byte [] newbyte = bytearrayformatdata (bytedata); // Obtenha o número de unidades de dados calculadas para resumo de dados int mcount = newbyte.length / 64; // loop para resumir cada unidade de dados para (int pos = 0; pos <mcount; pos ++) {// converte os dados de cada unidade em 16 dados inteiros e salvá -los nos 16 primeiros elementos de matriz de tmpdata para (int j = 0; } // função de cálculo abstrato Encrypt (); } retornar 20; } // formato de entrada Byte Array formato privado byte [] bytearrayFormatData (byte [] bytedata) {// número de complemento 0 int zeros = 0; // Número total de dígitos após o complemento t int size = 0; // comprimento de dados original int n = bytedata.length; // o número restante de dígitos após o mod 64 int m = n % 64; // Calcule o número de 0 adicionado e o comprimento total após adicionar 10 se (m <56) {zeros = 55 - m; tamanho = n - m + 64; } else if (m == 56) {zeros = 63; tamanho = n + 8 + 64; } else {zeros = 63 - m + 56; tamanho = (n + 64) - m + 64; } // o conteúdo da nova matriz gerada após o preenchimento de byte [] newbyte = new byte [size]; // Copie a parte anterior do Array System.arraycopy (Bytedata, 0, Newbyte, 0, N); // Obtenha a posição do elemento de dados do APÊNCIO da matriz int l = n; // o complemento 1 operação newbyte [l ++] = (byte) 0x80; // a operação do complemento 0 para (int i = 0; i <zeros; i ++) {newbyte [l ++] = (byte) 0x00; } // Calcule o comprimento dos dados e os bits de comprimento dos dados são de 8 bytes no total e inteiro total n = (longo) n * 8; byte h8 = (byte) (n & 0xff); byte h7 = (byte) ((n >> 8) e 0xff); byte h6 = (byte) ((n >> 16) e 0xff); byte h5 = (byte) ((n >> 24) e 0xff); byte h4 = (byte) ((n >> 32) e 0xff); byte h3 = (byte) ((n >> 16) e 0xff); byte h5 = (byte) ((n >> 24) e 0xff); byte h4 = (byte) ((n >> 32) e 0xff); byte h3 = (byte) ((n >> 40) e 0xff); byte h2 = (byte) ((n >> 48) e 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; retornar 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 & Z) | (Y&Z); } private int f4 (int x, int y) {return (x << y) | x >>> (32 - y); } // Função de cálculo de resumo da unidade private void Encrypt () {for (int i = 16; i <= 79; i ++) {tmpdata [i] = f4 (tmpdata [i - 3] ^ tmpdata [i - 8] ^ ^ tmpdata [i - 14] ^ tmpdata [i - 8] ^ ^ } int [] tmpabcde = new int [5]; for (int i1 = 0; i1 <tmpabcde.length; i1 ++) {tmpabcde [i1] = digeriTint [i1]; } para (int j = 0; j <= 19; j ++) {int tmp = f4 (tmpabcde [0], 5) + f1 (tmpabcde [1], tmpabcde [2], tmpabcde [3] + tmpabcde [4] + tmpTA 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] + tmpdA 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] + tmpdA 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] + tmpdA tmpabcde [4] = tmpabcde [3]; tmpabcde [3] = tmpabcde [2]; tmpabcde [2] = f4 (tmpabcde [1], 30); tmpabcde [1] = tmpabcde [0]; tmpabcde [0] = tmp; } para (int i2 = 0; i2 <tmpabcde.length; i2 ++) {digestint [i2] = digestint [i2]+tmpabcde [i2]; } para (int n = 0; n <tmpdata.length; n ++) {tmpdata [n] = 0; }} // Converta uma matriz de 4 bytes para private INTEGER INT BYTEARRAYTONT (BYTE [] Bytedata, int i) {return ((Bytedata [i] e 0xff) << 24) | ((Bytedata [i + 1] & 0xff) << 16) | ((Bytedata [i + 2] e 0xff) << 8) | (Bytedata [i + 3] e 0xff); } // Converter números inteiros em matriz de 4 bytes private void inttobytearray (int intvalue, byte [] bytedata, int i) {bytedata [i] = (byte) (intvalue >>> 24); bytedata [i + 1] = (byte) (intvalue >>> 16); bytedata [i + 2] = (byte) (intvalue >>> 8); bytedata [i + 3] = (byte) intvalue; } // converte bytes em string string hexadecimal private static string bytetoHexString (byte ib) {char [] digit = {'0', '1', '2', '3', '4,' 5, ',' 6, '' '' ',' '' '', '4,' f ',', 'C' '' '' '8,' 9 ',' ',' F ',' 5, 'C' '' '' '8,' 9 ',' ',' F ',' 5, 'C' '' '' '8,' 9 '', '4,' F ',', 'C' '' '' '8,' 9 ',' ',' F ',' 5, 'C' '' '' '8,' 9 ',' ',' F ',' 5; char [] ob = novo char [2]; ob [0] = dígito [(ib >>> 4) e 0x0f]; ob [1] = dígito [ib & 0x0f]; String s = new string (ob); retorno s; } // Converta a matriz de byte em string hexadecimal private static string bytearraytoHexString (byte [] bytearray) {string strDigest = ""; for (int i = 0; i <bytearray.length; i ++) {strDigest+= bytetoHexString (bytearray [i]); } retornar strDigest; } // Calcule o digerido sha-1 e retorne o byte correspondente Byte public byte [] getDigestofbytes (byte [] bytedata) {process_input_bytes (bytedata); byte [] Digest = novo byte [20]; for (int i = 0; i <digestint.length; i ++) {inttobytearray (digestint [i], digest, i * 4); } retornar digestão; } // Calcule o digerido sha-1 e retorne o correspondente String hexadecimal public string getDigestofString (byte [] bytedata) {return bytearraytoHexString (getDigestOfbytes (bytedata)); } public static void main (string [] args) {string data = "tokendemo"; System.out.println (dados); String Digest = new SHA1 (). GetDigestOfString (Data.getBytes ()); System.out.println (Digest); }}wechatjavatokenvalidate.java
pacote 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 weChatJavaTokenValidate extends HttpServlet { private static final long serialVersionUID = -6761982938477193120L; / * Por exemplo * URL (endereço do servidor) http://weixin.xxxx.com/wechatjavatokenatedalidate/wechattoken * token (token) tokenchat * */private string token = "tokenchat"; // define o token sozinho de acordo com a situação real e preencha o token de configuração do servidor (token) o mesmo que @Override Protected Void Doget (httpServletReQuest Solicy, httpServletResponse resposta) lança signo de servleTexception, sinalização ioexception {// wechat) // Random String string eCHostr = request.getParameter ("ECHOSTR"); // timestamp string timestamp = request.getParameter ("timestamp"); // string de número aleatório nonce = request.getParameter ("nonce"); String [] str = {token, timestamp, nonce}; // dicionário de classificação Arrays.sort (str); String bigstr = str [0] + str [1] + str [2]; // sha1 criptografia string digest = new sha1 (). // Confirme a solicitação para o WeChat if (Digest.Equals (Signature)) {Response.getWriter (). Print (ecostr); }}}3. Download do código -fonte: WechatjavatokenValidate
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.