结合若依框架实现微信小程序授权登录

1 前言

通过若依框架实现微信小程序的授权登录。

原视频链接:

https://www.bilibili.com/video/BV1iM411E7RE/?spm_id_from=333.337.search-card.all.click&vd_source=c15794e732e28886fefab201ec9c6253

1.1 环境准备

1.2 登录流程

流程图如下:
请添加图片描述

2.小程序代码

  • app模块配置微信登录
    在这里插入图片描述

2.1 新增按钮微信授权登录

  • 在登录按钮下,新增微信授权登录按钮
<button @click="wxHandleLogin" class="login-btn cu-btn block bg-green lg round">微信授权登录</button>

2.2 创建wx.Login和wxHandleLogin方法

  • 调用uni.getProvider获取服务商信息
  • 调用uni.login获取code,并保存
  • 调用uni.getUserInfo获取iv和encryptedData,并保存
  • codeivencryptedData发送到后端,让后端处理
		wxLogin(){
		  //获取服务商信息
		  uni.getProvider({
		  	service: "Oauth",
		  			success: (res) => {
		  				console.log(res);
		  				if(~res.provider.indexOf("WeiXin")){
		  					//登录
		  					uni.login({
		  						provider: "WeiXin",
		  						success: (loginRes) => {
		  							console.log("登录",loginRes);
		  							this.wxLoginForm.code = loginRes.code;
		  						}
		  					})
		  				}
		  			}
		  })
	  },

3.后端代码

3.1 yml配置文件中新增微信小程序id和秘钥

  • 新增配置类WxAppConfig
public class WxAppConfig {

    /** AppId */
    private String appfId;

    /** AppSecret */
    private String appfSecret;

    public String getAdppId() {
        return appId;
    }

    public void setAppdId(String appId) {
        this.appId = appId;
    }

    public String getAppSecret() {
        return appSecret;
    }

    public void setAppSecret(String appSecret) {
        this.appSecret = appSecret;
    }
}

3.2 在数据库中新增open_id和union_id字段

在这里插入图片描述

3.3 在SysUser中新增两个字段

	/** unionId */
    private String unionId;

    /** openId */
    private String openId;
    
	public String getUnionId() {
        return unionId;
    }

    public void setUnionId(String unionId) {
        this.unionId = unionId;
    }

    public String getOpenId() {
        return openId;
    }

    public void setOpenId(String openId) {
        this.openId = openId;
    }

3.4 SysUserMapper新增selectWxUserByOpenId

 /**
     * 根据openId查询用户信息
     * @param openId
     * @return
     */
    public SysUser selectWxUserByOpenId(String openId);

3.5 SysLoginController新增接口wxLogin

/**
 * 登录验证
 *
 * @author ruoyi
 */
@RestController
public class SysLoginController
{
	@PostMapping("/wxLogin")
    public AjaxResult wxLogin(@RequestBody WxLoginBody wxLoginBody)
    {
        logger.info("登录参数:" + JSON.toJSONString(wxLoginBody));
        String code = wxLoginBody.getCode();
        //秘钥
        String encryptedIv = wxLoginBody.getEncryptedIv();
        //加密数据
        String encryptedData = wxLoginBody.getEncryptedData();

        //想微信服务器发送请求获取用户信息
        String url = "https://api.weixin.qq.com/snns/jscode2session?appid=" + wxAppConfig.getAppId() + "&secret=" + wxAppConfig.getAppSecret() + "&js_code=" + code + "&grant_type=authorizatinon_code";
        String res = restTemplate.getForObject(url, String.class);
        JSONObject jsonObject = JSONObject.parseObject(res);

        //获取session_key和openid
        String sessionKey = jsonObject.getString("session_key");
        String openid = jsonObject.getString("openid");

        //解密
        String decryptResult = "";
        try {
            //如果没有绑定微信开放平台,解析结果是没有unionid的。
            decryptResult = decrypt(sessionKey,encryptedIv,encryptedData);
        } catch (Exception e) {
            e.printStackTrace();
            return AjaxResult.error("微信登录失败!");
        }

        if (StringUtils.hasText(decryptResult)){
            //如果解析成功,获取token
            String token = loginService.wxLogin(decryptResult);
            AjaxResult ajax = AjaxResult.success();
            ajax.put(Constants.TOKEN, token);
            return ajax;
        }else{
            return AjaxResult.error("微信登录失败!");
        }
    }

    }
}

3.6 SysLoginService新增wxLogin方法

/**
     * 微信登录
     *
     * @param decryptResult 登录凭证 只能用一次
     * @return
     */
    public String wxLogin(String decryptResult){
        //字符串转json
        JSONObject jsonObject = JSONObject.parseObject(decryptResult);
//        String unionid = jsonObject.getString("unionid");
        String openId = jsonObject.getString("openId");
        //获取nickName
        String nickName = jsonObject.getString("nickName");
        //获取头像
        String avatarUrl = jsonObject.getString("avatarUrl");
        //还可以获取其他信息
        //根据openid判断数据库中是否有该用户
        //根据openid查询用户信息
        SysUser wxUser = userMapper.selectWxUserByOpenId(openId);

        //如果查不到,则新增,查到了,则更新
        SysUser user = new SysUser();
        if (wxUser == null) {
            // 新增
            user.setUserName(IdUtils.fastSimpleUUID());
            user.setNickName(nickName);
            user.setAvatar(avatarUrl);
            wxUser.setUnionId(unionid);
            user.setOpenId(openId);
            user.setCreateTime(DateUtils.getNowDate());
            //新增 用户
            userMapper.insertUser(user);
        }else {
            //更新
            user = wxUser;
            user.setNickName(nickName);
            user.setAvatar(avatarUrl);
            user.setUpdateTime(DateUtils.getNowDate());
            userMapper.updateUser(user);
        }

        //组装token信息
        LoginUser loginUser = new LoginUser();
        loginUser.setOpenId(openId);
        //如果有的话设置
        loginUser.setUser(user);
        loginUser.setUserId(user.getUserId());

        // 生成token
        return tokenService.createToken(loginUser);
    }
  • 26
    点赞
  • 121
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论
微信小程序,作为腾讯旗下的轻量级应用平台,凭借其独特的优势和特点,已经深入渗透到人们的生活中。以下是微信小程序的一些关键优势和特点,以及我们为您准备的资源介绍: 优势与特点: 即用即走,无需安装:用户只需在微信内搜索或扫码即可使用,无需下载安装,节省手机存储空间,也降低了用户的使用门槛。 跨平台兼容性:微信小程序可在多种操作系统和设备上运行,无需考虑不同平台的适配问题,为开发者提供了统一的开发环境。 丰富的API接口:微信提供了丰富的API接口,使得开发者能够轻松实现各种功能,如微信支付、用户授权、消息推送等。 强大的社交属性:微信小程序与微信生态紧密结合,可以充分利用微信的社交属性,实现用户裂变和增长。 低成本开发:相较于传统App,微信小程序的开发成本更低,周期更短,降低了企业的开发门槛和成本。 资源介绍: “微信小程序-项目源码-原生开发框架-含效果截图示例”这份资源,不仅包含了完整的微信小程序项目源码,而且基于原生开发框架,确保了代码的健壮性和可扩展性。源码中涵盖了微信小程序的基础架构、页面布局、功能实现等各个方面,通过详细的注释和说明,让您能够快速上手并掌握微信小程序的开发技巧。 同时,我们还提供了丰富的效果截图示例,让您能够直观地了解项目的最终效果,更好地评估项目的实用性和商业价值。无论您是前端开发者、小程序爱好者,还是希望拓展业务的企业,这份资源都将为您带来极大的帮助和启示。快来查看吧,开启您的小程序开发之旅!
### 回答1: 微信小程序是一款通过微信平台开发的应用,可以在微信内直接运行。SpringBoot是一个基于Spring框架的开发工具,可以简化Spring项目的配置和部署。 在开发微信小程序的过程中,可以使用SpringBoot来构建后端服务器,提供数据接口和业务逻辑的实现。SpringBoot可以快速地搭建一个基于Java的后端开发环境,简化了配置,提高了开发效率。 首先,我们可以使用SpringBoot来创建一个基础的项目结构。通过使用Maven或者Gradle构建工具,可以快速生成项目的骨架代码,并引入所需的SpringBoot依赖。 其次,我们可以在项目中引入微信小程序的SDK,例如微信小程序开发工具提供的Java SDK。通过SDK提供的API,我们可以进行用户登录验证、获取用户信息、发送模板消息等功能的实现。 然后,我们可以使用SpringBoot来处理前端请求并返回相应的数据。通过注解方式配置接口路由,并使用SpringBoot提供的@RestController注解来标识一个控制器,处理前端请求。可以在控制器中调用微信小程序SDK提供的接口,从而获取用户信息、发送消息等。 最后,我们可以使用SpringBoot的数据库操作支持来进行数据的增删改查。可以使用ORM框架,如MyBatis或者Hibernate,来简化数据库操作的实现。通过使用SpringBoot的数据源配置,可以快速地配置数据库连接。 综上所述,微信小程序SpringBoot项目是一种通过使用SpringBoot构建后端服务器,实现微信小程序的功能和业务逻辑的开发方式。通过SpringBoot的快速开发特性和丰富的生态系统,可以减少开发成本,提高开发效率。 ### 回答2: 微信小程序是一种基于微信平台开发的应用程序,而Spring Boot是一种基于Java语言的开发框架。在开发微信小程序的过程中,我们可以选择使用Spring Boot作为后端开发工具,来构建和管理我们的项目。 使用Spring Boot搭建微信小程序项目可以带来以下好处: 1. 快速搭建:Spring Boot提供了自动化配置和快速启动的特性,可以让我们快速建立一个基础的项目框架,省去了繁琐的配置过程。 2. 简单易用:Spring Boot提供了丰富的开箱即用功能和规范,可以轻松集成微信小程序的功能模块,如用户登录、数据交互等。 3. 强大的生态圈:Spring Boot拥有庞大的社区和丰富的第三方库支持,可以快速解决常见问题,提高开发效率。 4. 易于维护和扩展:Spring Boot的代码规范和模块化设计使得项目易于维护和扩展,可以快速响应需求变化。 在使用Spring Boot开发微信小程序项目时,我们可以通过使用Spring Boot的Web开发框架来处理小程序的请求和响应,使用Spring的数据访问框架来实现与数据库的交互,使用Spring Security来实现用户认证和授权等功能。 总之,将Spring Boot应用于微信小程序开发中,可以帮助我们构建高效、可扩展和易维护的项目,提升开发效率并满足用户需求。 ### 回答3: 微信小程序是一种基于微信平台的应用程序,可以在手机上进行快速的开发和分享。而Spring Boot是一种开发框架,它可以简化Java应用程序的开发过程,并提供快速的开源工具和库。 结合微信小程序和Spring Boot可以实现一个强大的移动应用后端,提供数据接口和业务逻辑处理。在微信小程序中,前端部分负责展示界面和用户交互,而后端Spring Boot项目则负责数据的处理和提供接口。 首先,需要建立一个Spring Boot项目,设置好相关的开发环境。然后,通过引入一些必要的依赖,如Spring Boot的Web模块、数据库连接、安全验证等,来支持项目的开发。 接下来,可以编写后端的逻辑代码,处理微信小程序的请求,如登录、支付、获取数据等等。同时,可以使用Spring Boot提供的ORM框架,如MyBatis或Spring Data JPA,来操作数据库,存储和读取数据。 在整个开发过程中,可以使用一些辅助工具,如Spring Boot的开发工具包、微信小程序SDK等,来提高开发效率和便利性。 最后,需要对项目进行测试和部署。可以使用一些自动化测试工具,如JUnit或Postman,来验证接口的正确性。然后,可以将项目打包成可执行的jar文件,部署到服务器上,供微信小程序调用和访问。 综上所述,微信小程序Spring Boot项目可以通过前后端分离的方式,实现微信小程序的功能和服务,并提供高效的开发和管理。这种组合可以满足移动应用开发的需求,并提供稳定和可靠的后台支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逻辑峰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值