当前位置: 首页 > news >正文

微信小程序授权登录流程以及使用到的API

微信小程序的授权登录流程是一个涉及前端小程序与后端服务器以及微信服务器之间交互的过程。以下是该流程及其使用的API的详细说明:

微信小程序授权登录流程

  1. 用户触发登录
    • 用户在小程序内点击登录按钮或进行需要登录才能访问的操作时,触发登录流程。
  2. 小程序调用wx.login()
    • 小程序前端调用wx.login() API 获取临时登录凭证(code)。这个code是后续获取用户唯一标识openid和会话密钥session_key的关键。
  3. 将code发送到后端服务器
    • 小程序将获取到的code发送到开发者自己的后端服务器。
  4. 后端服务器调用微信API换取openid和session_key
    • 后端服务器使用接收到的code,结合自己的AppIDAppSecret,向微信服务器发送请求(通常是通过调用https://api.weixin.qq.com/sns/jscode2session接口)。
    • 微信服务器验证通过后,返回给后端服务器用户的openid和session_key。
  5. 生成自定义登录态
    • 后端服务器根据openid等信息生成自定义登录态(如token),用于后续业务逻辑中前后端交互时识别用户身份。
  6. 将自定义登录态返回给前端小程序
    • 后端服务器将生成的自定义登录态返回给前端小程序。
  7. 前端小程序保存自定义登录态
    • 前端小程序接收到自定义登录态后,将其保存到本地(如使用wx.setStorageSync() API),并在后续请求中携带这个登录态。

使用到的API

  • 前端小程序
    • wx.login():获取用户的登录凭证(code)。
    • wx.setStorageSync() / wx.getStorageSync():用于在本地缓存中保存和读取自定义登录态。
    • wx.getUserInfo()(注意:此API在新版微信中可能需要用户授权,且获取到的用户信息可能不包含敏感信息,如手机号等):用于获取用户信息,但可能需要用户确认。
    • wx.requestPayment()(虽然不直接用于登录,但常用于支付流程,与登录流程同属于小程序常用API):用于发起支付请求。
  • 后端服务器
    • 通常使用HTTP请求库(如Node.js的axios、request等)向微信服务器发送请求,调用https://api.weixin.qq.com/sns/jscode2session接口换取openid和session_key。

注意事项

  • 用户体验:授权登录的过程需要尽可能简洁明了,避免给用户带来过多的操作步骤和等待时间。
  • 数据安全:为了保障用户信息安全,授权登录过程中需要使用HTTPS协议进行数据传输,同时对获取到的用户信息进行适当的加密处理。
  • 适配不同设备:考虑到不同设备可能存在的差异,开发者需要在实现授权登录功能时进行充分的测试和调试,确保在不同设备上的兼容性。
  • 与后端服务器配合:授权登录过程中需要与后端服务器进行通信,因此需要确保前后端服务器之间的接口协议和数据格式定义清晰明确,避免出现错误。
  • 处理异常情况:在授权登录过程中,难免会遇到各种异常情况,如网络连接失败、服务器故障等,需要提前做好异常处理机制。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 从电商行业的变化引出未来技术趋势
  • ThinkPHP5 5.0.23-rce远程代码执行漏洞复现
  • el-table使用#header自定义表头后脱离响应式问题处理
  • 设计模式学习[5]---装饰模式
  • 【C语言】编译原理
  • QMQTT在项目中的用法
  • 关于C++你应该知道的知识:C/C++内存管理
  • 【Python】正则表达式
  • python之异步任务
  • 数据结构与算法 第12天(排序)
  • python之对象间的关系
  • 14.2 k8s中我们都需要监控哪些组件
  • C#/.NET/.NET Core推荐学习路线文档文章
  • Linux新建虚拟机Ubuntu详解
  • Linux:软硬连接和动静态库
  • [译]CSS 居中(Center)方法大合集
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • 2017年终总结、随想
  • ES6 学习笔记(一)let,const和解构赋值
  • Hexo+码云+git快速搭建免费的静态Blog
  • Laravel Mix运行时关于es2015报错解决方案
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • - 概述 - 《设计模式(极简c++版)》
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 数据仓库的几种建模方法
  • 说说动画卡顿的解决方案
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • raise 与 raise ... from 的区别
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • ​如何防止网络攻击?
  • ###项目技术发展史
  • #职场发展#其他
  • $.each()与$(selector).each()
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (13):Silverlight 2 数据与通信之WebRequest
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (2024)docker-compose实战 (9)部署多项目环境(LAMP+react+vue+redis+mysql+nginx)
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (k8s)Kubernetes本地存储接入
  • (pycharm)安装python库函数Matplotlib步骤
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (二)换源+apt-get基础配置+搜狗拼音
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (全注解开发)学习Spring-MVC的第三天
  • (十)T检验-第一部分
  • (一)为什么要选择C++
  • .mp4格式的视频为何不能通过video标签在chrome浏览器中播放?
  • .net core webapi 大文件上传到wwwroot文件夹
  • .net 调用海康SDK以及常见的坑解释
  • .Net 中Partitioner static与dynamic的性能对比