Dieses Mal zeige ich Ihnen, wie Sie ein WeChat-Miniprogramm entwickeln, um die Mobiltelefonnummer eines Benutzers zu erhalten. Was sind die Vorsichtsmaßnahmen für die Entwicklung eines WeChat-Miniprogramms, um die Mobiltelefonnummer eines Benutzers zu erhalten ist ein praktischer Koffer, schauen wir uns das gemeinsam an.
Ich arbeite derzeit an einem WeChat-Applet, das den Erhalt der Mobiltelefonnummer des Benutzers erfordert. Die spezifischen Schritte sind wie folgt:
Flussdiagramm:
1 , Zuerst ruft der Client wx.login auf und die Rückrufdaten 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) Stellen Sie dann über diese Toolklasse eine Verbindung mit dem WeChat-Server her um die gewünschten Daten zu erhalten:
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 in Ihrem Entwicklerkonto abgefragt werden, und der js_code wird vom Client gesendet, sodass der Sitzungsschlüssel aus den zurückgegebenen Daten abgerufen werden kann.
3. Nachdem Server A den Sitzungsschlüssel erhalten hat, generiert er eine Zufallszahl, die wir 3rdsession nennen, wobei 3rdSessionId als Schlüssel und sessionkey + openid als Wert verwendet werden, und speichert sie in Redis oder memcached; weil das WeChat-Team Es wird nicht empfohlen, den Sitzungsschlüssel direkt im Netzwerk zu übertragen. Es liegt am Entwickler, einen eindeutigen Schlüssel zu generieren und ihn dem Sitzungsschlüssel zuzuordnen. 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)
2, iv (Vektor)
3, aesKey (Schlüssel) Das heißt, sessionkey
muss beim Entschlüsseln die oben genannten drei Variablen mit Base64 dekodieren:
byte[] encrypData = UtilEngine.decode(encData); byte[] ivData = UtilEngine.decode(iv); byte[] sessionKey = UtilEngine.decode(session_key);
und dann die AES-Entschlüsselungsmethode zum Entschlüsseln verwenden:
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); }
Ich glaube, das haben Sie Nachdem Sie den Fall in diesem Artikel gelesen haben, beherrschen Sie die Methode. Weitere spannende Informationen finden Sie in anderen verwandten Artikeln auf der chinesischen PHP-Website!
Empfohlene Lektüre:
Eine Zusammenfassung der jQuery-Code-Optimierungsmethoden
Wie man mit unvollständiger Seitenanzeige im 360-Browser umgeht Kompatibilitätsmodus
Das obige ist der detaillierte Inhalt vonSo entwickeln Sie ein WeChat-Applet, um Mobiltelefonnummern von Benutzern zu erhalten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!