>  기사  >  웹 프론트엔드  >  WeChat 미니 프로그램에서 사용자 휴대폰 번호 정보를 얻는 방법

WeChat 미니 프로그램에서 사용자 휴대폰 번호 정보를 얻는 방법

亚连
亚连원래의
2018-06-09 13:49:032768검색

이 글은 주로 위챗 애플릿이 사용자의 휴대폰 번호를 얻는 방법을 자세히 소개합니다. 이는 일정한 참고 가치가 있습니다. 관심 있는 친구들이 참고할 수 있습니다.

현재 위챗 애플릿을 작업 중이며 사용자의 휴대폰 번호를 얻어야 합니다.

흐름도:

1 먼저 클라이언트가 wx.login을 호출하고 콜백 데이터에는 openid(사용자 고유 식별) 및 sessionkey( 세션 키).

2. jscode를 얻은 후 서버로 보내면 서버는 이를 사용하여 WeChat 서버와 상호 작용하여 openid와 세션 키를 얻습니다. 구체적인 획득 방법은 다음과 같습니다.

(1) HttpUrlConnection 도구 클래스를 작성해야 합니다:

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) 그런 다음 원하는 데이터를 얻으려면 이 도구 클래스를 통해 WeChat 서버와 연결을 설정합니다.

 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와 secret은 모두 귀하의 것입니다. 개발자 계정에서 쿼리할 수 있습니다. js_code는 클라이언트에서 전송되므로 반환된 데이터에서 세션 키를 얻을 수 있습니다.

3. 서버 A가 세션 키를 얻은 후 3rdSessionId를 키로, sessionkey + openid를 값으로 사용하여 3rdsession이라고 하는 임의의 숫자를 생성하고 WeChat 팀에서는 세션 키를 직접 전송하는 것을 권장하지 않기 때문에 redis 또는 memcached에 캐시됩니다. 네트워크에서 개발자가 생성한 고유 키는 세션 키와 연결됩니다. 그 기능은 다음과 같습니다: (1) 미니 프로그램 로그인 상태를 유지하기 위해 3rdSessionId를 클라이언트에 반환합니다.

(2) 3rdSessionId를 통해 사용자 sessionkey와 openid를 찾습니다.

4. 클라이언트는 3rdSessionId를 가져와서 저장소에 캐시합니다.
5. 암호화된 사용자 중요 데이터는 wx.getUserIinfo를 통해 얻을 수 있습니다.
6. 클라이언트는 암호화된 데이터, 3rdSessionId 및 오프셋을 서버 A
7로 보냅니다. 서버 A는 3rdSessionId
8을 기반으로 캐시에서 session_key를 획득하여 서버 A의 암호화된 데이터를 해독합니다. .

데이터를 해독하는 데 필요한 세 가지 매개 변수는 다음과 같습니다.

1, cryptoData(ciphertext)
2, iv(벡터)
3, aesKey(key), 이는 세션 키입니다.

해독할 때 Base64 디코딩이 필요합니다. 위의 세 가지 변수:

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

그런 다음 AES 암호 해독 방법을 사용하여 암호를 해독합니다.

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); 
}

이 방법으로 반환된 데이터에서 사용자의 휴대폰 번호를 얻을 수 있습니다.

위 내용은 제가 여러분을 위해 정리한 내용입니다. 앞으로 도움이 되길 바랍니다.

관련 기사:

Express 빌드 쿼리 서버

js 사용자 정의 트림 기능을 사용하여 양쪽 끝의 공백 제거

JavaScript 작동 원리

위 내용은 WeChat 미니 프로그램에서 사용자 휴대폰 번호 정보를 얻는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.