Java-(二)WeChatウィジェットはユーザー情報と携帯電話番号の取得を許可します。
第一編では、WeChatウィジェットがどのように登録を許可してユーザー情報、オプンId、unionIdを取得するかを知りました。ここでは、WeChatウィジェットがユーザー情報と携帯電話番号を取得する方法を高速で教えます。
WeChat公式文書:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/getPhoneNumber.html
ユーザの携帯番号を取得するには以下のステップが必要です。
1.ウィジェットクライアントはまずwx.login()を呼び出して、チケットコードを取得します。
2.コードをJavaバックグラウンドに伝えてcode 2 Sessionインターフェースを呼び出してセッションセッションを取得する。key,session_keyはキャッシュまたはデータベースに保存されています。ここで直接sessionukeyを転送することを推奨しません。keyは小プログラム端に転送します。
3.ウィジェット端からwx.getUserInfo()を呼び出し、encrypedData、iv、session_を呼び出します。キーは楽屋に入り、携帯番号を取得する。
以下のコードはどのようにして携帯番号を授権するかのみ表示します。セッションを取得します。key前の記事を確認してください。Java-(一)WeChatウィジェットのライセンス登録を実現します。openIdとunionIdを取得します。
アプレット端
ユーザーは授権携帯番号ボタンをクリックして、授権ウィンドウをポップアップします。
MiniPrograme Login類
HttpUtil Http応答ツール類
WeChat公式文書:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/getPhoneNumber.html
ユーザの携帯番号を取得するには以下のステップが必要です。
1.ウィジェットクライアントはまずwx.login()を呼び出して、チケットコードを取得します。
2.コードをJavaバックグラウンドに伝えてcode 2 Sessionインターフェースを呼び出してセッションセッションを取得する。key,session_keyはキャッシュまたはデータベースに保存されています。ここで直接sessionukeyを転送することを推奨しません。keyは小プログラム端に転送します。
3.ウィジェット端からwx.getUserInfo()を呼び出し、encrypedData、iv、session_を呼び出します。キーは楽屋に入り、携帯番号を取得する。
以下のコードはどのようにして携帯番号を授権するかのみ表示します。セッションを取得します。key前の記事を確認してください。Java-(一)WeChatウィジェットのライセンス登録を実現します。openIdとunionIdを取得します。
アプレット端
ユーザーは授権携帯番号ボタンをクリックして、授権ウィンドウをポップアップします。
<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber"></button>
ユーザ敏感データencrypedDataはget Phone Numberで取得できます。 //
getPhoneNumber: function(e) {
var that = this;
console.log(e);
wx.request({
url: "https://www.test.cn/miniprogram/getPhoneNumber",
method: 'POST',
header: {
'content-type': 'application/json'
},
data: {
encryptedData: e.detail.encryptedData,
iv: e.detail.iv,
session_key: that.data.key
},
success: function (res) {
console.log(res);
},
fail: function (error) {
console.log(error);
}
});
}
楽屋MiniPrograme Login類
public class MiniProgramLogin {
// AppID
private static final String appid = "xxxxxxxxxxxxxx";
// AppSecret
private static final String secret = "xxxxxxxxxxxxxxxxxxxxxxxx";
/**
*
*/
@RequestMapping(value="/getPhoneNumber")
@ResponseBody
public Map<String,Object> getPhoneNumber(String encryptedData, String iv, String session_key) {
Map<String,Object> map=new HashMap<>();
String result=WXBizDataCrypt.decrypt1(encryptedData,session_key,iv);
JSONObject json=JSONObject.parseObject(result);
if (!StringUtils.isEmpty(result)&&result.length()>0) {
map.put("purePhoneNumber", json.getString("purePhoneNumber"));
map.put("phoneNumber", json.getString("phoneNumber"));
map.put("countryCode", json.getString("countryCode"));
map.put("msg","success");
}
map.put("msg","error");
return map;
}
ログイン成功にステータスメッセージ「success」に戻り、認証不成功にステータスメッセージ「error」に戻ります。HttpUtil Http応答ツール類
public class HttpUtil {
/**
* URL GET
*
* @param url URL
* @param param , name1=value1&name2=value2 。
* @return URL
*/
public static String sendGet(String url, String param) {
String result = "";
BufferedReader in = null;
try {
String urlNameString = url + "?" + param;
URL realUrl = new URL(urlNameString);
// URL
URLConnection connection = realUrl.openConnection();
//
connection.setRequestProperty("accept","*/*");
connection.setRequestProperty("connection","Keep-Alive");
connection.setRequestProperty("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
//
connection.connect();
//
Map<String, List<String>> map = connection.getHeaderFields();
//
for (String key : map.keySet()) {
System.out.println(key + "--->" + map.get(key));
}
// BufferedReader URL
in = new BufferedReader(new InputStreamReader(
connection.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
result += line;
}
} catch (Exception e) {
System.out.println(" GET !" + e);
e.printStackTrace();
}
// finally
finally {
try {
if (in != null) {
in.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
return result;
}
}
WXBizDataCrypt復号ツール類
public class WXBizDataCrypt {
/**
* AES
*
* @param data // ,
* @param key //
* @param iv //
* @return
* @throws Exception
*/
public static String decrypt1(String data, String key,String iv){
//
byte[] dataByte = Base64.decodeBase64(data);
//
byte[] keyByte = Base64.decodeBase64(key);
//
byte[] ivByte = Base64.decodeBase64(iv);
try {
AlgorithmParameterSpec ivSpec = new IvParameterSpec(ivByte);
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
SecretKeySpec keySpec = new SecretKeySpec(keyByte, "AES");
cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
return new String(cipher.doFinal(dataByte),"UTF-8");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (InvalidAlgorithmParameterException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return null;
}
}
前の記事:Java-(一)ウィーチャットプログラムは、ライセンス登録を実現してopenIdとunionIdを取得します。