赞
踩
说明:
调用 wx.login() 获取 临时登录凭证code ,并回传到开发者服务器。 调用 auth.code2Session 接口,换取
用户唯一标识 OpenID 和 会话密钥 session_key。 获取手机号,调用wx.getPhoneNumber() ,获取加密串
encryptedData 和加密算法的初始向量 ivStr 传到后台,用会话秘钥session_key ,调用
wxMaService.getUserService().getPhoneNoInfo(session_key,encryptedData
,ivStr )获得解密后的数据; 获取其他用户信息,调用wx.getUserInfor() ,获取加密串 encryptedData
和加密算法的初始向量 ivStr 传到后台,用会话秘钥session_key ,调用
wxMaService.getUserService().getUserInfor(session_key,encryptedData
,ivStr )获得解密后的数据; 之后开发者服务器可以根据用户标识来生成自定义登录态,用于后续业务逻辑中前后端交互时识别用户身份。
注意:
会话密钥 session_key 是对用户数据进行 加密签名 的密钥。为了应用自身的数据安全,开发者服务器不应该把会话密钥下发到小程序,也不应该对外提供这个密钥。
临时登录凭证 code 只能使用一次.
密文串要用 json 格式传输,不能用参数拼接的方式,会把密文串的加号转换为空格,导致解密失败。
1、添加依赖
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-miniapp</artifactId>
<version>4.5.0</version>
</dependency>
2、微信jar包实体类 WxMaService wxMaService;
3、根据code获取session_key和openId
WxMaJscode2SessionResult sessionResult = wxMaService.jsCode2SessionInfo(code);
4、获取手机号
弃用方法:
WxMaPhoneNumberInfo wxMaPhoneNumberInfo = wxMaService.getUserService().getPhoneNoInfo(SessionKey,EncryptedData,IvStr);
建议使用方法:
WxMaPhoneNumberInfo wxMaPhoneNumberInfo = wxMaService.getUserService().getPhoneNoInfo(code);
5、获取用户信息
WxMaUserInfo wxMaUserInfo = wxMaService.getUserService().getUserInfo(SessionKey,EncryptedData,IvStr);
手机号快速验证组件官网地址
6、 完整代码如下
/** * 小程序一键登录 * * @return openId */ @GetMapping("/mini/login") public AjaxResult miniProgramLogin(@RequestParam("code") String code) { return AjaxResult.success(minUserService.miniProgramLogin(code)); } /** * 获取手机号 * * @return com.sense.common.utils.ResultMap * @date 2024/6/21 11:24 */ @GetMapping("/mini/getPhoneNoInfo") public AjaxResult getPhoneNoInfo(@RequestParam("code") String code) { return AjaxResult.success(minUserService.getPhoneNoInfo(code)); }
@Override public JSONObject miniProgramLogin(String code) { try { WxMaJscode2SessionResult session = wxMaService.getUserService().getSessionInfo(code); //查询是否存在,不存在则新增用户 MinUser minUser = loginOrRegister(session.getOpenid()); JSONObject object = new JSONObject(); object.put("openId", session.getOpenid()); object.put("privacyStatus", minUser.getPrivacyStatus()); object.put("sessionKey", session.getSessionKey()); log.info("{}-登录成功:{}", minUser.getUserNickName(), session.getOpenid()); //记录登录日志 iMinOperationLogService.insertMinOperationLog(session.getOpenid(), minUser.getUserNickName(), "小程序登陆"); return object; } catch (WxErrorException e) { log.error("获取微信授权信息失败:{}", e.getMessage(), e); throw new ServiceException("登陆失败", HttpStatus.ERROR); } } @Override public WxMaPhoneNumberInfo getPhoneNoInfo(String code) { try { return wxMaService.getUserService().getPhoneNoInfo(code); } catch (WxErrorException e) { log.error("获取用户手机号失败: {}", e.getMessage()); throw new ServiceException("获取用户手机号失败"); } }
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。