이 글은 주로 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는 API_PHP 튜토리얼을 통해 휴대폰 번호의 위치를 얻습니다
위 내용은 WeChat 애플릿은 사용자 휴대폰 번호 코드 공유를 얻습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!