做网站 工商 非法经营,wordpress刷新错位,外链群发软件,企业营销型网站的内容一、流程图 说明#xff1a; 调用 wx.login() 获取 临时登录凭证code #xff0c;并回传到开发者服务器。 调用 auth.code2Session 接口#xff0c;换取 用户唯一标识 OpenID 和 会话密钥 session_key。 获取手机号#xff0c;调用wx.getPhoneNumber() #xff0c;获取加密…一、流程图 说明 调用 wx.login() 获取 临时登录凭证code 并回传到开发者服务器。 调用 auth.code2Session 接口换取 用户唯一标识 OpenID 和 会话密钥 session_key。 获取手机号调用wx.getPhoneNumber() 获取加密串 encryptedData 和加密算法的初始向量 ivStr 传到后台用会话秘钥session_key 调用 wxMaService.getUserService().getPhoneNoInfosession_key,encryptedData ,ivStr 获得解密后的数据 获取其他用户信息调用wx.getUserInfor() 获取加密串 encryptedData 和加密算法的初始向量 ivStr 传到后台用会话秘钥session_key 调用 wxMaService.getUserService().getUserInfor(session_key,encryptedData ,ivStr )获得解密后的数据 之后开发者服务器可以根据用户标识来生成自定义登录态用于后续业务逻辑中前后端交互时识别用户身份。 注意
会话密钥 session_key 是对用户数据进行 加密签名 的密钥。为了应用自身的数据安全开发者服务器不应该把会话密钥下发到小程序也不应该对外提供这个密钥。 临时登录凭证 code 只能使用一次. 密文串要用 json 格式传输不能用参数拼接的方式会把密文串的加号转换为空格导致解密失败。
二、后端相关代码
1、添加依赖 dependencygroupIdcom.github.binarywang/groupIdartifactIdweixin-java-miniapp/artifactIdversion4.5.0/version/dependency2、微信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));}Overridepublic 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);}}Overridepublic WxMaPhoneNumberInfo getPhoneNoInfo(String code) {try {return wxMaService.getUserService().getPhoneNoInfo(code);} catch (WxErrorException e) {log.error(获取用户手机号失败: {}, e.getMessage());throw new ServiceException(获取用户手机号失败);}}