ホームページ >WeChat アプレット >ミニプログラム開発 >WeChatミニプログラムを通じてユーザーの携帯電話番号を取得する方法
この記事では主に、WeChat アプレットがユーザーの携帯電話番号を取得する方法を詳しく紹介します。これには特定の参考値があります。興味のある方は参考にしてください。
私は現在 WeChat アプレットに取り組んでおり、ユーザーの携帯電話番号を取得する必要があります。具体的な手順は次のとおりです:
フローチャート:

1. まず、クライアントは wx.login を呼び出し、コールバック データには openid (ユーザー固有の ID) とセッションキーを取得するために使用される jscode が含まれています。 (セッションキー)。
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 を取得し、ユーザーの機密データを復号化します。 。
2、iv (ベクトル)
3、上記 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);
}
この方法で、返されたデータからユーザーの携帯電話番号を取得できます。 以上がこの記事の全内容です。その他の関連コンテンツについては、PHP 中国語 Web サイトをご覧ください。 関連する推奨事項:
サーバーに写真をアップロードするためのWeChatアプレットのコードについて
WeChatアプレット開発における友達リストレターリストジャンプ対応場所
以上がWeChatミニプログラムを通じてユーザーの携帯電話番号を取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。