WeChatミニプログラムでユーザーの携帯電話番号情報を取得する方法

亚连
リリース: 2018-06-09 13:49:03
オリジナル
2765 人が閲覧しました

この記事では主に、WeChat アプレットがユーザーの携帯電話番号を取得する方法を詳しく紹介します。これには特定の参考値があります。興味のある方は参考にしてください。

私は現在 WeChat アプレットに取り組んでおり、ユーザーの携帯電話番号を取得する必要があります。具体的な手順は次のとおりです:

フローチャート:

1. まず、クライアントは 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、セッションキーである aesKey (キー)

復号化するときは、Base64 デコードする必要があります。上記の 3 つの変数:

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); 
}
ログイン後にコピー
この方法で、返されたデータからユーザーの携帯電話番号を取得できます。

上記は私があなたのためにまとめたものです。

関連記事:

Expressでクエリサーバーを構築

jsのカスタムトリム関数を使って両端のスペースを削除

JavaScriptの動作原理

以上がWeChatミニプログラムでユーザーの携帯電話番号情報を取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート