>  기사  >  위챗 애플릿  >  사용자 휴대폰 번호를 얻기 위해 WeChat 애플릿을 개발하는 방법

사용자 휴대폰 번호를 얻기 위해 WeChat 애플릿을 개발하는 방법

php中世界最好的语言
php中世界最好的语言원래의
2018-03-23 10:42:052644검색

이번에는 사용자의 휴대폰 번호를 얻기 위한 WeChat 미니 프로그램 개발 방법을 보여 드리겠습니다. 사용자의 휴대폰 번호를 얻기 위한 WeChat 미니 프로그램 개발 시 Notes는 무엇입니까? 봐.

최근에 사용자의 휴대폰 번호를 얻어야 하는 WeChat 애플릿을 작업 중입니다. 구체적인 단계는 다음과 같습니다.

흐름 차트:

1 먼저 클라이언트가 wx.login을 호출합니다. 콜백 데이터에는 Get openid(사용자 고유 식별) 및 sessionkey(세션 키)에 대한 jscode가 포함되어 있습니다.

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이라고 하는 임의의 숫자를 생성하고 redis 또는 memcached에 캐시합니다. 왜냐하면 WeChat 팀에서는 직접 저장을 권장하지 않기 때문입니다. 네트워크의 세션키 전송을 위해 개발자는 고유 키를 생성하고 이를 세션 키와 연결합니다. 그 기능은 다음과 같습니다: (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); 
}

이 기사의 사례를 읽은 후 이 방법을 마스터했다고 생각합니다. 더 흥미로운 정보를 보려면 PHP의 다른 관련 기사에 주목하세요. 중국사이트!

추천 자료:

jQuery 코드 최적화 방법 요약

360 브라우저 호환 모드에서 불완전한 페이지 표시를 처리하는 방법

위 내용은 사용자 휴대폰 번호를 얻기 위해 WeChat 애플릿을 개발하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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