微信登录前端开发指南

使用场景

  1. 微信公众号内嵌H5网页调用微信登录
  2. 在微信浏览器中的网页唤起微信登录界面

详情可以查阅微信登录官方文档 链接地址

功能思路

  1. 后台先在微信给开发者提供的测试账号平台上创建应用,并把前台开发同学的微信添加到这个平台中,用于提供测试公众号,平台地址
  2. 前台拼装各种微信登录必须的参数,并将页面跳转到微信指定的连接获取微信登录 code参数
  3. 前台解析返回的链接,获取链接中的参数,并将 code参数传给后台
  4. 由于后续获取的参数安全等级较高,所以后续的操作均由后台完成,并将数据存储在服务端
  5. 后台通过 code参数换取 access_token参数和 openid参数并存储在服务端
  6. 后台再通过 access_token参数和 openid参数换取用户详细信息,并将这两步包装成接口,让前台调用,返回前端登录状态完成微信登录操作
  7. 如果 access_token参数失效,使用 refresh_token刷新即可,详细操作查阅文档,一般用不到这步

前端代码

1. 获取code

function getWXcode() {

    // 公众号的唯一标识,找公众号管理员提供
    var APPID = '公众号的appid';

    // 授权后重定向的回调链接地址,要使用encodeURIComponent()对其进行编码处理
    // !!!注意回调的域名必须先让公众号管理员添加到安全域名中,否则无法完成跳转
    var REDIRECT_URI = encodeURIComponent('授权后跳转回的页面');

    // 常量,返回类型,填写code即可
    var RESPONSE_TYPE = 'code';

    // 常量,应用授权作用域
    // snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且, 即使在未关注的情况下,只要用户授权,也能获取其信息 )
    // snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid)
    var SCOPE = 'snsapi_userinfo' || 'snsapi_base';

    // 重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节
    // 除了此项是非必须参数,其他都是必须要带的参数
    // 注意!!!该参数通常用于判断跳转回来之前的接口是什么作用,比如用于判断是第一次微信登录还是授权过的快速微信登录
    var STATE = '可以自定义的返回参数';

    // 无论直接打开还是做页面302重定向时候,必须带'#wechat_redirect'参数
    // 由于授权操作安全等级较高,所以在发起授权请求时,微信会对授权链接做正则强匹配校验,如果链接的参数顺序不对,授权页面将无法正常访问
    location.href =
        https://open.weixin.qq.com/connect/oauth2/authorize?appid=${APPID}&redirect_uri=${REDIRECT_URI}&response_type=${RESPONSE_TYPE}&scope=${SCOPE}&state=STATE#wechat_redirect ;

}

2. 解析参数

function parseData() {

    // 截取地址栏?后面的内容
    var search = location.search.slice(1);

    // 用&标识分割成数组
    var arr = search.split('&');

    // 处理数组转换成对象,并返回
    var result = {};
    arr.forEach(function(item) {
        var itemArr = item.split('=');
        result[itemArr[0]] = itemArr[1];
    });
}

3. code传给后台,后台完成微信登录后续操作后,返回登录状态提示前端登录成功还是失败,然后前台继续后续业务逻辑代码编写

我是 fx67ll.com,如果您发现本文有什么错误,欢迎在评论区讨论指正,感谢您的阅读!
如果您喜欢这篇文章,欢迎访问我的 本文github仓库地址,为我点一颗Star,Thanks~ 😃
转发请注明参考文章地址,非常感谢!!!

Original: https://www.cnblogs.com/fx67ll/p/15432344.html
Author: fx67ll
Title: 微信登录前端开发指南

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/599566/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 23种设计模式之责任链模式

    文章目录 概览 责任链模式的优缺点 责任链模式的结构和实现 * 模式的结构 模式的实现 总结 ; 概览 责任链模式(Chain of Responsibility Pattern)…

    数据库 2023年6月6日
    092
  • Server returns invalid timezone. Go to ‘Advanced’ tab and set ‘serverTimezone’ property manually.

    用pycharm连接mysql报错改变serverTimezone改了之后确实可以连接上mysql数据库 人生很长,一起加油 Original: https://www.cnblo…

    数据库 2023年6月6日
    070
  • tomcat线程池

    tomcat线程池和普通的线程池设计上有所区别,下面主要来看看它是如何设计的 tomcat中线程池的创建 <span>org.apache.tomcat.util.ne…

    数据库 2023年6月16日
    083
  • 系列文章分类汇总

    尤娜系列 从前,有一个简单的通道系统叫尤娜…… 尤娜系统的第一次飞行中换引擎的架构垂直拆分改造 四种常用的微服务架构拆分方式 尤娜,我去面试了 专业课回顾 …

    数据库 2023年6月6日
    057
  • MySQL45讲之函数转换导致不使用索引

    本文介绍了由于函数转换而不使用索引的三个问题。请注意,不使用索引意味着不使用树搜索,而是使用全表扫描索引树。 [En] This article introduces three …

    数据库 2023年5月24日
    067
  • AQS:Java 中悲观锁的底层实现机制

    介绍 AQS AQS(AbstractQueuedSynchronizer)是 Java 并发包中,实现各种同步组件的基础。比如 各种锁:ReentrantLock、ReadWri…

    数据库 2023年6月11日
    097
  • eclipse连接MySQL 8.0.29.0

    推荐文章: eclipse导入JDBC MySQL详细安装 菜鸟java MySQL连接教程 步骤: 找到MySQL的连接Java的jar文件; 如下图: 在eclipse项目文件…

    数据库 2023年5月24日
    0100
  • MYSQL8.0版本安装失败!

    第一次安装失败 Windows Server 2012首先是使用mysql的最新安装包去安装,但是安装包在执行到 starting mysql server 时,就卡住不动了。手动…

    数据库 2023年5月24日
    071
  • VSCode 常用插件

    自定义相关 语言包、主题、快捷键等 plugins description Chinese 中文简体语言包 Material Theme Google Material 主题(附带…

    数据库 2023年6月6日
    089
  • 设计模式之(7)——装饰设计模式

    定义:装饰设计模式允许向一个现有的对象添加功能,而不改变其结构(这就很符合程序设计的” 开闭原则“),重点突出类功能的增强,属于结构型创建模式,这种模式创建…

    数据库 2023年6月14日
    062
  • 啥是Session?

    什么是 Session 会话? 1、Session 就一个接口(HttpSession)。2、Session 就是会话。它是用来维护一个客户端和服务器之间关联的一种技术。3、每个客…

    数据库 2023年6月11日
    069
  • java-配置tomcat服务器启动出现闪退解决办法

    1.配置tomcat服务器注意的地方:1.1下载tomcat软件,选择绿色免安装版,解压即可使用。1.2tomcat服务器是java语言编写的,想要运行tomcat需要java环境…

    数据库 2023年6月11日
    096
  • SpringBoot 整合 MongoDB 实战解说

    在前面的文章中,我们详细的介绍了 MongoDB 的配置和使用,如果你对 MongoDB 还不是很了解,也没关系,在 MongoDB 中有三个比较重要的名词: 数据库、集合、文档!…

    数据库 2023年6月14日
    081
  • SQL的语法

    创建: create database [if not exists] 数据库名称 [default charset 字符集] [collate 排序规则]; (PS:方括号(&#…

    数据库 2023年5月24日
    054
  • AQS源码探究之竞争锁资源

    AQS源码探究—竞争锁资源 我们进入ReentrantLock源码中查看其内部类 Sync 对AQS进行扩展公共方法并定义抽象方法的抽象类 FaireSync 实现公平…

    数据库 2023年6月11日
    074
  • Spring AOP

    AOP简介: 面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。 *作用:在不惊动原始设计的基础上为其进行功能增强。 AOP核心概念 (1)Aspec…

    数据库 2023年6月16日
    076
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球