In diesem Artikel wird hauptsächlich beschrieben, wie das WeChat-Applet die Mobiltelefonnummer des Benutzers erhält.
Ich arbeite derzeit an einem WeChat-Applet Die spezifischen Schritte sind wie folgt:
Flussdiagramm:
1 wx.login, Rückruf Die Daten enthalten jscode, der zum Abrufen von openid (eindeutige Benutzeridentifikation) und sessionkey (Sitzungsschlüssel) verwendet wird.
2. Nachdem Sie den Jscode erhalten haben, senden Sie ihn an den Server. Der Server verwendet ihn, um mit dem WeChat-Server zu interagieren, um die OpenID und den Sitzungsschlüssel zu erhalten. Die spezifische Erfassungsmethode lautet wie folgt:
(1) Sie müssen eine HttpUrlConnection-Toolklasse schreiben:
public class MyHttpUrlConnection { private final int mTimeout = 10000; // 超时时间 /** * get访问 */ public String[] requestJson(String url) { return request(url); } private String[] request(String connurl) { String[] resultStr = new String[]{"", ""}; StringBuilder resultData = new StringBuilder(""); HttpURLConnection conn = null; try { URL url = new URL(connurl); conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); conn.setUseCaches(false); conn.setConnectTimeout(mTimeout); conn.connect(); int resultCode = conn.getResponseCode(); InputStreamReader in; if (resultCode == 200) { in = new InputStreamReader(conn.getInputStream()); BufferedReader buffer = new BufferedReader(in); String inputLine; while ((inputLine = buffer.readLine()) != null) { resultData.append(inputLine); resultData.append("\n"); } buffer.close(); in.close(); } resultStr[0] = resultData.toString(); resultStr[1] = resultCode + ""; } catch (Exception e) { e.printStackTrace(); } finally { if (conn != null) { conn.disconnect(); } } return resultStr; } }
(2) Dann verwenden Diese Tool-Klasse dient zur Kommunikation mit WeChat. Der Server stellt eine Verbindung her und erhält die gewünschten Daten:
String url = "https://api.weixin.qq.com/sns/jscode2session?appid=""&secret=""&js_code=" + jsCode + "&grant_type=authorization_code"; String res[] = connection.requestJson(url); System.out.println(res[0]); JSONObject object = JSON.parseObject(res[0]); String openId = object.getString("openid"); String session_key = object.getString("session_key");
Appid und Secret können im eigenen Entwicklerkonto abgefragt werden, und js_code wird vom Client gesendet, damit der Sitzungsschlüssel in den zurückgegebenen Daten abgerufen werden kann.
3. Nachdem Server A den Sitzungsschlüssel erhalten hat, generiert er eine Zufallszahl, die wir 3rdSessionId als Schlüssel und Sitzungsschlüssel + OpenID als Wert nennen und in Redis oder Memcached zwischenspeichern, da das WeChat-Team dies nicht empfiehlt Direktes Speichern des Sitzungsschlüssels. Über das Netzwerk übertragen, generiert der Entwickler einen eindeutigen Schlüssel und verknüpft ihn mit dem Sitzungsschlüssel. Seine Funktionen sind: (1) Geben Sie die 3rdSessionId an den Client zurück, um den Anmeldestatus des Miniprogramms aufrechtzuerhalten.
(2). Suchen Sie den Sitzungsschlüssel und die OpenID des Benutzers über 3rdSessionId.
4. Der Client ruft die 3rdSessionId ab und speichert sie im Speicher.
5. Benutzersensible Daten können über wx.getUserIinfo abgerufen werden.
6. Der Client sendet verschlüsselte Daten, 3rdSessionId und Offset zusammen an Server A
7. Server A erhält Sitzungsschlüssel aus dem Cache basierend auf 3rdSessionId
8. Verwenden Sie AES, um verschlüsselte Daten auf Server A zu entschlüsseln Datenentschlüsselung.
Zum Entschlüsseln von Daten sind drei Parameter erforderlich, nämlich:
1. verschlüsselte Daten (Chiffretext)
3. Das heißt, Sitzungsschlüssel
byte[] encrypData = UtilEngine.decode(encData); byte[] ivData = UtilEngine.decode(iv); byte[] sessionKey = UtilEngine.decode(session_key);
public static byte[] decrypt(byte[] key, byte[] iv, byte[] encData) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidAlgorithmParameterException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException { AlgorithmParameterSpec ivSpec = new IvParameterSpec(iv); Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); SecretKeySpec keySpec = new SecretKeySpec(key, "AES"); cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec); return cipher.doFinal(encData); }
Über den Code für das WeChat-Applet zum Hochladen von Bildern auf den Server
Das WeChat-Applet kehrt zu Multi zurück -Ebenen-Seite Implementierungsmethode
WeChat-Applet-Entwicklung Freundeliste Buchstabenliste Sprung entsprechende Position
Das obige ist der detaillierte Inhalt vonSo erhalten Sie die Mobiltelefonnummer des Benutzers über das WeChat-Miniprogramm. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!