Heim  >  Artikel  >  Web-Frontend  >  So erhalten Sie Informationen zur Mobiltelefonnummer eines Benutzers im WeChat-Miniprogramm

So erhalten Sie Informationen zur Mobiltelefonnummer eines Benutzers im WeChat-Miniprogramm

亚连
亚连Original
2018-06-09 13:49:032692Durchsuche

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:

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) Verwenden Sie dann diese Toolklasse, um eine Verbindung mit dem WeChat-Server herzustellen und Erhalten Sie 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 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)
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); 
}

Auf diese Weise wird der zurückgegebene Benutzer Die Mobilfunknummer kann aus den Daten ermittelt werden.

Ich habe das Obige für Sie zusammengestellt und hoffe, dass es Ihnen in Zukunft hilfreich sein wird.

Verwandte Artikel:

Express erstellt Abfrageserver

Verwenden Sie die benutzerdefinierte Trim-Funktion von js, um Leerzeichen an beiden Enden zu entfernen

So funktioniert JavaScript

Das obige ist der detaillierte Inhalt vonSo erhalten Sie Informationen zur Mobiltelefonnummer eines Benutzers im WeChat-Miniprogramm. 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