So erhalten Sie die Mobiltelefonnummer des Benutzers über das WeChat-Miniprogramm

不言
Freigeben: 2018-06-23 11:17:22
Original
2959 Leute haben es durchsucht

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; 
 } 
}
Nach dem Login kopieren

(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");
Nach dem Login kopieren

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

Beim Entschlüsseln müssen die oben genannten drei Variablen Base64-dekodiert werden:

byte[] encrypData = UtilEngine.decode(encData); 
byte[] ivData = UtilEngine.decode(iv); 
byte[] sessionKey = UtilEngine.decode(session_key);
Nach dem Login kopieren

Anschließend mit der AES-Entschlüsselung entschlüsseln Methode:

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); 
}
Nach dem Login kopieren

Auf diese Weise kann die Mobiltelefonnummer des Benutzers in den zurückgegebenen Daten ermittelt werden.

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass er für das Studium aller hilfreich ist. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website.

Verwandte Empfehlungen:

Ü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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage