1. WeChat Applet <br /> Шаг 1: Вызовите wx.login, чтобы получить адрес документа Кодового документа Шаг 2: Определите, разрешает ли пользователь читать адрес документа пользователя. Поэтому мы передадим EncryptedData и IV, полученные WX.Login, чтобы получить код и wx.getUserinfo на фоне через WX.Request запрос
Данные возвращаются сервером:
Мини -программная код:
// Вызов интерфейса входа в систему для получения кода wx.login ({upport: function (res) {wx.getSetting ({success (setres) {// определяет, авторизовано ли if (! Setres.authsetting ['scope.userinfo']) {// Authorize Access to wx. wx.getuserinfo ({lang: "zh_cn", успех: function (userres) {// stack network запрос wx.request ({url: config.loginwxurl, data: {код: res.code, incrypteddata: userres.encrypteddata, userres. «Приложение/X-WWW-FORM-URLENCODED"}, метод: 'POST', // Серверный поиск успеха: функция (результат) {// Получить информацию пользователя wx.getUserInfo ({lang: "zh_cn", успех: function (userres) {// stack network request wx.request ({url: config.loginwxurl, data: {code: res.code, incrypteddata: userres.encrypeddata, iv: exrypteddata: everes.encr «Контент-тип»: «Приложение/xwww-form-urlencoded»}, метод: 'post', успех: функция (результат) {var data = result.data.result; })}}})}}) 2. Java Server
Получить код информации об пользователе OpenID и декодировать в соответствии с кодом
Требуемый пакет банки
<depervice> <groupid> org.codehaus.xfire </groupid> <artifactid> xfire-core </artifactid> <sersive> 1.2.6 </version> </degifacty> <dehydency> <groupid> org.bouncycastle </groupid> <artifactid> bcprov-jdk16 </artifactid> <serse> 1.46 <serse> 1.46 <serse> 1.46 <serse> 1.46 <serse> 1.46 <serse> 1.46 <serse> 1.46 <serse> 1.46 <serse> 1.46 <serse> 1.46.
/ ** * Получить информацию апплета WeChat * @author zhy */ public class wxappletuserinfo {private static logger log = logger.getlogger (wxappletuserinfo.class); /** * Получить weChat applet session_key и openid * * @author zhy * @param Code Code, возвращаемый WeChat Login * @return */public static jsonObject getSessionKeyOoroPenid (String Code) {// weChat Code Code String wxcode = code; Resourcebundle resource = resourcebundle.getbundle ("weixin"); // Читать файл свойства string requesturl = resource.getString ("url"); // Адрес запроса https://api.weixin.qq.com/sns/jscode2session map <string> requesturlparam = new hashmap <string, string> (); requesturlparam.put ("appid", resource.getString ("appid")); // appid в настройках разработчика requesturlparam.put ("secret", resource.getString ("appsecret")); // appsecret requesturlparam.put ("js_code", wxcode); // код, возвращаемый аппетным вызовом wx.login requesturlparam.put ("Grant_type", "Authorization_code"); // Параметры по умолчанию // Отправить запрос сообщения для чтения и вызовов WeChat https://api.weixin.qq.com/sns/jscode2session Интерфейс для получения уникального идентификатора openid jsonobject jsonobject = json.parseobject (urlutil.sendpost (requesturl, requesturlparam)); вернуть jsonObject; } / *** Decrypt, конфиденциальные для пользователя, для получения пользовательской информации** @author zhy* @param sessionkey ключ для зашифрованной подписи данных* @param incrypteddata incrypted data, включая конфиденциальные данные* @param iv Начальный вектор intrypte -stricepte iv) {// зашифрованные данные byte [] databyte = base64.decode (encrypteddata); // зашифрованный ключ байт [] keybyte = base64.decode (sessionKey); // смещение byte [] ivbyte = base64.decode (iv); Попробуйте {// Если ключ составляет менее 16 бит, то компенсируйте его. Содержание в этом, если очень важно int base = 16; if (keybyte.length % base! = 0) {int Groups = keybyte.length / base + (keybyte.length % base! = 0? 1: 0); byte [] temp = new Byte [группы * base]; Arrays.fill (Temp, (Byte) 0); System.ArrayCopy (KeyByte, 0, Temp, 0, KeyByte.length); keybyte = temp; } // Инициализировать безопасность.addprovider (new BouncycastleProvider ()); Cipher Cipher = cipher.getInstance ("AES/CBC/PKCS7Padding", "BC"); Secretkeyspec spec = new secretkeyspec (keybyte, "aes"); Algorithmparameters Parameters = Algorithmparameters.getInstance ("aes"); Parameters.init (новый ivparameterspec (ivbyte)); cipher.init (cipher.decrypt_mode, spec, параметры); // инициализировать byte [] resultbyte = cipher.dofinal (databyte); if (null! = resultbyte && resultbyte.length> 0) {string result = new String (resultByte, "utf-8"); вернуть json.parseObject (результат); }} catch (nosuchalgorithmexception e) {log.error (e.getmessage (), e); } catch (nosuchpaddingException e) {log.error (e.getMessage (), e); } catch (InvalidParameterSpecexception e) {log.error (e.getMessage (), e); } catch (allodalblocksizexception e) {log.error (e.getmessage (), e); } catch (badpaddingException e) {log.error (e.getMessage (), e); } catch (unsupportEncodingException e) {log.error (e.getMessage (), e); } catch (unsupportEncodingException e) {log.error (e.getMessage (), e); } catch (InvalidKeyException e) {log.error (e.getMessage (), e); } catch (InvalidalgorithmParameterException e) {log.error (e.getMessage (), e); } catch (nosuchproviderexception e) {log.error (e.getmessage (), e); } return null; }} Код для отправки запроса
/ *** Отправить запрос на указанный URL для метода публикации** @param URL URL для отправки запроса* @param param parameter* @return Результат ответа удаленного ресурса, представленного именем*/ ublic static String sendpost (строка URL, карта <string,?> Параммика) {printWriter out = null; BufferedReader in = null; String result = ""; String param = ""; Iterator <string> it = parammap.keyset (). Iterator (); while (it.hasnext ()) {string key = it.next (); param + = key + "=" + parammap.get (key) + "&"; } try {url Realurl = new URL (url); // открыть соединение между urlConnection conn = Realurl.openconcenection (); // Установить атрибут общего запроса conn.setrequestproperty ("Accept", "*/*"); conn.setrequestproperty («connection», «Keep-alive»); conn.setrequestproperty ("Accept-charset", "UTF-8"); conn.setrequestproperty («Пользовательский агент», «Mozilla/4.0 (совместимый; msie 6.0; Windows NT 5.1; Sv1)»); // Чтобы отправить запрос сообщения, вы должны установить следующие две строки conn.setDoOutput (true); conn.setDoinput (true); // Получить выходной поток, соответствующий объекту urlconnection = new PrintWriter (conn.getOutputStream ()); // Отправить параметр запроса out.print (param); // buffering out.flush () промывочного выходного потока; // Определите входной поток BufferedReader для чтения ответа URL в = new BufferedReader (New InputStreamReader (conn.getInputStream (), "UTF-8")); Строка; while ((line = in.readline ())! = null) {result += line; }} catch (Exception e) {log.error (e.getMessage (), e); } // Используйте наконец -то блоки, чтобы закрыть выходной поток и поток ввода, наконец, {try {if (out! = Null) {out.close (); } if (in! = null) {in.close (); }} catch (ioException ex) {ex.printStackTrace (); }} return result; }Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.