微信ウィジェットユーザーの携帯電話番号を取得
2867 ワード
1、小プログラム伝達パラメータjs_code(ユーザ取得session_key)とencryptedData、vi(携帯電話番号解読用)
httpリクエストインタフェースの送信:
次のようにデータを返し、セッションを取り出します.キーは復号化に使用されます.
{"session_key":"EKjnfpQ6LFxScbtOg==","expires_in":7200,"openid":"oBEMf0UbSQ6xpgUcI"}
2、拿session_keyとencryptedData、viは携帯電話番号を解読する
encryptedData復号後は以下のjson構造であり、詳細は暗号化データ復号アルゴリズムを参照
パラメータ
を選択します.
説明
phoneNumber
String
ユーザーがバインドした携帯電話番号(海外の携帯電話番号には区番があります)
purePhoneNumber
String
番号のない携帯番号
countryCode
String
ゾーン番号
httpリクエストインタフェースの送信:
https://api.weixin.qq.com/sns/jscode2session?appid= appid&secret= secret&js_code= &grant_type=authorization_code
次のようにデータを返し、セッションを取り出します.キーは復号化に使用されます.
{"session_key":"EKjnfpQ6LFxScbtOg==","expires_in":7200,"openid":"oBEMf0UbSQ6xpgUcI"}
2、拿session_keyとencryptedData、viは携帯電話番号を解読する
import org.apache.commons.codec.binary.Base64;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.security.spec.AlgorithmParameterSpec;
/**
* Created by hgg on 2018/2/24.
* AES
*/
public class AESDecodeUtils {
public static void main(String[] args) throws Exception {
byte[] encrypData = Base64.decodeBase64("mgxuts7uEbdnBclp0Qim0TS3MGoaSyE09MqTvbeG9Z1PjxsDwjVH0FxG1Q==");
byte[] ivData = Base64.decodeBase64("SG386etdA3sOXHxqfnw==");
byte[] sessionKey = Base64.decodeBase64("Fn6r4IOiZJBXn4hQ0w==");
System.out.println(decrypt(sessionKey,ivData,encrypData));
}
public static String decrypt(byte[] key, byte[] iv, byte[] encData) throws Exception {
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 new String(cipher.doFinal(encData),"UTF-8");
}
}
encryptedData復号後は以下のjson構造であり、詳細は暗号化データ復号アルゴリズムを参照
{
"phoneNumber": "13580006666",
"purePhoneNumber": "13580006666",
"countryCode": "86",
"watermark":
{
"appid":"APPID",
"timestamp":TIMESTAMP
}
}
パラメータ
を選択します.
説明
phoneNumber
String
ユーザーがバインドした携帯電話番号(海外の携帯電話番号には区番があります)
purePhoneNumber
String
番号のない携帯番号
countryCode
String
ゾーン番号