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

ユーザーの携帯電話番号を取得する WeChat アプレットを開発する方法

php中世界最好的语言
php中世界最好的语言オリジナル
2018-03-23 10:42:052680ブラウズ

今回は、ユーザーの携帯電話番号を取得するための WeChat ミニ プログラムを開発する方法を説明します。 ユーザーの携帯電話番号を取得するための WeChat ミニ プログラムを開発するときの 注意事項 は何ですか。ここで実際のケースを見てみましょう。一見。

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

フローチャート:

1 まず、クライアントが wx.login を呼び出します。コールバック データには、openid (ユーザー固有の ID) と sessionkey (セッション キー) を取得するための 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、セッションキーである 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); 
}

この記事のケースを読んだ後は、この方法を習得したと思います。さらに興味深い情報については、PHP に関する他の関連記事に注目してください。中国語のサイトです!

推奨読書:

jQueryコードの最適化方法のまとめ


360ブラウザ互換モードで不完全なページ表示に対処する方法

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

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