In Bezug auf den Hintergrundzugriff der WeChat -Plattform hat der Beamte den Download des PHP -Beispiels bereitgestellt. Für den Hintergrundzugriff von Java gibt es derzeit keinen vollständigen Fall, der direkt verwendet wird. Ich habe eine Java -Version der Demo geschrieben, damit jeder sie benutzen kann.
1. Vorbereitung
Das Projekt ist mit Maven gebaut und kann direkt in die Sonnenfinsternis importiert werden. Die Version von JDK ist 1.8.0_111. Beide Elemente können entsprechend den tatsächlichen Bedürfnissen geändert werden und schließlich wird der Krieg an den Server veröffentlicht.
2. Praktische Übungen
Lesen Sie vor dem Betrieb zuerst das offizielle Dokument und durchführen
1. auf den Entwicklermodus einstellen:
Nachdem Sie sich in den Hintergrund der öffentlichen Plattform in WeChat angemeldet haben, klicken Sie auf "Funktionen" - "Erweiterte Funktionen" - "Entwicklungsmodus", um den Entwicklungsmodus einzugeben. Wenn die öffentliche Plattform "noch nicht Entwickler wird" zeigt, klicken Sie auf "Werden Sie Entwickler".
2. Füllen Sie die Serverkonfiguration ein:
Klicken Sie auf "Entwicklung" - "Basic Configuration" - "Füllen Sie die Serverkonfiguration ein", wie in Abbildung 1 bis 3 gezeigt
Abbildung 1
Abbildung 2
Abbildung 3
3. Beispielcode:
Sha1.java
Paket com.dqiang.demo; öffentliche Klasse SHA1 {private final int [] abcde = {0x67452301, 0xefcDab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0}; // Abstract Data Storage Array private int [] digestint = new int [5]; // Temporäres Datenspeicherarray privat int [] tmpdata = new int [80]; // Berechnen Sie SHA-1 Digest Private int process_input_bytes (byte [] bytedata) {// Vorversuch mit dem konstanten System.ArrayCopy (ABCDE, 0, DigEstint, 0, Abcde.Length); // formatieren Sie das Eingabe -Byte -Array, Ergänzung 10 und Längendaten -Byte [] newbyte = bytearrayFormatdata (bytedata); // Die Anzahl der Dateneinheiten abrufen, die für die Datenzusammenfassung berechnet werden. // Schleife um jede Dateneinheit für (int pos = 0; pos <mcount; pos ++) {// die Daten jeder Einheit in 16 Ganzzahl -Daten umwandeln und in den ersten 16 Array -Elementen von TMPData für (int j = 0; J <16; j ++) {tmpdata [j] = j = 0; J <16; } // abstrakte Berechnungsfunktion Encrypt (); } return 20; } // Formateingabe -Byte -Array -Format private Byte [] bytearrayFormatData (byte [] bytedata) {// Anzahl der Komplement 0 int Zeros = 0; // Gesamtzahl der Ziffern nach Komplement t int size = 0; // Originaldatenlänge int n = bytedata.length; // die verbleibende Anzahl von Ziffern nach Mod 64 int m = n % 64; // Berechnen Sie die Anzahl von 0 hinzugefügten und die Gesamtlänge nach Zugabe von 10 if (m <56) {Zeros = 55 - m; Größe = n - m + 64; } else if (m == 56) {Zeros = 63; Größe = N + 8 + 64; } else {Zeros = 63 - M + 56; Größe = (n + 64) - M + 64; } // Der Inhalt des neuen Arrays, das nach dem Füllen von Byte [] newbyte = new byte [Größe] erzeugt wurde; // den vorherigen Teil des Array -Systems kopieren. // Erhalten Sie die Position des Anhangsdatenelements des Array int l = n; // Die Komplement 1 -Operation Newbyte [l ++] = (byte) 0x80; // Die Ergänzung 0 Operation für (int i = 0; i <Zeros; i ++) {newByte [l ++] = (byte) 0x00; } // Berechnen Sie die Datenlänge, und die Datenlängenbits betragen insgesamt 8 Bytes, lange Ganzzahl lang n = (lang) n * 8; Byte H8 = (Byte) (N & 0xff); Byte H7 = (Byte) ((n >> 8) & 0xff); Byte H6 = (Byte) ((n >> 16) & 0xff); Byte H5 = (Byte) ((n >> 24) & 0xff); Byte H4 = (Byte) ((n >> 32) & 0xff); Byte H3 = (Byte) ((n >> 16) & 0xff); Byte H5 = (Byte) ((n >> 24) & 0xff); Byte H4 = (Byte) ((n >> 32) & 0xff); Byte H3 = (Byte) ((n >> 40) & 0xff); Byte H2 = (Byte) ((n >> 48) & 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; Return 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); } // Einheit Zusammenfassung Berechnungsfunktion private void Encrypt () {für (int i = 16; i <= 79; i ++) {tmpdata [i] = f4 (tmpdata [i - 3] ^ tmpdata [i - 8] ^ tmpdata [i - 14] ^ tmpdata [i - 16], 1), 1), 1). } int [] tmpabcde = new int [5]; für (int i1 = 0; i1 <tmpabcde.length; i1 ++) {tmpabcde [i1] = DigEstint [i1]; } für (int j = 0; j <= 19; j ++) {int tmp = f4 (tmpabcde [0], 5) + f1 (tmpabcde [1], tmpabcde [2], tmpabcde [3]) + tmpabcde [4] + tmpdata [j] + 0x5a8279; tmpabcde [4] = tmpabcde [3]; tmpabcde [3] = tmpabcde [2]; tmpabcde [2] = f4 (tmpabcde [1], 30); tmpabcde [1] = tmpabcde [0]; tmpabcde [0] = tmp; } für (int k = 20; k <= 39; k ++) {int tmp = f4 (tmpabcde [0], 5) + f2 (tmpabcde [1], tmpabcde [2], tmpabcde [3]) + tmpabcde [4] + tmpdata [k] + 0x6ed9El [4] + tmpdata [k] + 0 x 0x6ed9El; tmpabcde [4] = tmpabcde [3]; tmpabcde [3] = tmpabcde [2]; tmpabcde [2] = f4 (tmpabcde [1], 30); tmpabcde [1] = tmpabcde [0]; tmpabcde [0] = tmp; } für (int l = 40; l <= 59; l ++) {int tmp = f4 (tmpabcde [0], 5) + f3 (tmpabcde [1], tmpabcde [2], tmpabcde [3]) + tmpabcde [4] + tmpdata [l] + 0x8f1bbbb; tmpabcde [4] = tmpabcde [3]; tmpabcde [3] = tmpabcde [2]; tmpabcde [2] = f4 (tmpabcde [1], 30); tmpabcde [1] = tmpabcde [0]; tmpabcde [0] = tmp; } für (int m = 60; m <= 79; m ++) {int tmp = f4 (tmpabcde [0], 5) + f2 (tmpabcde [1], tmpabcde [2], tmpabcde [3]) + tmpabcde [4] + tmpdata [m] + 0xca62 [4] + tmpdata [M] + 0xca62; tmpabcde [4] = tmpabcde [3]; tmpabcde [3] = tmpabcde [2]; tmpabcde [2] = f4 (tmpabcde [1], 30); tmpabcde [1] = tmpabcde [0]; tmpabcde [0] = tmp; } für (int i2 = 0; i2 <tmpabcde.length; i2 ++) {DigEsTint [i2] = DigEsTint [i2]+tmpabcde [i2]; } für (int n = 0; n <tmpdata.length; n ++) {tmpdata [n] = 0; }} // Ein 4-Byte-Array in ganzzahlige private int bytearraytoint (byte [] bytedata, int i) {return ((bytedata [i] & 0xff) << 24) | ((bytedata [i + 1] & 0xff) << 16) | ((bytedata [i + 2] & 0xff) << 8) | (bytedata [i + 3] & 0xff); } // Ganzzahlen in 4-byte Array private void inttobytearray (int intValue, byte [] bytedata, int i) {bytedata [i] = (byte) (intValue >>> 24) konvertieren; bytedata [i + 1] = (byte) (intValue >>> 16); bytedata [i + 2] = (byte) (intValue >>> 8); bytedata [i + 3] = (byte) intValue; } // Bytes in hexadezimale Zeichenfolge private statische String -Bytetohexstring (Byte ib) {char [] digit = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', '; char [] ob = new char [2]; ob [0] = digit [(ib >>> 4) & 0x0f]; ob [1] = digit [ib & 0x0f]; String s = neuer String (OB); Rückkehr s; } // Byte -Array in hexadezimale Zeichenfolge private statische String -BytearrayTohexString (Byte [] bytearray) {String strDigest = ""; für (int i = 0; i <bytearray.length; i ++) {strDigest+= bytetohexstring (bytearray [i]); } return strdigest; } // Berechnen Sie den SHA-1-Digest und geben Sie das entsprechende Byte-Array public byte [] getDigestofBytes (byte [] bytedata) {prozess_input_Bytes (bytedata) zurück; byte [] digest = neues byte [20]; für (int i = 0; i <digEstint.length; i ++) {inttObytearray (DigEstint [i], digest, i * 4); } return digest; } // Berechnen Sie die SHA-1-Digest und geben Sie die entsprechende hexadezimale String Public String getDigestofString zurück (byte [] bytedata) {return bytearraytohexString (getDigestofBytes (bytedata)); } public static void main (String [] args) {String data = "tokendemo"; System.out.println (Daten); String digest = new SHA1 (). GetDigestofString (data.getBytes ()); System.out.println (Digest); }}WeChatjavatokenValidat.java
Paket com.dqiang.demo; importieren java.io.ioxception; import Java.util.Arrays; import Javax.servlet.servletException; import Javax.servlet.http.httpServlet; importieren javax.servlet.http.httpletRequest; Import. javax.servlet.http.httpServletResponse; /** * @Author Stemq * @version v1.0 * Blog: http: //blog.csdn.net/stemq * Web: www.dqiang.com */public class wechatjavatokenValidat erweitert HtttpServlet {private statische endgültige Serialversion = -676198293873120l; / * Zum Beispiel * URL (Serveradresse) http://weixin.xxxx.com/wechatjavatokenvalidate/wechattoken * Token (Token) ToKenchat * */private String token = "ToKchat"; // Definieren Sie das Token selbst entsprechend der tatsächlichen Situation und füllen Sie das Serverkonfiguration -Token (Token) aus wie @Override geschütztes void dodget (httpServletRequest Request, HttpServletResponse -Antwort). // zufällige String String echoStr = request.getParameter ("echostr"); // Zeitstempel String timestamp = request.getParameter ("timestamp"); // Zufallszahlenstring nonce = request.getParameter ("nonce"); String [] str = {Token, Timestamp, nonce}; // Dictionary Sorting Arrays.sort (str); String bigstr = str [0] + str [1] + str [2]; // SHA1 Verschlüsselungsstring Digest = new SHA1 (). GetDigestofString (Bigstr.getBytes ()). TolowerCase (); // Die Anfrage an WeChat if (digest.equals (Signature)) {response.getWriter (). Print (echostr); }}}3. Quellcode -Download: WeChatjavatokenValidat
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.