이 글은 주로 위챗 애플릿이 사용자의 휴대폰 번호를 얻는 방법을 자세히 소개합니다. 이는 일정한 참고 가치가 있습니다. 관심 있는 친구들이 참고할 수 있습니다.
현재 위챗 애플릿을 작업 중이며 사용자의 휴대폰 번호를 얻어야 합니다.
플로우 차트:
1 먼저 클라이언트가 wx.login을 호출하고 콜백 데이터에는 openid(사용자 고유 식별) 및 세션 키를 얻는 데 사용되는 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이라고 하는 임의의 숫자를 생성하고 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); }
이 방법으로 반환된 데이터에서 사용자의 휴대폰 번호를 얻을 수 있습니다.
위 내용은 이 글의 전체 내용입니다. 모든 분들의 학습에 도움이 되었으면 좋겠습니다. 더 많은 관련 내용은 PHP 중국어 홈페이지를 주목해주세요!
관련 권장 사항:
사진을 서버에 업로드하기 위한 WeChat 애플릿 코드 정보
다단계 페이지를 반환하는 WeChat 애플릿 구현 방법
WeChat 애플릿 개발 시 친구 목록 편지 목록 점프 통신 위치
위 내용은 WeChat 미니 프로그램을 통해 사용자의 휴대폰 번호를 얻는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!