IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 微信小程序登录授权功能(springboot后端,不懂我教你) -> 正文阅读

[移动开发]微信小程序登录授权功能(springboot后端,不懂我教你)

一、逻辑

官方文档

  1. 使用wx.login()获得code(或是和其他你需要的信息)传到你写的接口
  2. 在接口中使用url用get的方式访问微信服务器接口(jscode2session)
  3. 将在接口中获得的openid和你所要信息联系起来存进数据库(注册)
  4. 返回一个 自己生成的 sessionid返回给小程序端,用于判断
    a. 还未绑定过信息(注册)、上次获取sessionid的信息已经超过你所规定的时间(“过期”)、清楚了本地数据,则重新发起请求
    b. 反之,则不用请求,直接使用存储在本地的数据

二、小程序端

Page({
  onLoad() {
    //查询本地是否有sessionId
    var sessionId = wx.getStorageSync("sessionId");
    if (!sessionId)
      //还没绑定过(注册)
      this.login();
    else {
      //一天之后更新一次
      if (Date.now() - sessionId.time > 24 * 60 * 60 * 1000) this.login();
      //我这里并没存贮用户信息,你可以自己尝试,比较简单
      else console.log("直接获取用户信息继续进一步的操作!");
    }
  },
  // 登录
  login() {
    wx.login({
      success: (res) => {
        console.log(res);
        // 将code发送到服务器后台
        wx.request({
          url: "http://localhost:8080/user/login",
          data: {
            code: res.code,
          },
          header: { "content-type": "application/json" },
          method: "GET",
          dataType: "json",
          responseType: "text",
          success: (result) => {
            console.log(result);
            //在这里将sessionId存在本地,当做预先判断是否发起请求
            if (result.statusCode == 200) {
              wx.setStorageSync("sessionId", {
                time: Date.now(),
                data: result.data.sessionId,
              });
            }
            //这里编写你的其他需求
          },
          fail: () => {
            console.log("获取sessionId失败!");
          },
        });
      },
      fail: () => {
        console.log("获取code失败!");
      },
    });
  }
});

三、后端controller

引入json jar包

<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.75</version>
        </dependency>

接口

@Controller
@RequestMapping("/user")
public class userController {

    @Autowired
    private UserService userService;
    @ResponseBody
    @RequestMapping("/login")
    public JSONObject login(@Param("code") String code){
        //小程序端发送过来的code
        String result = "";
        //微信服务器接口
        String url="https://api.weixin.qq.com/sns/jscode2session?appid=你的appid&secret=你的secret&js_code=";
        url+=code+"&grant_type=authorization_code";
        BufferedReader in = null;
        try {
            URL realUrl = new URL(url);
            // 打开和URL之间的连接
            URLConnection connection = realUrl.openConnection();
            // 设置通用的请求属性
            connection.setRequestProperty("accept", "*/*");
            connection.setRequestProperty("connection", "Keep-Alive");
            connection.setRequestProperty("user-agent",
                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            // 建立实际的连接
            connection.connect();
            // 定义 BufferedReader输入流来读取URL的响应
            in = new BufferedReader(new InputStreamReader(
                    connection.getInputStream(), "UTF-8"));
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
        } catch (Exception e) {
            System.out.println("发送GET请求出现异常!" + e);
            e.printStackTrace();
        }
        // 使用finally块来关闭输入流
        finally {
            try {
                if (in != null) {
                    in.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
        JSONObject jsonObject = JSONObject.parseObject(result);
        System.out.println(jsonObject);
        //将openId存进数据库,进行用户绑定(理解为注册就行)
        //userService.addUser(jsonObject.get("openid"))
        //将用户的uid作为sessionId(我自己这样子做的,你们可以弄得复杂)
        //int sessionId =userService.getUserId(jsonObject.get("openid"))
        //下面展示不使用数据库了,直接传个1
        JSONObject json=new JSONObject();
        json.put("sessionId",1);
        return json;
    }

}

在这里插入图片描述

四、展示结果

第一次进入小程序

在这里插入图片描述
在这里插入图片描述


第二次进入小程序

在这里插入图片描述


有什么其他想法欢迎在评论区交流

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-09-22 14:48:20  更:2021-09-22 14:48:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 19:34:52-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码