Regarding the background access of the WeChat platform, the official has provided the download of the php example. For the background access of Java, there is currently no complete case to use directly. I wrote a Java version of the demo for everyone to use.
1. Preparation
The project is built with maven and can be directly imported into eclipse. The version of jdk is 1.8.0_111. Both of these items can be modified according to actual needs and finally war is released to the server.
2. Practical drills
Before operation, read the official document first, and have an overall idea process, refer to the official address
1. Set to developer mode:
After logging into the WeChat public platform background, click "Functions" - "Advanced Functions" - "Development Mode" to enter the development mode. If the public platform displays "not yet become a developer", click "Become a developer"
2. Fill in the server configuration:
Click "Development" - "Basic Configuration" - "Fill in Server Configuration" as shown in Figure 1 to 3
Figure 1
Figure 2
Figure 3
3. Sample code:
SHA1.java
package com.dqiang.demo; public class SHA1 { private final int[] abcde = { 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 }; // Abstract data storage array private int[] digestInt = new int[5]; // Temporary data storage array private int[] tmpData = new int[80]; // Calculate sha-1 digest private int process_input_bytes(byte[] bytedata) { // Preliminary trial of the constant System.arraycopy(abcde, 0, digestInt, 0, abcde.length); // Format the input byte array, supplement 10 and length data byte[] newbyte = byteArrayFormatData(bytedata); // Get the number of data units calculated for data summary 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)); } // Abstract calculation function encrypt(); } return 20; } // Format input byte array format private byte[] byteArrayFormatData(byte[] bytedata) { // Number of complement 0 int zeros = 0; // Total number of digits after complement t int size = 0; // Original data length int n = bytedata.length; // The remaining number of digits after mod 64 int m = n % 64; // Calculate the number of 0 added and the total length after adding 10 if (m < 56) { zeros = 55 - m; size = n - m + 64; } else if (m == 56) { zeros = 63; size = n + 8 + 64; } else { zeros = 63 - m + 56; size = (n + 64) - m + 64; } // The content of the new array generated after filling byte[] newbyte = new byte[size]; // Copy the previous part of the array System.arraycopy(bytedata, 0, newbyte, 0, n); // Get the position of the Append data element of the array int l = n; // The complement 1 operation newbyte[l++] = (byte) 0x80; // The complement 0 operation for (int i = 0; i < zeros; i++) { newbyte[l++] = (byte) 0x00; } // Calculate the data length, and the data length bits are 8 bytes in total, long integer long N = (long) 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); } // 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 = 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; } for (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; } for (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; } for (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]; } for (int n = 0; n < tmpData.length; n++) { tmpData[n] = 0; } } // Convert a 4-byte array to 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); } // Convert integers to 4-byte array 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; } // Convert bytes to hexadecimal string private 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 = new char[2]; ob[0] = Digit[(ib >>> 4) & 0X0F]; ob[1] = Digit[ib & 0X0F]; String s = new String(ob); return s; } // Convert byte array to hexadecimal string private static String byteArrayToHexString(byte[] bytearray) { String strDigest = ""; for (int i = 0; i < bytearray.length; i++) { strDigest += byteToHexString(bytearray[i]); } return strDigest; } // Calculate the sha-1 digest and return the corresponding byte array public byte[] getDigestOfBytes(byte[] byteData) { process_input_bytes(byteData); byte[] digest = new byte[20]; for (int i = 0; i < digestInt.length; i++) { intToByteArray(digestInt[i], digest, i * 4); } return digest; } // Calculate the sha-1 digest and return the corresponding 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 = new SHA1().getDigestOfString(data.getBytes()); System.out.println(digest); }}weChatJavaTokenValidate.java
package 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; /* For example * URL (server address) http://weixin.xxxx.com/weChatJavaTokenValidate/wechatToken * Token(token) tokenChat * */ private String TOKEN = "tokenChat"; //Define the token by yourself according to the actual situation and fill in the server configuration Token (token) the same as @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // WeChat encryption signature String signature = request.getParameter("signature"); // Random string String echostr = request.getParameter("echostr"); // Timestamp String timestamp = request.getParameter("timestamp"); // Random number String nonce = request.getParameter("nonce"); String[] str = { TOKEN, timestamp, nonce }; // Dictionary sorting Arrays.sort(str); String bigStr = str[0] + str[1] + str[2]; // SHA1 encryption String digest = new SHA1().getDigestOfString(bigStr.getBytes()).toLowerCase(); // Confirm the request to WeChat if (digest.equals(signature)) { response.getWriter().print(echostr); } } }3. Source code download: weChatJavaTokenValidate
The above is all the content of this article. I hope it will be helpful to everyone's learning and I hope everyone will support Wulin.com more.