Heim  >  Artikel  >  WeChat-Applet  >  Das WeChat-Applet ermöglicht die gemeinsame Nutzung des Mobiltelefonnummerncodes des Benutzers

Das WeChat-Applet ermöglicht die gemeinsame Nutzung des Mobiltelefonnummerncodes des Benutzers

小云云
小云云Original
2018-05-19 15:39:045226Durchsuche

Dieser Artikel stellt hauptsächlich vor, wie das WeChat-Applet die Mobiltelefonnummer des Benutzers erhält. Ich hoffe, dass es jedem helfen kann.

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 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);
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); 
}
Auf diese Weise kann die Mobiltelefonnummer des Benutzers in den zurückgegebenen Daten ermittelt werden.

Verwandte Empfehlungen:


Beispiel für das WeChat-Applet zum Abrufen einer Mobiltelefonnummer mit autorisierter Benutzeranmeldefunktion

PHP zum Abrufen einer Mobiltelefonnummer Schreiben regulärer Ausdrücke

PHP ermittelt den Standort der Mobiltelefonnummer über das API_PHP-Tutorial

Das obige ist der detaillierte Inhalt vonDas WeChat-Applet ermöglicht die gemeinsame Nutzung des Mobiltelefonnummerncodes des Benutzers. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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