En ce qui concerne l'accès aux antécédents de la plate-forme WeChat, le responsable a fourni le téléchargement de l'exemple PHP. Pour l'accès en arrière-plan de Java, il n'y a actuellement aucun cas complet à utiliser directement. J'ai écrit une version Java de la démo pour que tout le monde puisse utiliser.
1. Préparation
Le projet est construit avec Maven et peut être directement importé dans Eclipse. La version de JDK est 1.8.0_111. Ces deux éléments peuvent être modifiés en fonction des besoins réels et enfin la guerre est rejetée sur le serveur.
2. Forets pratiques
Avant l'opération, lisez d'abord le document officiel et ayez un processus d'idée globale, reportez-vous à l'adresse officielle
1. Défini en mode développeur:
Après être connecté à l'arrière-plan de la plate-forme publique WeChat, cliquez sur "Functions" - "Fonctions avancées" - "Mode de développement" pour entrer le mode de développement. Si la plate-forme publique affiche "pas encore de devenir développeur", cliquez sur "Devenir développeur"
2. Remplissez la configuration du serveur:
Cliquez sur "Development" - "Configuration de base" - "Remplissez la configuration du serveur" comme le montre la figure 1 à 3
Figure 1
Figure 2
Figure 3
3. Exemple de code:
Sha1.java
package com.dqiang.demo; classe publique Sha1 {private final int [] abcde = {0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0}; // Array de stockage de données abstrait privé int [] digesntInt = new int [5]; // Array de stockage de données temporaire privé int [] tmpdata = new int [80]; // Calculer Sha-1 Digest private int process_input_bytes (byte [] bytedata) {// essai préliminaire du système constant.arraycopy (ABCDE, 0, DigesntInt, 0, abcde.length); // Formatez le tableau d'octets d'entrée, le supplément 10 et l'octet de données de longueur [] newbyte = bytearrayformatData (byTedata); // Obtenez le nombre d'unités de données calculées pour le résumé des données int mcount = newbyte.length / 64; // boucle pour résumer chaque unité de données pour (int pos = 0; pos <mcount; pos ++) {// convertir les données de chaque unité en 16 données entières et les enregistrer dans les 16 premiers éléments de tableau de tmpdata pour (int j = 0; j <16; j ++) {tmpdata [j] = byTayToint (newbyte, (pos * 64) +); } // Fonction de calcul abstraite Encrypt (); } return 20; } // Format d'entrée de byte de byte format octet privé [] bytearrayformatData (byte [] byTata) {// Nombre de complément 0 int zeros = 0; // Nombre total de chiffres après complément T int taille = 0; // Longueur de données d'origine int n = byTata.length; // le nombre restant de chiffres après le mod 64 int m = n% 64; // Calculez le nombre de 0 ajouté et la longueur totale après avoir ajouté 10 if (m <56) {zéros = 55 - m; taille = n - m + 64; } else if (m == 56) {zeros = 63; taille = n + 8 + 64; } else {zeros = 63 - m + 56; taille = (n + 64) - m + 64; } // Le contenu du nouveau tableau généré après remplir l'octet [] newByte = new byte [taille]; // Copiez la partie précédente du système Array.ArrayCopy (ByteData, 0, NewByte, 0, N); // Obtenez la position de l'élément de données d'ajout du tableau int l = n; // l'opération complément 1 newByte [l ++] = (octet) 0x80; // l'opération Complément 0 pour (int i = 0; i <zeros; i ++) {newByte [l ++] = (byte) 0x00; } // Calculez la longueur des données et les bits de longueur de données sont de 8 octets au total, long entier long n = (long) n * 8; octet h8 = (octet) (n & 0xff); octet h7 = (octet) ((n >> 8) & 0xff); octet h6 = (octet) ((n >> 16) & 0xff); octet h5 = (octet) ((n >> 24) & 0xff); octet h4 = (octet) ((n >> 32) & 0xff); octet h3 = (octet) ((n >> 16) & 0xff); octet h5 = (octet) ((n >> 24) & 0xff); octet h4 = (octet) ((n >> 32) & 0xff); octet h3 = (octet) ((n >> 40) & 0xff); octet h2 = (octet) ((n >> 48) & 0xff); octet h1 = (octet) (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; retourner 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); } // Unité Résumé de la fonction de calcul privé void encrypt () {pour (int i = 16; i <= 79; i ++) {tmpData [i] = f4 (tmpdata [i - 3] ^ tmpdata [i - 16] ^ tmpdata [i - 14] ^ tmpdata [i - 16], 1); } int [] tmpabcde = new int [5]; for (int i1 = 0; i1 <tmpabcde.length; i1 ++) {tmpabcde [i1] = digesntnt [i1]; } pour (int j = 0; j <= 19; j ++) {int tmp = f4 (tmpabcde [0], 5) + f1 (tmpabcde [1], tmpabcde [2], tmpabcde [3]) + tmpabcde [4] + tmpdata [j] + 0x5a827991; tmpabcde [4] = tmpabcDe [3]; tmpabcde [3] = tmpabcDe [2]; tmpabcde [2] = f4 (tmpabcDe [1], 30); tmpabcde [1] = tmpabcDe [0]; tmpabcde [0] = tmp; } pour (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; } pour (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; } pour (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; } pour (int i2 = 0; i2 <tmpabcde.length; i2 ++) {digesntInt [i2] = digesntInt [i2] + tmpabcde [i2]; } pour (int n = 0; n <tmpdata.length; n ++) {tmpdata [n] = 0; }} // Convertir un tableau de 4 byte en Integer private int bytearrayToint (byte [] byTata, int i) {return ((byTata [i] & 0xff) << 24) | ((byTedata [i + 1] & 0xff) << 16) | ((byTedata [i + 2] & 0xff) << 8) | (byTedata [i + 3] & 0xff); } // convertir les entiers en tableau 4-byte private void inttoBytearray (int intValue, byte [] byTata, int i) {byTata [i] = (byte) (intValue >>> 24); byTata [i + 1] = (octet) (intValue >>> 16); byTata [i + 2] = (octet) (intValue >>> 8); byTata [i + 3] = (byte) intValue; } // convertir les octets en chaîne hexadécimale String privée statique bytetohexstring (byte ib) {char [] numérique = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', ',', 'F', 'A', ',' C ',' D '', ',', 'F', ',' B ',' C '', 'D' char [] ob = nouveau char [2]; ob [0] = numérique [(ib >>> 4) & 0x0f]; ob [1] = numérique [ib & 0x0f]; String s = new String (ob); retour s; } // Convertir le tableau d'octet en chaîne hexadécimale privée statique statique bytearraytohexstring (byte [] bytearray) {string strdigest = ""; for (int i = 0; i <bytearray.length; i ++) {strdigest + = bytetoHExString (bytearray [i]); } return strdigest; } // Calculez le digest Sha-1 et renvoyez le tableau d'octet correspondant octet public [] getDigestofBytes (byte [] byTata) {process_input_bytes (byTata); octet [] digest = nouveau octet [20]; for (int i = 0; i <digesntInt.length; i ++) {intToByTearray (digesntInt [i], digest, i * 4); } return digest; } // Calculez le digest Sha-1 et renvoyez la chaîne hexadécimale correspondante String public GetDigeStOfString (byte [] byTata) {return bytearraytohexString (getDigestofBytes (byTata)); } public static void main (String [] args) {String data = "tokendemo"; System.out.println (données); String digest = new sha1 (). GetDigeStOfString (data.getBytes ()); System.out.println (Digest); }}wechatjavatokenvalidate.java
package com.dqiang.demo; Importer java.io.ioException; import java.util.arrays; import javax.servlet.servletException; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletRequest; javax.servlet.http.httpservletResponse; / ** * @Author STEMQ * @version v1.0 * Blog: http: //blog.csdn.net/stemq * web: www.dqiang.com * / classe publique wechatjavatokenvalidate étend httpservlet {private static final SerialVersionUid = -676198293847719310l; / * Par exemple * URL (adresse du serveur) http://weixin.xxxx.com/wechatjavatokenvalidate/wechattoken * token (token) tokenchat * * / private String token = "tokenchat"; // Définissez le jeton par vous-même en fonction de la situation réelle et remplissez le jeton de configuration du serveur (jeton) de la même manière que @Override Protected vid Doget (HttpservletRequest, httpservletResponse réponse) lance Servlexception, ioException {// wechat Encryption Signature Signature = request.getParameter ("Signature"); // chaîne de chaîne aléatoire echostr = request.getParameter ("echostr"); // TimeStamp String TimeStamp = request.getParameter ("TimeStamp"); // chaîne de nombres aléatoires nonce = request.getParameter ("nonce"); String [] str = {token, horodatamp, nonce}; // Arrays de tri du dictionnaire.Sort (STR); String bigstr = str [0] + str [1] + str [2]; // Sha1 Encryption String Digest = new Sha1 (). GetDigeStOfString (bigstr.getBytes ()). TolowerCase (); // confirme la demande à WeChat if (digest.equals (signature)) {réponse.getWriter (). Print (eChostr); }}}3. Téléchargement du code source: WeChatjavatokenValidate
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.