ホームページ  >  記事  >  WeChat アプレット  >  WeChatミニプログラムを通じてユーザーの携帯電話番号を取得する方法

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

不言
不言オリジナル
2018-06-23 11:17:222957ブラウズ

この記事では主に、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 を取得し、ユーザーの機密データを復号化します。 。

データを復号化するために必要なパラメータは 3 つあります。つまり、


1、encryptedData (暗号文)

2、iv (ベクトル)
3、上記 3 つの変数を Base64 デコードする際のセッションキー

である aesKey (キー) です。 :

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アプレット開発における友達リストレターリストジャンプ対応場所

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。