微信扫码登录流程

微信官方文档使用

  • 搜索“微信开放平台”
  • 点击导航栏的“资源中心”
  • 点击“网站应用”下的“微信登录功能”
  • 地址
  • 微信扫码登录是基于OAuth2的,所以需要第三方应用(就是实现微信扫码登录的应用)成为微信的客户端,获取AppId和AppSecret。

获取AppId和AppSecret

  • “微信开发平台”下方的“网站应用开发”
  • 点击导航栏的“注册”注册信息,注册地址
  • 最好使用企业邮箱注册,填写注册信息进行注册
    在这里插入图片描述
  • 开发者认证:注册成功之后点击登录——>开发者资质认证,这需要填写个人身份信息,企业盖章等,认证一次300元,所以我们只有在真实企业开发中才会去做,平时练习是做不了的。
    在这里插入图片描述
  • 审核成功后就可以创建应用了,同样需要企业签字盖章
    在这里插入图片描述
  • 应用中就可以看到AppId和AppSecret,需要配置回调域(就是应用的域名),供微信回调返回用户的授权结果。
    在这里插入图片描述

请求code

  • 向以下链接发送请求
https://open.weixin.qq.com/connect/qrconnect?appid=你的APPID&redirect_uri=http://你的授权回调域&response_type=code&scope=snsapi_login&state=STATE#wechat_redirect 

访问该地址会得到一个微信登录的二维码
在这里插入图片描述

  • 用户扫了二维码之后会选择是否同意授权,如果授权成功会跳转到如下地址,地址中就包含code。
http://你的授权域/?code=获取的code&state=STATE
  • 需要注意的是,如果你的项目域名还没有注册的话,这个地址是访问不了的,我们知道域名解析是先看我们本地的hosts文件(C:\Windows\System32\drivers\etc下),如果hosts中没有的话,会使用DNS(域名解析服务器)进行域名解析后访问,所以我们可以在本地的hosts文件中配置(项目所在地址ip和回调域之间用空格隔开)
    在这里插入图片描述

获取access_token

  • 向以下地址发送请求获得access_token
https://api.weixin.qq.com/sns/oauth2/access_token?appid=你的AppId&secret=你的AppSecret&code=上一步获取到的code&grant_type=authorization_code
  • 得到的结果格式如下,包含access_token
{ 
"access_token":"ACCESS_TOKEN", 
"expires_in":7200, 
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID", 
"scope":"SCOPE",
"unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
}

【注意事项】如果发送请求后的结果是{"errcode":40029,"errmsg":"invalid code"},那就说明token已经过期。

  • access_token默认时间是两小时,如果access_token过期了,需要使用refresh_token进行刷新,可以发送请求到以下地址进行refresh_token。
https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=你的APPID&grant_type=refresh_token&refresh_token=获取access_token时的REFRESH_TOKEN
  • access_token刷新的两种结果
    1)若access_token已超时,那么进行refresh_token会获取一个新的access_token,新的超时时间;
    2)若access_token未超时,那么进行refresh_token不会改变access_token,但超时时间会刷新,相当于续期access_token。
    【注意】refresh_token拥有较长的有效期(30天),当refresh_token失效的后,需要用户重新授权。
    也就是说,不管access_token在是否超时时刷新,都要在refresh_token过期之前,刷新一次,access_token的超时时间都会变成两小时,不同的是,access_token是否还是原来的值。
  • refresh_token正确的返回结果示例如下:
{ 
"access_token":"ACCESS_TOKEN", 
"expires_in":7200, 
"refresh_token":"REFRESH_TOKEN", 
"openid":"OPENID", 
"scope":"SCOPE" 
}
  • 如果是{"errcode":40030,"errmsg":"invalid refresh_token"},说明refresh_token已经过期,需要重新获得access_token和refresh_token。

通过access_token调用用户信息接口

  • access_token和用户的openId都在上一步获取到
https://api.weixin.qq.com/sns/userinfo?access_token=你的ACCESS_TOKEN&openid=用户的OPENID
  • 获取到的正确结果示例,这些信息其实都可以保存到自己平台的用户注册表中。
{
"openid":"OPENID",
"nickname":"NICKNAME",
"sex":1,
"province":"PROVINCE",
"city":"CITY",
"country":"COUNTRY",
"headimgurl": "https://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0",
"privilege":[
"PRIVILEGE1",
"PRIVILEGE2"
],
"unionid": " o6_bmasdasdsad6_2sgVt7hMZOPfL"}

【微信官方提示】如果你有多个应用,并且允许用户在这多个应用中进行数据共享的话,使用的是unionid,unionid是唯一的,也就是一个微信号对应一个unionid,而一个微信号会对应多个openid,openid在不同的应用中是不同的,但是在同一个应用中是相同的(微信通过用户唯一标识,例如微信号和应用id加密后生成openid)。同时,微信提醒,用户在修改头像之后,修改前的url会失效,为了保证url失效后的异常情况,应该保存好微信头像地址。

总结

  • 微信登录其实就5步
    1)注册企业邮箱,填写信息,获取appid,appscret,绑定回调域
    2)通过appid和回调域,请求微信扫码登录界面,用户扫码授权,获取code
    3)通过appid,appsecret和code获取access_token和用户的openid
    4)通过access_token和用户的openid获取用户信息
    5)通过用户信息注册本平台的账号

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/441143.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用AI工具一键生成原创文案的方法

一键生成原创文案对于文案工作者来说它是一种高效率创作文案内容的方法。文案工作者知道创作文案是一件消耗精力和时间的事情,遇到没有创作灵感,想要写一篇高质量的文案内容简直难上加难,因此,互联网上出现了一键生成原创文案的方…

漏洞原理文件上传漏洞

一 文件上传漏洞介绍(理论) 文件上传漏洞是一种常见的web应用程序漏洞,允许攻击者向服务器上传恶意文件。这种漏洞可在没有恰当的安全措施的情况下,将任意类型的文件上传到服务器上,从而可能导致以下安全问题&#xff…

【云原生】docker-compose单机容器编排工具

目录 什么是docker-compose? 管理区别 docker-compose的三大概念 YAML 文件格式及编写注意事项 使用 YAML 时需要注意下面事项: 布尔值类型 字符串类型 一个key有多个值 对象object类型 文本块 锚点 docker-compose配置模板文件常用的字段 …

【electron】安装网络问题处理

目录 场景排查问题排查结论electron 安装失败解决方案 新的问题electron-builder 打包失败处理 场景 在mac上使用electron进行代码开发的时候,无法正常下载与electron、electron-builder相关的依赖 排查问题 是不是因为没有翻墙导致资源无法下载是不是没有设置正…

【网络基础】IP

IP协议报头 4位版本号(version): 指定IP协议的版本, 对于IPv4来说, 就是4.4位头部长度(header length): IP头部的长度是多少个32bit, 也就是 length * 4 的字节数. 4bit表示最大的数字是15, 因此IP头部最大长度是60字节. 8位服务类型(Type Of Service): 3位优先权字段(已经弃用…

Qt/C++音视频开发64-共享解码线程/重复利用解码/极低CPU占用/画面同步/进度同步

一、前言 共享解码线程主要是为了降低CPU占用,重复利用解码,毕竟在一个监控系统中,很可能打开了同一个地址,需要在多个不同的窗口中播放,形成多屏渲染的效果,做到真正的完全的画面同步,在主解码…

如何理解汽车诊断中的,诊断故障代码DTC

DTC(Diagnostic Trouble Code)全称诊断故障代码,是汽车诊断中非常重要的一个分支技术。也可以说是非常重要的组成部分。在uds 诊断和OBD诊断都是不可或缺的组成部分。充分理解DTC对于汽车开发过程也是必不可少的。 本文主要说明UDS下的诊断故障代码,即理…

前端颜料盘??

前端颜料盘&#xff1f;&#xff1f; 一、原生颜料盘 <input type"color" placeholder"选择颜色">二、第三方开源库 Pickr&#xff1a; GitHub: https://github.com/Simonwep/pickr官方网站: https://simonwep.github.io/pickr/Pickr 是一个轻量级…

awk 文本处理工具三剑客

一、什么是awk 1.1 awk 基本概念 awk&#xff08;语言&#xff09;&#xff1a; 读取一行处理一行 是一个功能强大的编辑工具&#xff0c;逐行读取输入文本&#xff0c;默认以空格或tab键作为分隔符作为分隔&#xff0c;并按模式或者条件执行编辑命令。而awk比较倾向于将一行…

第九节HarmonyOS 常用基础组件19-CheckboxGroup

1、描述 多选框群组&#xff0c;用于控制多个选框全选或者全不选状态。 2、接口 CheckboxGroup(options?: {group?: string}) 3、参数 参数名 参数类型 必填 描述 group string 否 群组名称 4、属性 selectAll - boolean - 设置是否全选&#xff0c;默认值&…

Camunda中强大的监听服务

文章目录 简介创建工程JavaDelegateTaskListenerExecutionListener部署发起流程CustomExecutionListener开始节点CustomExecutionListenerCustomJavaDelegateCustomExecutionListenerCustomTaskListener用户节点 ExpressionDelegate Expression流程图 简介 Camunda预览了很多接…

机器学习 | 掌握 K-近邻算法 的理论实现和调优技巧

目录 初识K-近邻算法 距离度量 K值选择 kd树 数据集划分 特征预处理 莺尾花种类预测(实操) 交叉验证与网格搜索 初识K-近邻算法 K-近邻算法&#xff08;K-Nearest Neighbor&#xff0c;KNN&#xff09;是一种基本的分类和回归算法。它的基本思想是通过找出与新对象最近…