微信开放平台扫码登陆

微信开放平台扫码登陆微信授权扫码登陆微信开放平台提供了两种登陆方式,一种是会跳转到一个很丑很丑,只有一个二维码的界面里;另一种则是可以自己定制化的(二维码内嵌到自己网站内的方式)第一种方式的完成非常简单,但是第二种方式,就需要前后台都做一些调整了微信扫码登陆的准备工作这是在开始做相关业务开发之前的一些东西去微信开放平台中注册一个账号,并完成自己的开发者资质认证(这个链接应该点不过去,他们token是明…

大家好,又见面了,我是你们的朋友全栈君。

微信授权扫码登陆

微信开放平台提供了两种登陆方式,一种是会跳转到一个很丑很丑,只有一个二维码的界面里;
另一种则是可以自己定制化的(二维码内嵌到自己网站内的方式)

第一种方式的完成非常简单,但是第二种方式,就需要前后台都做一些调整了

微信扫码登陆的准备工作 这是在开始做相关业务开发之前的一些东西

  1. 微信开放平台中注册一个账号,并完成自己的开发者资质认证(这个链接应该点不过去,他们token是明文存在地址栏里的….),开发者资质认证要花 300块钱,可以绑定10个移动应用程序和10个网站应用上(还有公众号、小程序和第三方平台,这些不是主体内容,不做说明)。
  2. 创建网站应用,这些东西按照流程走就好了
  3. 网站应用创建并审批完之后可以直接查看该应用,里面有AppIDAppSecret,用小本本记好,未来要用的
  4. 接口信息里有一个微信登陆,申请开通即可(没有走第一步的可能会提示要认证,老老实实把第一步内容走了吧,该花的钱…让老板报销去吧)
  5. 授权回调域,这个东西填写自己网站(处理扫码登陆相关业务的)后台域名地址,如果后台没有跑在80端口,则需要在里面指定端口号,只要填写顶级域名即可(arunoido.com:411/)(格式有问题的话,在实际操作可能会提示redirect_uri参数错误)子级域名自动继承

操作流程

官方文档里已经给了一套非(shi)常(fen)明(mo)确(hu)的操作手册了,这里贴上文章链接

整体的代码流程如下(说的有一点点抽象,有一个宏观意识就好,不要太专注于某一个地方的实现,后面会说):

  1. 前台界面生成二维码,同时开启轮询,每隔一段时间(时间你定)去查看用户登陆状况
  2. 用户用微信扫描二维码,进入了该网站的授权界面
  3. 前台收到了确认,向后台发起请求,携带codestate
  4. 后台用code请求微信接口,拿到access_token等一系列信息(我是仅作登陆的,所以拿了一个union_id,如果需要的话,可以用access_token换取一些微信用户的信息,然后就可以干一些猥琐的事情了,比如…..比如把别人的微信头像存到自己的数据库里!),将union_id存入redis中,key使用微信提供的state
  5. 前台在轮询过程中会拿到后台返回的结果,没有绑定的跳转登陆界面绑定,有绑定的直接进入
  6. (绑定流程)前台账号密码发送到后台,后台完成绑定

代码处理

前台处理

  1. 微信提供了一个js文件用于生成二维码以及发送请求并完成界面重定向,使用即可,具体说法在官方文档中请求示例下面 步骤一、二,按照文档填写内容即可(注:redirect_uri参数填写后台微信扫码登陆的接口地址)
  2. 修改登陆界面,在选择扫码登陆之后,判断是否绑定账号,如果绑定账号,则用该账号登陆;如果未绑定账号,则需要登陆账号完成微信号的绑定/注册(注:这里要修改一下,传统的登陆是后台响应前台请求,因为扫码结果的回调是被包装过的(微信登陆的那个js里有相关的请求以及响应代码,但是他们没有解释里面的接口,代码也是压缩过的,不方便查看接口方法,所以我也没有把它做成响应的),所以需要去轮询扫码结果,判断登陆状态)
  3. 添加新的接口请求(状态请求接口)

后台处理

  1. 增加三个接口,微信扫码登陆,微信账号绑定和一个查询响应状况的功能
  2. 微信扫码登陆接口使用GET方法,参数有codestate,返回值为void
  3. code请求union_id,并将union_id存入redis中备用,key使用state参数
  4. 查询响应接口使用POST方法,接受参数为state,用于查询union_id,数据为空说明请求超时,有数据但是在数据库中查询不到则说明用户未绑定,有数据且查询到了用户,可以直接调用后台的登陆接口,然后返回token
  5. 微信账号绑定使用POST方法,参数有stateaccpwd。用于扫码登陆的后半段,用户扫码完成之后输入账号密码,账号密码正确且能查出union_id,完成绑定,并调用账号密码的登陆接口,返回token

我一直都误解了微信扫码登陆模块的流程惹…

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/135294.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 二叉树的先序,中序,后序遍历的序列_二叉树先序遍历和后序遍历正好相反

    二叉树的先序,中序,后序遍历的序列_二叉树先序遍历和后序遍历正好相反    二叉树的遍历主要有三种:(1)先(根)序遍历(根左右)(2)中(根)序遍历(左根右)(3)后(根)序遍历(左右根)举个例子:先(根)序遍历(根左右):ABDHEICFJKG中(根)序遍历(左根右):DHBEIAJFKCG后(根)序遍历(左右根):HDIEBJKFGCA    以后(根)序…

    2022年9月14日
    0
  • 解决:navicat for mysql连接失败[通俗易懂]

    解决:navicat for mysql连接失败[通俗易懂]1、问题描述:在navicatformysql连接mysql8.0.23时,出现如下错误。2、原因:通过百度翻译,发现是由于navicat版本的问题,出现连接失败的原因。这也就是说需要升级navicat版本。通过搜索,发现navicat是收费的,升级将会面临其他不可控的问题。于是需要寻找其他方法。通过查阅资料以及他人的经历分享。我得知了:mysql8之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password

    2022年10月14日
    0
  • python读取excel中的数据[通俗易懂]

    python读取excel中的数据[通俗易懂]importxlrdimportxlwtdefread_excel():#打开文件workBook=xlrd.open_workbook(‘data/HanXueLi_201801.xlsx’);#1.获取sheet的名字#1.1获取所有sheet的名字(list类型)allSheetNames=workBook.sh…

    2022年10月2日
    0
  • window查找被占用端口[通俗易懂]

    window查找被占用端口[通俗易懂]1.cmd查询使用的端口号是否被占用:netstat-aon|findstr”8082″按回车显示占用8088端口对应的程序的PID号;2.根据PID号找到对应的程序:继续输入命令:tasklist|findstr”3850″按回车后显示出占用该端口的程序;3.按快捷键“Ctrl+Shift+Esc”调出Windows任务管理器,根据PID/程序对应名称结束该程序进程即可。4.重新编译项目即可。…

    2022年7月27日
    4
  • 开启新征程[通俗易懂]

    开启新征程[通俗易懂]开启新征程

    2022年4月22日
    38
  • 如何理解无偏估计量_无偏估计量是唯一的吗

    如何理解无偏估计量_无偏估计量是唯一的吗现实中常常有这样的问题,比如,想知道全体女性的身高均值 ,但是没有办法把每个女性都进行测量,只有抽样一些女性来估计全体女性的身高:那么根据抽样数据怎么进行推断?什么样的推断方法可以称为“好”?1无偏性比如说我们采样到的女性身高分别为:那么:是对 不错的一个估计,为什么?因为它是无偏估计。首先,真正的全体女性的身高均值 ,我们是不知道,只有上帝才知道,在图中就画…

    2022年10月22日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号