Home  >  Article  >  WeChat Applet  >  How to develop a WeChat applet to obtain user mobile phone numbers

How to develop a WeChat applet to obtain user mobile phone numbers

php中世界最好的语言
php中世界最好的语言Original
2018-03-23 10:42:052573browse

This time I will show you how to develop the WeChat mini program to obtain the user's mobile phone number function. What are the precautions for developing the WeChat mini program to obtain the user's mobile phone number function? The following is a practical case, let's come together take a look.

I am currently working on a WeChat applet, which requires obtaining the user’s mobile phone number. The specific steps are as follows:

Flow chart:

1 , First, the client calls wx.login, and the callback data contains jscode, which is used to obtain openid (user unique identification) and sessionkey (session key).

2. After getting the jscode, send it to the server. The server uses it to interact with the WeChat server to obtain the openid and sessionkey. The specific acquisition method is as follows:

(1) You need to write a HttpUrlConnection tool class:

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) Then establish a connection with the WeChat server through this tool class to obtain the desired data:

 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");
The appid and secret can be queried in your own developer account, and the js_code is sent by the client, so that the sessionkey can be obtained from the returned data.

3. After server A gets the sessionkey, it generates a random number we call 3rdsession, using 3rdSessionId as the key and sessionkey + openid as the value and caches it in redis or

memcached; because the WeChat team It is not recommended to directly transmit the session key on the network. It is up to the developer to generate a unique key and associate it with the session key. Its functions are: (1) Return the 3rdSessionId to the client to maintain the mini program login state.

(2). Find user sessionkey and openid through 3rdSessionId.

4. The client gets the 3rdSessionId and caches it in storage.

5. User sensitive data encryptedData can be obtained through wx.getUserIinfo.
6. The client sends encryptedData, 3rdSessionId and offset together to server A
7. Server A obtains session_key from the cache based on 3rdSessionId
8. Use AES to decrypt encryptedData on server A to achieve user sensitivity Data decryption.

There are three parameters needed to decrypt data, namely:

1, encryptedData (ciphertext)

2, iv (vector)
3, aesKey (key ) That is, sessionkey

needs to Base64 decode the above three variables when decrypting:

byte[] encrypData = UtilEngine.decode(encData); 
byte[] ivData = UtilEngine.decode(iv); 
byte[] sessionKey = UtilEngine.decode(session_key);
Then use the AES decryption method to decrypt:

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); 
}
I believe you have read this article You have mastered the case method. For more exciting information, please pay attention to other related articles on the PHP Chinese website!

Recommended reading:

Summary of jQuery code optimization methods

How to deal with incomplete page display in 360 browser compatibility mode

The above is the detailed content of How to develop a WeChat applet to obtain user mobile phone numbers. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn