微信ウィジェットユーザーの携帯電話番号を取得


1、小プログラム伝達パラメータjs_code(ユーザ取得session_key)とencryptedData、vi(携帯電話番号解読用)
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
    ゾーン番号