ホームページ > 記事 > WeChat アプレット > WeChat アプレットはユーザーの携帯電話番号をコード共有で取得します
この記事では主にWeChatアプレットを通じてユーザーの携帯電話番号を取得する方法を詳しく紹介しますので、興味のある方は参考にしていただければ幸いです。
私は現在、ユーザーの携帯電話番号を取得する必要がある WeChat アプレットに取り組んでいます。具体的な手順は次のとおりです:
まず、クライアントが wx.login を呼び出します。コールバック データには、openid (ユーザー固有の ID) と sessionkey (セッション キー) を取得するために使用されます。
2. jscode を取得したら、それをサーバーに送信し、サーバーはそれを使用して WeChat サーバーと通信し、openid と sessionkey を取得します。具体的な取得方法は次のとおりです:
(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. ユーザーの機密データの encryptedData は、wx.getUserIinfo を通じて取得できます。6. クライアントは、encryptedData、3rdSessionId、および offset を一緒にサーバー A に送信します
7. サーバー A は、3rdSessionId に基づいてキャッシュから session_key を取得し、ユーザーの機密データを復号化します。 。
データを復号化するために必要なパラメータは 3 つあります。つまり、
1、encryptedData (暗号文)
2、iv (ベクトル)
) 上記 3 つを 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 アプレットの機能を説明する例
API_PHP チュートリアルを通じて PHP が携帯電話番号の位置を取得する
以上がWeChat アプレットはユーザーの携帯電話番号をコード共有で取得しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。