java好玩的接口_好玩的接口 之 Java 解密微信小程序获取手机号

本文介绍了如何在Spring Boot中实现解密微信小程序获取的加密手机号接口。通过wx.login获取session_key并保存在服务器,使用session_key对小程序客户端传来的iv和encryptedData进行解密操作,以获取微信绑定的手机号。
摘要由CSDN通过智能技术生成

LZ-Says:有些东西,真的是很矛盾,本来很简单的事儿,各自坚持,结果,不欢而散,不舍?如何?

bd7bc1ad0e7e7e4cefa1e36f1abe3cd6.png

前言

最近搞接口,基于 Spring Boot,怎么说呢,很虐。

不过熟悉了业务,表结构等等,相对来说还是比较 nice,比较爽。

可惜,目前还是属于 最最最最 low 的小白白,希望点滴积累吧。

今天接到要实现一个解密微信小程序获取微信绑定的手机号接口,有点懵。

下面一起开始吧~

解密获取绑定微信手机号

官方地址:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/getPhoneNumber.html

划重点叻:

大概执行的一个流程图:

475856e93fe24abdd6797cce6fd02805.png

重点了解:

签名校验以及数据加解密涉及用户的会话密钥 session_key。 开发者应该事先通过 wx.login 登录流程获取会话密钥 session_key 并保存在服务器。为了数据不被篡改,开发者不应该把 session_key 传到小程序客户端等服务器外的环境。

关于会话密钥 session_key 有效性

1efbc18f528391f18b11b5ff677721ba.png

小程序调用获取手机号码返回参数说明:

7838c9aa7ee63b7e248e67983938bdf4.png

开搞、实现

简单说下逻辑顺序:

小程序通过调用获取手机号授权方式拿到返回的 iv 和 encryptedData;

后台通过调用 login 接口拿到对应的 openID 以及 sessionKey;

解密。

直接放代码了:

导包:

import com.sun.org.apache.xerces.internal.impl.dv.util.Base64; // 这个包不限,LZ 正好项目有个支持解密顺手用了

import java.security.spec.AlgorithmParameterSpec;

import javax.crypto.Cipher;

import javax.crypto.spec.IvParameterSpec;

import javax.crypto.spec.SecretKeySpec;

解密关键代码:

MapweChatMap = 获取 SessionKey;

String sessionKey = weChatMap.get("sessionKey").toString();

// 开始解密

byte[] encData = Base64.decode(encryptedData);

byte[] iv = Base64.decode(ivStr);

byte[] key = Base64.decode(sessionKey);

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

return new String(cipher.doFinal(encData), "UTF-8");

返回结果:

c271b6c600edc6479ed0958929ef4e53.png

个人公众号

不定期发布博文,最近有点忙,感谢老铁理解,欢迎关注~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值