1. Applet WeChat <br /> Langkah 1: Hubungi wx.login untuk mendapatkan alamat dokumen kode langkah 2: Tentukan apakah pengguna mengotorisasi untuk membaca alamat dokumen informasi pengguna Langkah 3: hubungi wx.getuserinfo untuk membaca informasi dokumen data pengguna. Oleh karena itu, kami akan melewati EncryptedData dan IV yang diperoleh oleh WX.Login untuk mendapatkan kode dan WX.GetUserInfo ke latar belakang melalui permintaan WX.Request
Data dikembalikan oleh server:
Kode Program Mini:
// Memanggil antarmuka login untuk mendapatkan kode wx.login ({Success: function (res) {wx.getSetting ({Success (setRes) {// menentukan apakah diizinkan if (! SetRes.Authsetting ('scope.userinfo']) {// mengotorisasi akses ke wx.Authorize ({{{{{{{{{{{{{{{{{{{{{{{{{{{{{'. Informasi Pengguna wx.getUserInfo ({lang: "zh_cn", Success: function (userres) {// Stack Network Request wx.request ({url: config.loginwxurl, data: {code: res.code, uNDREREDDADA: USERRES.ENCRYREDDAD: {resrypedData, iv: ov: ov: u.srese, uSrypedData: USRERES. "Metode: // Keberhasilan Pengambilan Sisi Server: Fungsi (Hasil) {Var Data = Hasil.Data.Result; {// Dapatkan informasi pengguna wx.getUserInfo ({lang: "zh_cn", success: function (userres) {// stack network request wx.request ({url: config.loginwxurl, data: {code: res.code, encrypteddata: userres.encry: {code: res. "Tipe": Aplikasi/X-WWW-Form-Urlencoded "}, Metode: 'Post', Success: Function (Hasil) {Var Data = hasilnya.Data.Result; }})}}) 2. Server Java
Dapatkan kode informasi pengguna OpenId dan Decode sesuai dengan kode
Paket Jar yang Diperlukan
<dependency> <groupId>org.codehaus.xfire</groupId> <artifactId>xfire-core</artifactId> <version>1.2.6</version> </dependency> <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk16</artifactId> <version>1.46</version> </dependency>
/ ** * Dapatkan informasi applet weChat * @author zhy */ kelas publik wxappletuserInfo {private static logger log = logger.getLogger (wxappletuserinfo.class); /** * Dapatkan weChat applet session_key dan openid * * @author zhy * @param kode panggilan kode yang dikembalikan oleh weChat login * @return */public static jsonobject getSessionKeyoropenId (kode string) {// wechat login nilai string wxcode = kode; ResourceBundle Resource = ResourceBundle.getBundle ("Weixin"); // baca file properti string requestUrl = resource.getString ("url"); // permintaan alamat https://api.weixin.qq.com/sns/jscode2session peta <string, string> requestUrlparam = new HashMap <String, String> (); requestUrlparam.put ("appId", resource.getString ("appId")); // appid dalam pengaturan pengembang permintaanurlparam.put ("rahasia", resource.getString ("appsecret")); // appsecret requestUrlparam.put ("js_code", wxcode); // Kode yang dikembalikan oleh applet call wx.login requestUrlparam.put ("grant_type", "otorization_code"); // Parameter default // Kirim Posting Permintaan untuk Membaca dan Hubungi WeChat https://api.weixin.qq.com/sns/jscode2Session Antarmuka untuk mendapatkan User OpenID unik pengidentifikasi jsonObject jsonObject = json.parseObject (urlutil.sendpost (requesturl, requesturl, requesturl) return jsonObject; } / *** mendekripsi data sensitif pengguna untuk mendapatkan informasi pengguna** @Author zhy* @param sessionKey Kunci untuk tanda tangan terenkripsi data* @param encryptedData data yang dienkripsi termasuk string @param @param @param. iv) {// byte data terenkripsi [] databyte = base64.decode (encryptedData); // byte kunci terenkripsi [] keybyte = base64.decode (sessionKey); // byte offset [] ivbyte = base64.decode (iv); Coba {// jika kuncinya kurang dari 16 bit, maka buatlah untuk itu. Konten dalam hal ini IF adalah basis int yang sangat penting = 16; if (keybyte.length % base! = 0) {int groups = keybyte.length / base + (keybyte.length % base! = 0? 1: 0); byte [] temp = byte baru [grup * basis]; Arrays.fill (temp, (byte) 0); System.ArrayCopy (KeyByte, 0, Temp, 0, KeyByte.Length); keybyte = temp; } // inisialisasi Security.AddProvider (BoundcycastLeprovider baru ()); Cipher cipher = cipher.getInstance ("aes/cbc/pkcs7padding", "bc"); SecretKeySpec spec = SecretKeyspec baru (KeyByte, "AES"); Parameter AlgorithmParameters = AlgorithMParameters.getInstance ("AES"); parameter.init (ivparameterspec baru (ivbyte)); cipher.init (cipher.decrypt_mode, spec, parameter); // inisialisasi byte [] resultByte = cipher.dofinal (databyte); if (null! = resultByte && resultByte.length> 0) {string result = string baru (resultByte, "utf-8"); return json.parseObject (hasil); }} 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 (ilegalblocksizeException e) {log.error (e.getMessage (), e); } catch (badpaddingException e) {log.error (e.getMessage (), e); } catch (unsupportedEncodingException e) {log.error (e.getMessage (), e); } catch (unsupportedEncodingException 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; }} Kode untuk mengirim permintaan
/ *** Kirim permintaan ke URL yang ditentukan untuk metode posting** @param URL URL untuk mengirim permintaan* @param parameter permintaan* @Return Hasil respons dari sumber daya jarak jauh yang diwakili oleh nama*/ ublic static sendPost (string url, peta <string,?> Parammap) {printwriter out = null; BufferedReader di = null; Hasil string = ""; String param = ""; Iterator <string> it = parammap.keyset (). Iterator (); while (it.hasnext ()) {string key = it.next (); param + = key + "=" + parammap.get (key) + "&"; } coba {url realUrl = URL baru (url); // buka koneksi antara urlconnection conn = realUrl.openconnection (); // Atur atribut permintaan umum Conn.setRequestProperty ("Recept", "*/*"); Conn.setRequestProperty ("Connection", "Keep-Alive"); Conn.setRequestProperty ("Accept-Charset", "UTF-8"); Conn.setRequestProperty ("User-Agent", "Mozilla/4.0 (kompatibel; MSIE 6.0; Windows NT 5.1; SV1)"); // Untuk mengirim permintaan pos, Anda harus mengatur dua baris berikut Conn.setDoOutput (true); Conn.setDoInput (true); // Dapatkan aliran output yang sesuai dengan objek URLConnection out = printwriter baru (conn.getoutputStream ()); // Kirim parameter permintaan out.print (param); // buffering out.flush () dari aliran output flush; // Tentukan aliran input BufferedReader untuk membaca respons URL di = BufferedReader baru (inputStreamReader baru (conn.getInputStream (), "UTF-8"))); Garis string; while ((line = in.readline ())! = null) {result += line; }} catch (exception e) {log.error (e.getMessage (), e); } // Gunakan akhirnya blok untuk menutup aliran output dan aliran input akhirnya {coba {if (out! = Null) {out.close (); } if (in! = null) {in.close (); }} catch (ioException ex) {ex.printstacktrace (); }} hasil pengembalian; }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.