1.UnionId和OpenId

微信登录最重要的两个返回信息,一个是UnionId,一个是OpenId。两者之间有着必然的联系。

首先,先来理一下微信开放平台的架构。开发微信登录,必须有一个开放平台账号(公众号授权可以不用,后面会讲到)。开放平台下面可以申请多个应用或绑定微信公众号(必须为服务号)。如下图所示

APP登录就得申请移动应用(做了微信支付的都知道怎么回事了哈);电脑端登录就得申请网页应用(必须有域名,还得填表什么的,具体就不说了);微信公众号授权,主要场景是,在微信打开某个链接,然后用户统一授权给公众号,表示可以获取用户的微信信息。

开放平台和各种申请的应用或者公众号的关系,如下图所示(别问我为什么这都还要用图表示)。

可以把这想象成是订单主表和订单明细的关系(一对多)。

这跟OpenId和UnionId有什么关系呢?

先来讲OpenId,一个微信账户对应每一个应用或者微信公众号,有各自的OpenId,用来标记,这个微信账户,和这个应用,或者微信公众号的关系。接着看图会清晰一点(好羞耻,又有不可描述的图了)

PS:图上所示的应用和微信公众号都在同一个开放平台下。但是这个关系即使是应用不在同一个微信开放平台下仍然成立。

接着是UnionId。可以把UnionId看成是微信用户和微信开放平台的关系。再来一个图(请叫我达芬奇,谢谢)。

总结起来就一句话,一个微信和不同应用以OpenId联系,与开放平台下以UnionId联系。

2.微信登录(公众号授权)的流程

流程说起来就那么点。获取Code->用Code获取AccessToken和OpenId(和UnionId)->用AccessToken获取微信用户的微信信息。

需要讲的是,每种应用获取Code的方法不一样。UnionId返回的时候可能没有,APP登录需要根据获取code传入的scope来返回,公众号需要绑定了开放平台之后才能获取UnionId。本人姓懒,所以这个SDK获取的Code都是能拿到UnionId的。

首先是APP,微信有官方的SDK提供,几行代码他们APP前端就能获取到Code。

@RequestMapping("/recieveCode")
public void revieveCode(Code4AccessToken codeObj) throws Exception{WechatLoginClient.getUserInfoByCode4App(codeObj);
}

接着是电脑端扫码登录。流程大概是这样子的。前端请求服务器->服务器重定向到,拼接好微信扫码登录的链接(里面拼接了回调接口)->微信收到用户扫码登录确认的请求,回调服务器的接口->服务器获得Code->接下来用Code为所欲为。代码示例如下:

//以Spring MVC为例
@GetMapping("/wxauth")
public String wxAuth(String state) throws Exception{
//state我称为胎记,最后会讲到。    String authUrl=WechatLoginClient.getPcAuthUrl("域名"+"/recieveCode",state);return "redirect:"+authUrl;
}@RequestMapping("/recieveCode")
public void revieveCode(Code4AccessToken codeObj) throws Exception{//拿到微信头像,昵称什么的。当然还有UnionId和OpenIdWechatUserInfo userInfo = WechatLoginClient.getUserInfoByCode4PC(codeObj);
}

登录的效果如下:

PS:还有一种做法呢是引用微信官方的JS,同样是微信扫码确认之后,回调服务器的切口并返回Code,具体看文档吧。

最后是公众号。流程跟Pc扫码的差不多。前端请求服务器->服务器拼接授权地址返回->前端把授权地址分享到微信->用户点开授权->微信回调服务器接口。也可以不经过服务器返回链接,直接像PC端登录一样,请求服务器的时候重定向。但是鉴于有些特殊的需求。比如下面的Demo是演示分销模块的逻辑(就是特么的邀请码什么的)。

@GetMapping("/wxauth")
@ResponseBody
public String wxAuth(@RequestParam("token")String token) throws Exception{//处理tokenLoginInfo info = service.findByToken(token);    String inviteCode = info.getInviteCode();String authUrl=WechatLoginClient.getOfficialAccAuthUrl("域名"+"/recieveCode",inviteCode);return authUrl;
}@RequestMapping("/recieveCode")
public void revieveCode(Code4AccessToken codeObj) throws Exception{//获取邀请码String inviteCode = codeObj.getState();/**根据邀请码处理自己的业务*///拿到微信头像,昵称什么的。当然还有UnionId和OpenIdWechatUserInfo userInfo = WechatLoginClient.getUserInfoByCode4OffcialAcc(codeObj);
}

3.State参数

接着说说state这个参数。在拼接获取Code链接的时候,会额外传入一个参数叫state。这个参数的值是你怎么传过去给微信,微信怎么传回来给你。我觉得跟胎记很像。就是你不管你的娃去微信那里多久了,你都能根据这个胎记认出,这就是你的娃。分销模块就是个很好的例子。也有的往state里面传入sessionId的,比如扫码登录。

微信登录(微信公众号授权)的开发(详解)相关推荐

  1. 微信开放平台 公众号第三方平台开发 教程一 平台介绍

    教程导航: 微信开放平台 公众号第三方平台开发 教程一 平台介绍 微信开放平台 公众号第三方平台开发 教程二 创建公众号第三方平台 微信开放平台 公众号第三方平台开发 教程三 一键登录授权给第三方平台 ...

  2. 微信公众平台菜单编辑php,Vue.js实现微信公众号菜单编辑器步骤详解(上)

    这次给大家带来Vue.js实现微信公众号菜单编辑器步骤详解(上),Vue.js实现微信公众号菜单编辑器的注意事项有哪些,下面就是实战案例,一起来看一下. 学习一段时间Vue.js,于是想尝试着做一个像 ...

  3. 微信登录 sdk 服务器,微信登录(微信公众号授权)的开发(详解)——两三行代码的事,何必呢...

    新版重构的SDK已经开始在写了,具体的使用方法参考 新版重构的SDK已经开始在写了,具体的使用方法参考 新版重构的SDK已经开始在写了,具体的使用方法参考 新版重构的SDK已经开始在写了,具体的使用方 ...

  4. 微信开放平台公众号第三方平台开发 教程一 平台介绍

        微信现在火,火的如火如荼,给我们这些第三方的开发者带来了不少机会,相信现在有不少人在基于微信的公众平台在做二次开发,接下来会一系列的文章来介绍微信的另一种开发模式- 基于微信开发平台的公众号第 ...

  5. 微信第三方平台公众号授权流程1—第三方平台概述概述

    一.概述 公众平台第三方平台是为了让公众号或小程序运营者,在面向垂直行业需求时,可以一键授权给第三方平台(并且可以同时授权给多家第三方),通过第三方平台来完成业务,开放给所有通过开发者资质认证后的开发 ...

  6. 微信开放平台 公众号第三方平台开发 教程五 代公众号发起网页授权源码

     更多微信技术交流,请加QQ群:289709451.287090836    一.代公众号发起网页授权接口的SDK     已经更新了SG.Weixin.Open.SDK的代码,新增了代公众号发起网页 ...

  7. 微信开放平台 公众号第三方平台开发 教程三 一键登录授权给第三方平台

     更多微信技术交流,请加QQ群:289709451.287090836    公众号第三方平台的开放,是为了让公众号运营者,在面向垂直行业需求时,可以一键登录授权给第三方的公众号运营平台,通过第三方开 ...

  8. vue开发项目微信公众号授权支付开发

    一.注册微信公众号服务号并填写企业信息(个人订阅号没有开发微信支付的权限) 链接: https://mp.weixin.qq.com/ 二.在微信公众号内进行微信认证(3-5个工作日) 三.在微信公众 ...

  9. 微信开放平台 公众号第三方平台开发 教程四 代公众号调用接口的SDK和demo

     更多微信技术交流,请加QQ群:289709451.287090836     前几章中我讲解了微信开发平台提供第三方平台的好处,和使用流程,如果你看了我的文章相信你对开放平台有了初步的了解,但是在实 ...

最新文章

  1. 聊聊恺明大神MAE的成功之处!
  2. miui12 android版本,miui12基于安卓几版本开发的?miui12是安卓11吗
  3. linux5.4支持中文及中文输入法
  4. 【UCHome二次开发】全局变量
  5. valgrind 常见错误提示信息
  6. python二维数组操作_Python二维数组应用与操作
  7. 【干货】31篇关于深度学习必读论文汇总(附论文下载地址)
  8. sql domain credentail
  9. 生信技能树课程记录笔记(一)20220523
  10. 统计学(贾俊平《第七版》)知识总结
  11. FPGA图像处理基础----直方图均衡化
  12. 最喜欢的科技资讯类英文网站
  13. 利用matlab的newff构建BP神经网络来实现数据的逼近和拟合
  14. [数据结构]数据结构简介和顺序表
  15. 图像相似度比较算法总结
  16. ClassIn 退出专注学习模式 关闭专注学习模式
  17. MYSQL:2022
  18. docker集群管理之swarm mode
  19. 前端开发入门教程-HTML标签(上)
  20. oracle查询的默认排序,oracle 默认排序及认知

热门文章

  1. 【ESP 保姆级教程 预告】疯狂Node.js服务器篇 ——案例:ESP8266 + DS18B20温度传感器 +NodeJs本地服务+ MySQL数据库
  2. 凯撒密码,可输入任意长度字符串进行转换
  3. 电子电路设计需要考虑哪些方面
  4. Lua 公历转农历以及24节气计算
  5. python百度翻译api申请网页版_python3调用百度翻译api接口实现全过程
  6. 有哪些好用的抠图网站?这种方法超好用
  7. 豆瓣 API ( 解决104问题 )
  8. 论文笔记:BPR-Bayesian Personalized Ranking from Implicit Feedback | 推荐系统BPR算法分析
  9. 汇编语言rep的用法
  10. 视觉中国图片编码_学习编码第14天的应用视觉设计第4部分