이 글은 주로 위챗 애플릿이 사용자의 휴대폰 번호를 얻는 방법을 자세히 소개합니다. 이는 일정한 참고 가치가 있습니다. 관심 있는 친구들이 참고할 수 있습니다.
현재 위챗 애플릿을 작업 중이며 사용자의 휴대폰 번호를 얻어야 합니다.
흐름도:
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); }
이 방법으로 반환된 데이터에서 사용자의 휴대폰 번호를 얻을 수 있습니다.
위 내용은 제가 여러분을 위해 정리한 내용입니다. 앞으로 도움이 되길 바랍니다.
관련 기사:
js 사용자 정의 트림 기능을 사용하여 양쪽 끝의 공백 제거
위 내용은 WeChat 미니 프로그램에서 사용자 휴대폰 번호 정보를 얻는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!