本系统采用三步渐进式登录流程,使用旧版手机号解密方式(不需要开通"手机号快速验证组件"权限)。
目的:检查用户是否已注册,老用户可直接登录
流程:
wx.login() 获取 codePOST /auth/sys/miniapp/custom/openidcode 调用微信API获取 openidopenid 查询数据库{ isSign: "true", token }{ isSign: "false" }目的:获取用户手机号,检查是否已用手机号注册
流程:
open-type="getPhoneNumber")encryptedData 和 ivwx.login() 获取新的 code发送到后端:POST /auth/sys/miniapp/custom/check
{
"loginCode": "新的code",
"encryptedData": "加密的手机号数据",
"iv": "加密算法初始向量"
}
后端用 code 获取 session_key
后端用 session_key 解密 encryptedData 得到手机号
根据手机号查询数据库
返回结果:
{ isSign: "true", token }{ isSign: "false", openid, unionid, phoneNumber }目的:收集用户昵称和头像,创建新用户
流程:
发送到后端:POST /auth/sys/miniapp/custom/login
{
"openid": "用户openid",
"unionid": "用户unionid",
"phoneNumber": "手机号",
"nickname": "昵称",
"avatarUrl": "头像URL"
}
后端创建新用户记录
返回:{ token }
// 使用 session_key 作为密钥
// 使用 iv 作为初始向量
// 使用 AES/CBC/PKCS5Padding 算法解密
byte[] decryptedBytes = cipher.doFinal(encryptedDataBytes);
String decryptedData = new String(decryptedBytes, "UTF-8");
// 解析JSON获取 purePhoneNumber
openid 检查是否为老用户session_key 用于解密手机号code 是一次性的,用过就失效userId 和 phonelocalStorageAuthorization: Bearer {token} 携带| 接口 | 方法 | 说明 |
|---|---|---|
/auth/sys/miniapp/custom/openid |
POST | 第一步:静默登录 |
/auth/sys/miniapp/custom/check |
POST | 第二步:手机号验证 |
/auth/sys/miniapp/custom/login |
POST | 第三步:完善信息 |
/wd/miniapp-member/bizBigMember/getMemberInfoByToken |
GET | 获取用户信息 |
/jeecg-boot/mg/sys/oss/file/upload |
POST | 上传头像 |
encryptedData 和 iv 必须同时存在session_key 有效期为用户会话期间13800138000(纯数字,无国家码)