Mengenai akses latar belakang platform WeChat, pejabat tersebut telah memberikan pengunduhan contoh PHP. Untuk akses latar belakang Java, saat ini tidak ada kasus lengkap untuk digunakan secara langsung. Saya menulis versi demo Java untuk digunakan semua orang.
1. Persiapan
Proyek ini dibangun dengan Maven dan dapat secara langsung diimpor ke gerhana. Versi JDK adalah 1.8.0_111. Kedua item ini dapat dimodifikasi sesuai dengan kebutuhan aktual dan akhirnya perang dirilis ke server.
2. Latihan praktis
Sebelum operasi, baca dokumen resmi terlebih dahulu, dan memiliki proses ide keseluruhan, lihat alamat resmi
1. Setel ke mode pengembang:
Setelah masuk ke latar belakang platform publik WeChat, klik "Fungsi" - "Fungsi Lanjutan" - "Mode Pengembangan" untuk memasuki mode pengembangan. Jika platform publik menampilkan "belum menjadi pengembang", klik "menjadi pengembang"
2. Isi konfigurasi server:
Klik "Pengembangan" - "Konfigurasi Dasar" - "Isi Konfigurasi Server" seperti yang ditunjukkan pada Gambar 1 hingga 3
Gambar 1
Gambar 2
Gambar 3
3. Kode Sampel:
Sha1.java
paket com.dqiang.demo; kelas publik sha1 {private final int [] abcde = {0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0}; // abstrak Data Storage Array Private Int [] DigestInt = int baru [5]; // array penyimpanan data sementara int private int [] tmpData = int new [80]; // Hitung SHA-1 Digest Private Int Process_Input_bytes (byte [] bytedata) {// Percobaan pendahuluan dari System.ArrayCopy konstan (ABCDE, 0, Digestint, 0, ABCDE.Length); // Format array byte input, suplemen 10 dan panjang data byte [] newbyte = bytearrayformatdata (bytedata); // Dapatkan jumlah unit data yang dihitung untuk ringkasan data int Mcount = newbyte.length / 64; // Loop to summarize each data unit for (int pos = 0; pos < MCount; pos++) { // Convert the data of each unit into 16 integer data and save it in the first 16 array elements of tmpData for (int j = 0; j < 16; j++) { tmpData[j] = byteArrayToInt(newbyte, (pos * 64) + (j * 4)); } // Fungsi perhitungan abstrak enkripsi (); } return 20; } // format input byte array format byte pribadi [] bytearrayformatdata (byte [] bytedata) {// jumlah komplemen 0 int zeros = 0; // Jumlah total digit setelah komplemen t int ukuran = 0; // panjang data asli int n = bytedata.length; // Jumlah digit yang tersisa setelah mod 64 int m = n % 64; // Hitung jumlah 0 yang ditambahkan dan total panjang setelah menambahkan 10 if (m <56) {nolos = 55 - m; size = n - m + 64; } lain jika (m == 56) {nolos = 63; ukuran = n + 8 + 64; } else {nolos = 63 - m + 56; size = (n + 64) - M + 64; } // Konten array baru yang dihasilkan setelah mengisi byte [] newByte = byte baru [ukuran]; // Salin bagian sebelumnya dari array System.ArrayCopy (Bytedata, 0, Newbyte, 0, n); // Dapatkan posisi elemen data append dari array int l = n; // operasi komplemen 1 newByte [l ++] = (byte) 0x80; // operasi komplemen 0 untuk (int i = 0; i <nolos; i ++) {newByte [l ++] = (byte) 0x00; } // Hitung panjang data, dan bit panjang data adalah 8 byte secara total, bilangan bulat panjang long n = (panjang) 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; kembalikan 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 summary calculation function 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 = int baru [5]; untuk (int i1 = 0; i1 <tmpAbcde.length; i1 ++) {tmpAbcde [i1] = digestint [i1]; } untuk (int j = 0; j <= 19; j ++) {int tmp = f4 (tmpAbcde [0], 5) + f1 (tmpAbcde [1], tmpAbcde [2], tmpAbcde [3]) + tmpAbcde [4]; tmpAbcde [4] = tmpAbcde [3]; tmpAbcde [3] = tmpAbcde [2]; tmpAbcde [2] = f4 (tmpAbcde [1], 30); tmpAbcde [1] = tmpAbcde [0]; tmpAbcde [0] = tmp; } untuk (int k = 20; k <= 39; k ++) {int tmp = f4 (tmpAbcde [0], 5) + f2 (tmpAbcde [1], tmpAbcde [2], tmpAbcde [3]) + tmpAbcde [4] + tmpAbcde [3]) + tmpAbcde [4] + TmpAbcde [3]) + tmpAbcde [4] + tmpAbcde [3]) + tmpAbCDE [4] + TmpABDE [ tmpAbcde [4] = tmpAbcde [3]; tmpAbcde [3] = tmpAbcde [2]; tmpAbcde [2] = f4 (tmpAbcde [1], 30); tmpAbcde [1] = tmpAbcde [0]; tmpAbcde [0] = tmp; } untuk (int l = 40; l <= 59; l ++) {int tmp = f4 (tmpAbcde [0], 5) + f3 (tmpAbcde [1], tmpAbcde [2], tmpAbcde [3]) + tmpAbcde [4] + TmpAbcde [3]) + tmpAbcde [4] + tmpAbcde [3]) + tmpAbcde [4] + TmpAbcde [3]) + tmpAbcde [4] + TmpAbde [3]) + tmpAbcde [4] + tmpde [3]) + TMPABCDE [4] tmpAbcde [4] = tmpAbcde [3]; tmpAbcde [3] = tmpAbcde [2]; tmpAbcde [2] = f4 (tmpAbcde [1], 30); tmpAbcde [1] = tmpAbcde [0]; tmpAbcde [0] = tmp; } untuk (int m = 60; m <= 79; m ++) {int tmp = f4 (tmpAbcde [0], 5) + f2 (tmpAbcde [1], tmpAbcde [2], tmpAbcde [3]) + tmpAbcde [4]; tmpAbcde [4] = tmpAbcde [3]; tmpAbcde [3] = tmpAbcde [2]; tmpAbcde [2] = f4 (tmpAbcde [1], 30); tmpAbcde [1] = tmpAbcde [0]; tmpAbcde [0] = tmp; } untuk (int i2 = 0; i2 <tmpAbcde.length; i2 ++) {digestInt [i2] = DigestInt [i2]+tmpAbcde [i2]; } untuk (int n = 0; n <tmpdata.length; n ++) {tmpData [n] = 0; }} // Konversi array 4-byte ke integer 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); } // Konversi bilangan bulat menjadi 4-byte array 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; } // Konversi byte menjadi hexadecimal string private static string bytetohexstring (byte ib) {char [] digit = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', ',', '6', '7', '8', '9', ',', ',', ',', '8', ',', ',', '8', ',', '8', ',', char [] ob = char baru [2]; ob [0] = digit [(ib >>> 4) & 0x0f]; ob [1] = digit [ib & 0x0f]; String s = string baru (ob); kembali S; } // Konversi array byte ke hexadecimal string private static string bytearraytoHexString (byte [] byteArray) {string strdigest = ""; untuk (int i = 0; i <bytearray.length; i ++) {strdigest+= bytetoHexString (byteArray [i]); } return strdigest; } // Hitung pencernaan SHA-1 dan kembalikan byte byte byte publik yang sesuai [] getDigestofbytes (byte [] bytedata) {process_input_bytes (bytedata); byte [] digest = byte baru [20]; untuk (int i = 0; i <digestint.length; i ++) {inttobyteArray (digestInt [i], digest, i * 4); } return Digest; } // Hitung Digest SHA-1 dan kembalikan hexadecimal string public string getDigestOfString (byte [] bytedata) {return bytearraytoHexString (getDigestofbytes (bytedata)); } public static void main (string [] args) {string data = "tokendemo"; System.out.println (data); String Digest = baru sha1 (). GetDigestOfString (data.getBytes ()); System.out.println (Digest); }}wechatjavatokenvalidate.java
paket com.dqiang.demo; impor java.io.ioException; impor java.util.arrays; impor javax.servlet.servletException; import javax.servlet.http.httpservlet; import javax.servlet.htp.httpservletrequest; impor javax.servlet.htp.htpservletrequest; impor javax.servlet javax.servlet.http.httpservletResponse; /** * @Author STEMQ * @Version v1.0 * Blog: http: //blog.csdn.net/stemq * web: www.dqiang.com */kelas publik wechatjavatokenidate meluas httpservlet {private static long serialversionuid = -67612977777.977.2712 / * Misalnya * URL (Alamat Server) http://weixin.xxxx.com/weChatjavatokenValidate/wechtoken * token (token) tokenenchat * */token string pribadi = "tokenchat"; // Tentukan token sendiri sesuai dengan situasi aktual dan isi token konfigurasi server (token) sama dengan @Override dilindungi void doGet (httpservletRequest, httpservletResponse response) melempar servletException, ioException {// wechate ancryppare Signature cignature cignature cignature = requate. // string acak echoStr = request.getParameter ("echoStr"); // timestamp string timestamp = request.getParameter ("timestamp"); // Nomor acak string nonce = request.getParameter ("nonce"); String [] str = {token, timestamp, nonce}; // array penyortiran kamus.sort (str); String bigstr = str [0] + str [1] + str [2]; // SHA1 String String Digest = baru sha1 (). GetDigestOfString (bigstr.getbytes ()). TolowerCase (); // konfirmasi permintaan ke weChat if (digest.equals (tanda tangan)) {response.getWriter (). Print (echoStr); }}}3. Kode Sumber Unduh: WeChatJavatokenValidate
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.