>위챗 애플릿 >미니 프로그램 개발 >WeChat 애플릿은 사용자 휴대폰 번호 코드 공유를 얻습니다.

WeChat 애플릿은 사용자 휴대폰 번호 코드 공유를 얻습니다.

小云云
小云云원래의
2018-05-19 15:39:045285검색

이 글은 주로 WeChat 애플릿을 통해 사용자의 휴대폰 번호를 얻는 방법을 자세히 소개합니다. 관심 있는 친구들이 참고하면 도움이 될 것입니다.

현재 사용자의 휴대폰 번호를 획득해야 하는 WeChat 애플릿을 작업 중입니다. 구체적인 단계는 다음과 같습니다.

흐름 차트:


1 먼저 클라이언트가 wx.login을 호출합니다. 콜백 데이터에는 jscode가 포함되어 있으며 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, 암호화된Data(암호 텍스트)
2, iv(벡터)
3, aesKey(키), 즉 세션 키

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

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

관련 권장사항:

휴대폰 번호를 획득하여 승인된 사용자 로그인을 획득하는 WeChat 애플릿 기능을 설명하는 예

PHP에서 휴대폰 번호 획득 정규식을 작성하는 방법

PHP는 API_PHP 튜토리얼을 통해 휴대폰 번호의 위치를 ​​얻습니다

위 내용은 WeChat 애플릿은 사용자 휴대폰 번호 코드 공유를 얻습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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