Что касается фонового доступа к платформе WeChat, чиновник предоставил загрузку примера PHP. Для получения фонового доступа Java в настоящее время нет полного случая для использования напрямую. Я написал Java -версию демонстрации для всех.
1. Подготовка
Проект построен с Maven и может быть непосредственно импортирован в Eclipse. Версия JDK - 1.8.0_111. Оба эти элемента могут быть изменены в соответствии с фактическими потребностями, и, наконец, война выпускается на сервер.
2. Практические упражнения
Перед эксплуатацией сначала прочитайте официальный документ и имейте общий процесс идеи, обратитесь к официальному адресу
1. Установите в режиме разработчика:
После входа в общедоступную платформу WeChat нажмите «Функции» - «Усовершенствованные функции» - «Режим разработки», чтобы ввести режим разработки. Если общедоступная платформа отображает «еще не станет разработчиком», нажмите «Станьте разработчиком»
2. Заполните конфигурацию сервера:
Нажмите «Разработка» - «Основная конфигурация» - «Заполните конфигурацию сервера», как показано на рисунке 1-3
Рисунок 1
Рисунок 2
Рисунок 3
3. Пример кода:
Sha1.java
пакет com.dqiang.demo; открытый класс sha1 {private final int [] abcde = {0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0}; // абстрактный массив хранения данных private int [] digestint = new Int [5]; // Временное массив хранения данных private int [] tmpdata = new int [80]; // Рассчитайте SHA-1 Digest Private int process_input_bytes (byte [] bytedata) {// Предварительное испытание постоянной системы. Arraycopy (abcde, 0, digestint, 0, abcde.length); // Форматируйте массив входных байтов, дополнение 10 и байт данных длины [] newbyte = bytearrayformatdata (bytedata); // Получение количества единиц данных, рассчитанных для Сводка данных int mcount = newbyte.length / 64; // Цикл для обобщения каждого блока данных для (int pos = 0; pos <mcount; pos ++) {// преобразовать данные каждого блока в 16 целочисленных данных и сохранить его в первых 16 элементах массива tmpdata для (int j = 0; j <16; j ++) {tmpdata [j] = speearraytoint (newbyte, (op * 64); } // Абстрактная функция расчета Encrypt (); } return 20; } // Формат ввода байтовых массив формат частный байт [] bytearrayformatdata (byte [] bytedata) {// количество комплемента 0 int zeros = 0; // общее количество цифр после дополнения t int size = 0; // исходная длина данных int n = bytedata.length; // оставшееся количество цифр после мод 64 int m = n % 64; // Рассчитайте номер 0 добавленной и общую длину после добавления 10 if (m <56) {Zeros = 55 - m; размер = n - m + 64; } else if (m == 56) {zeros = 63; размер = n + 8 + 64; } else {Zeros = 63 - M + 56; размер = (n + 64) - M + 64; } // Содержание нового массива, сгенерированного после заполнения байта [] newbyte = new Byte [size]; // скопировать предыдущую часть системы массива. // Получить позицию элемента данных добавления массива int l = n; // комплемент 1 Операция Newbyte [l ++] = (байт) 0x80; // операция комплемента 0 для (int i = 0; i <zeros; i ++) {newbyte [l ++] = (byte) 0x00; } // Рассчитайте длину данных, а биты длины данных составляют 8 байт, в целом, длинное целое число n = (длинное) 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); байт H2 = (байт) ((n >> 48) & 0xff); байт H1 = (байт) (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; вернуть Ньюбит; } 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); } // Функция расчета единицы Функция расчета private void incrypt () {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] + 0x8999999999999999999999 года; 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] + 0x6; tmpabcde [4] = tmpabcde [3]; tmpabcde [3] = tmpabcde [2]; tmpabcde [2] = f4 (tmpabcde [1], 30); tmpabcde [1] = tmpabcde [0]; tmpabcde [0] = tmp; } для (int l = 40; l <= 59; l ++) {int tmp = f4 (tmpabcde [0], 5) + f3 (tmpabcde [1], tmpabcde [2], tmpabcde [3]) + tmpabcde [4] + tmpdata [l] 0x1bcde [4] + tmpdata [l] 0x1bcde [4] + tmpdata [l] + 0x. tmpabcde [4] = tmpabcde [3]; tmpabcde [3] = tmpabcde [2]; tmpabcde [2] = f4 (tmpabcde [1], 30); tmpabcde [1] = tmpabcde [0]; tmpabcde [0] = tmp; } для (int m = 60; m <= 79; m ++) {int tmp = f4 (tmpabcde [0], 5) + f2 (tmpabcde [1], tmpabcde [2], tmpabcde [3]) + tmpabcde [4] + tmpdata [m] 0xcca6; 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; }} // Конвертировать 4-байтовый массив в 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); } // преобразовать целые числа в 4-байтовую массив 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; } // конвертировать байты в шестнадцатеричную строку частной статической строки bytetoHexstring (byte ib) {char [] digit = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'b', '', 'd', ',' at '', ',', ',', ',' at '', ',', 'at' ',', ',', '9', '9 char [] ob = new char [2]; ob [0] = Digit [(ib >>> 4) & 0x0f]; ob [1] = Digit [ib & 0x0f]; Строка s = new String (ob); возврат S; } // Преобразовать байтовые массивы в шестнадцатеричную строку частной статической строки BytearrayToHexString (byte [] bytearray) {string strdigest = ""; for (int i = 0; i <bytearray.length; i ++) {strdigest+= bytetohexstring (bytearray [i]); } вернуть strdigest; } // Рассчитайте дивариюр SHA-1 и верните соответствующий байт-массив публичный байт [] 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; } // Рассчитайте дивариюр SHA-1 и верните соответствующую шестнадцатеричную строку открытой строки 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
пакет com.dqiang.demo; Импорт java.io.ioexception; import java.util.arrays; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.httpserverservevequest; import javax.servlet.http.htplequestrequest; javax.servlet.http.httpservletresponse; /** * @author stemq * @version v1.0 * блог: http: //blog.csdn.net/stemq * web: www.dqiang.com */public class wechatjavatokenvidate httpservlet {private static final long serialversionuid = -6761982938777193193193193193193193193193193193193193193131313131313131313131313131313131313131313131313131313131313131313193131931931931313131313R9нт. / * Например * url (адрес сервера) http://weixin.xxxx.com/wechatjavatokenvalidate/wechattoken * token (token) tokenchat * */private String token = "tokenchat"; // Определите токен самостоятельно в соответствии с фактической ситуацией и заполните токен конфигурации сервера (токен), так же, как @Override Protected void Doget (httpservletrequest, httpservletresponse response) Throws servletexception, ioexception {// wechat signature singature = request.greetparameter (""); // случайная строка string echoStr = request.getParameter ("echoStr"); // TimeStamp String TimeStamp = request.getParameter ("TimeStamp"); // случайное число string nonce = request.getParameter ("nonce"); String [] str = {token, timestamp, nonce}; // Словарь сортировок Arrays.sort (str); String bigstr = str [0] + str [1] + str [2]; // Sha1 шифрования строки Digest = new Sha1 (). GetDigestOfString (bigstr.getBytes ()). ToLowerCase (); // подтвердить запрос на WeChat if (digest.equals (signature)) {response.getWriter (). Print (echoStr); }}}3. Скачать исходный код: weChatjavatokenvalidate
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.