微信小程序Java后台获取手机号

小程序端:

复制代码
  wx.request({
	url: registerphone, //自己的地址
	data: {
	  openid: openid,
	  encryptedData: encryptedData, //手机加密数据
	  iv: iv, // 加密iv
	  session_key: session_key,// 加密key
	},
	method: "post",
	header: {
	  "content-type": "application/x-www-form-urlencoded",
	},
	success: (resp) => {
	  console.log(resp);// 返回手机号
	},
  });

springboot后台:

pom.xml maven 依赖包:

复制代码
        <dependency>
            <groupId>org.bouncycastle</groupId>
            <artifactId>bcprov-jdk15on</artifactId>
            <version>1.70</version>
        </dependency>

http 后台代码:

复制代码
    @PostMapping("/registerphone")
    public String registerphone(String openid, String encryptedData, String iv, String session_key)
    {
        String retS = "";
        String appid = "wxc32bd5819d7a1cc5";
        try{
            JSONObject decryptObject = NativeUtils.decrypt(appid, encryptedData, session_key, iv);

            //logger.info(decryptObject.toJSONString());
            retS = decryptObject.getString("phoneNumber");

        } catch (Exception ex){

        }

        return retS;
    }


//---------------------------------------------------------------------------------
// 解密接口

    /**
	 * 解密数据
	 * @return
	 * @throws Exception
	 */
	public static JSONObject decrypt(String appId, String encryptedData, String sessionKey, String iv){
		try {
			byte[] resultByte = decrypt(Base64.decodeBase64(encryptedData),Base64.decodeBase64(sessionKey),Base64.decodeBase64(iv));
			if(null != resultByte && resultByte.length > 0){
				String result = new String(WxPKCS7Encoder.decode(resultByte));
				JSONObject jsonObject = JSONObject.parseObject(result);
				String decryptAppId = jsonObject.getJSONObject("watermark").getString("appid");
				if(!appId.equals(decryptAppId)){
					return null;
				}
				return jsonObject;
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	static {
		Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
	}
	/**
	 * AES解密
	 *
	 * @param content
	 *            密文
	 * @return
	 * @throws InvalidAlgorithmParameterException
	 * @throws NoSuchProviderException
	 */
	public static byte[] decrypt(byte[] content, byte[] keyByte, byte[] ivByte) throws InvalidAlgorithmParameterException {
		try {
			Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
			Key sKeySpec = new SecretKeySpec(keyByte, "AES");
			cipher.init(Cipher.DECRYPT_MODE, sKeySpec, generateIV(ivByte));// 初始化
			byte[] result = cipher.doFinal(content);
			return result;
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		} catch (NoSuchPaddingException e) {
			e.printStackTrace();
		} catch (InvalidKeyException e) {
			e.printStackTrace();
		} catch (IllegalBlockSizeException e) {
			e.printStackTrace();
		} catch (BadPaddingException e) {
			e.printStackTrace();
		} catch (NoSuchProviderException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}

	// 生成iv
	public static AlgorithmParameters generateIV(byte[] iv) throws Exception {
		AlgorithmParameters params = AlgorithmParameters.getInstance("AES");
		params.init(new IvParameterSpec(iv));
		return params;
	}

在网上找了好久,东拼洗凑居然能用,希望对写小程序的朋友有帮助。

相关推荐
fxss2 天前
儿童免费学习网站:宝宝学识屋
微信
M哥支付2 天前
高频交易优选方案:银联快捷支付通道
服务器·网络·其他·微信·金融
M哥支付3 天前
快捷支付 VS 网关支付 安全对比
服务器·网络·其他·微信·金融
开开心心_Every4 天前
实现鼠标键盘动作录制与重复播放的工具
微信·jupyter·pycharm·pdf·计算机外设·word·excel
智购科技无人售货机厂家5 天前
2026自动售货机备用电池管理系统设计:从充放电保护到健康监测的工程实践~YH
大数据·linux·单片机·嵌入式硬件·微信
用户029669769826 天前
摸着石头过河:我用Go把微信加密模块给逆向了一回
微信·go
私域管理小助手6 天前
微信定时发圈,内容提前排好,到点自动发
微信
万邦科技Lafite7 天前
1688一键创建订单付款API操作指南讲解
人工智能·微信·api·电商开放平台·淘宝开放平台·api开放接口
风安•辛幸10 天前
mac上微信最新v4以上版客户端多开教程,亲测可用
macos·微信
智购科技无人售货机厂家11 天前
2026自动售货机出货口防夹手设计:从红外检测到电机反转的工程实践~YH
大数据·linux·单片机·嵌入式硬件·微信