Java實現(xiàn)微信登錄并獲取用戶信息功能(開發(fā)流程)
前言
上一篇做了php的微信登錄,所以也總結一下Java的微信授權登錄并獲取用戶信息這個功能的開發(fā)流程。
配置
配置什么的就不多說了,詳細的配置可以直接前往我上一篇查看。
http://www.dbjr.com.cn/program/323671283.htm
流程實現(xiàn)(后端)(JAVA)(springboot)
1.首先先配置一下application.yml文件
配置一下微信小程序的Appid 和 appSecret
2.編寫控制層
package com.xiangwu.controller.Wx; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.xiangwu.common.exception.BaseException; import com.xiangwu.common.exception.BussinessException; import com.xiangwu.common.exception.MessageConstant; import com.xiangwu.common.interceptor.BaseContext; import com.xiangwu.common.interceptor.JwtProperties; import com.xiangwu.common.jwt.JwtClaimsConstant; import com.xiangwu.common.response.BaseResponse; import com.xiangwu.common.utils.JwtUtil; import com.xiangwu.entiry.Demand; import com.xiangwu.entiry.Member; import com.xiangwu.entiry.Member1; import com.xiangwu.savedto.MemberDto; import com.xiangwu.savedto.UserLoginDto; import com.xiangwu.savedto.UserLoginVo; import com.xiangwu.service.MemberService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @Author nothavebug * @Date 2024/7/2 14:58 * @PackageName:com.yisen.controller * @ClassName: MenberController * @Description: * @Version 1.0 */ @RestController("wxMemberController") @RequestMapping("/user") @Api(tags = "微信登錄") @Slf4j public class MemberController { @Autowired private MemberService memberService; @Autowired private JwtProperties jwtProperties; //C端用戶登錄--微信登錄 @PostMapping("/user/login") @ApiOperation("登錄") public BaseResponse<UserLoginVo> login(@RequestBody UserLoginDto userLoginDto) { //微信登錄 Member1 member = memberService.wxLogin(userLoginDto); //為微信生成jwt Map claims = new HashMap(); //用戶唯一標識 claims.put(JwtClaimsConstant.USER_ID, member.getId()); String token = JwtUtil.createJWT(jwtProperties.getUserSecretKey(), jwtProperties.getUserTtl(), claims); //其他處理 return new BaseResponse<>(token); } }
3.編寫Service層
package com.xiangwu.service; import com.baomidou.mybatisplus.extension.service.IService; import com.xiangwu.entiry.Member; import com.xiangwu.entiry.Member1; import com.xiangwu.savedto.UserLoginDto; /** * @Author nothavebug * @Date 2024/7/2 14:58 * @PackageName:com.xiangwu.service * @ClassName: MemberService * @Description: * @Version 1.0 */ public interface MemberService extends IService<Member> { //微信登錄 Member1 wxLogin(UserLoginDto userLoginDto); }
4.編寫Impl
package com.xiangwu.service.impl; import cn.binarywang.wx.miniapp.api.WxMaService; import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo; import cn.binarywang.wx.miniapp.bean.WxMaUserInfo; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.xiangwu.common.exception.LoginFailedException; import com.xiangwu.common.interceptor.WeChatProperties; import com.xiangwu.common.utils.HttpClientUtil; import com.xiangwu.entiry.Demand; import com.xiangwu.entiry.Member; import com.xiangwu.entiry.Member1; import com.xiangwu.mapper.DemandMapper; import com.xiangwu.mapper.Member1Mapper; import com.xiangwu.mapper.MemberMapper; import com.xiangwu.savedto.UserLoginDto; import com.xiangwu.service.DemandService; import com.xiangwu.service.MemberService; import lombok.extern.slf4j.Slf4j; import me.chanjar.weixin.common.error.WxErrorException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.security.auth.login.LoginException; import java.util.Date; import java.util.HashMap; import java.util.Map; /** * @Author nothavebug * @Date 2024/7/2 14:58 * @PackageName:com.xiangwu.service.impl * @ClassName: MemberServiceImpl * @Description: * @Version 1.0 */ @Service @Slf4j public class MemberServiceImpl extends ServiceImpl<MemberMapper, Member> implements MemberService { public static final String WX_LOGIN = "https://api.weixin.qq.com/sns/jscode2session"; @Autowired private WxMaService wxMaService; @Autowired private MemberMapper memberMapper; @Autowired private WeChatProperties weChatProperties; @Autowired private Member1Mapper member1Mapper; @Override public Member1 wxLogin(UserLoginDto userLoginDto) { String code = userLoginDto.getCode(); try { WxMaJscode2SessionResult session = wxMaService.getUserService().getSessionInfo(code); String openid = session.getOpenid(); // 調用微信 API 獲取用戶的手機號 WxMaPhoneNumberInfo phoneInfo = wxMaService.getUserService().getPhoneNoInfo(session.getSessionKey(), userLoginDto.getEncryptedData(), userLoginDto.getIv()); String phoneNumber = phoneInfo.getPhoneNumber(); if (openid==null){ throw new LoginFailedException("登錄失敗"); } Member1 member = memberMapper.getBymobile(phoneNumber); if (member ==null){ Member1 member1 = new Member1(); member1.setOpenid(openid); member1.setAddTime(new Date()); member1.setMobile(phoneNumber); member1.setAvatar("http://springboot.itliu.top/wx/images/20220225072654_1.jpg"); member1.setMemberType("1"); member1Mapper.insert(member1); } // 更新openid LambdaUpdateWrapper<Member1> member1LambdaUpdateWrapper = new LambdaUpdateWrapper<>(); member1LambdaUpdateWrapper.set(Member1::getOpenid,openid) .eq(Member1::getMobile,phoneNumber); member1Mapper.update(member,member1LambdaUpdateWrapper); return member; } catch (WxErrorException e) { throw new RuntimeException(e); } } private String getOpenid(String code){ //請求參數(shù)封裝 Map map = new HashMap(); map.put("appid",weChatProperties.getAppid()); map.put("secret",weChatProperties.getSecret()); map.put("js_code",code); map.put("grant_type","authorization_code"); //調用工具類,向微信接口服務發(fā)送請求 String json = HttpClientUtil.doGet(WX_LOGIN, map); log.info("微信登錄返回結果:{}", json); //解析json字符串 JSONObject jsonObject = JSON.parseObject(json); log.info("jsonObject: {}",jsonObject); String openid = jsonObject.getString("openid"); log.info("微信用戶的openid為:{}", openid); return openid; } }
前端微信登錄流程實現(xiàn)請移步我上一篇:http://www.dbjr.com.cn/program/323671283.htm
到此這篇關于Java實現(xiàn)微信登錄的文章就介紹到這了,更多相關java微信登錄內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- Java后端接入微信小程序登錄功能(登錄流程)
- java實現(xiàn)微信掃碼登錄第三方網(wǎng)站功能(原理和代碼)
- 微信小程序微信登錄的實現(xiàn)方法詳解(JAVA后臺)
- 詳解java實現(xiàn)簡單掃碼登錄功能(模仿微信網(wǎng)頁版掃碼)
- Java中基于Shiro,JWT實現(xiàn)微信小程序登錄完整例子及實現(xiàn)過程
- 使用weixin-java-tools完成微信授權登錄、微信支付的示例
- java實現(xiàn)微信小程序登錄態(tài)維護的示例代碼
- 第三方網(wǎng)站微信登錄java代碼實現(xiàn)
- java實現(xiàn) 微博登錄、微信登錄、qq登錄實現(xiàn)代碼
相關文章
Mybatis如何使用ognl表達式實現(xiàn)動態(tài)sql
這篇文章主要介紹了Mybatis使用ognl表達式實現(xiàn)動態(tài)sql的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06一文詳解如何從零構建Spring?Boot?Starter并實現(xiàn)整合
Spring Boot是一個開源的Java基礎框架,用于創(chuàng)建獨立、生產(chǎn)級的基于Spring框架的應用程序,這篇文章主要介紹了如何從零構建Spring?Boot?Starter并實現(xiàn)整合的相關資料,需要的朋友可以參考下2025-03-03springboot?整合表達式計算引擎?Aviator?使用示例詳解
本文詳細介紹了Google?Aviator?這款高性能、輕量級的?Java?表達式求值引擎,并通過詳細的代碼操作演示了相關API的使用以及如何在springboot項目中進行集成,感興趣的朋友一起看看吧2024-08-08SpringBoot整合Hmily實現(xiàn)TCC分布式事務
這篇文章主要為大家詳細介紹了SpringBoot如何整合Hmily實現(xiàn)TCC分布式事務,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下2024-11-11