Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

微信网页授权 #17

Open
TENCHIANG opened this issue Jul 1, 2019 · 0 comments
Open

微信网页授权 #17

TENCHIANG opened this issue Jul 1, 2019 · 0 comments

Comments

@TENCHIANG
Copy link
Owner

TENCHIANG commented Jul 1, 2019

什么是微信网页

在微信中打开的第三方网页

什么是微信网页授权

公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑
网页授权跟Oauth2.0、JSAPI、JSSDK、公众号是相关的

为什么要用网页授权

  1. 在微信网页上获取用户信息实现微信登陆
  2. 在微信网页上微信支付(OpenID是微信JSAPI支付的必传参数)

网页授权的要求

  • 只有认证过的订阅号/服务号,才能读取关注粉丝的用户资料
  • 只有认证过的服务号,才能通过网页授权读取非关注用户资料

可以看到, 只有认证过的服务号才能够通过网页授权获取用户信息, 甚至这个用户无需关注这个服务号

网页授权在哪里配置

要先去公众号设置回调域名, 注意域名不需要加协议头
公众号 - 开发 - 接口权限 - 网页服务 - 网页账号 - 网页授权获取用户基本信息 - 授权回调域名

网页授权分两种scope

scope就是用途和范围
1、snsapi_base
用户授权页面无需用户确认, 只能获取到OpenID
2、snsapi_userinfo
用户授权页面需要用户确认

网页授权流程

  1. 引导用户进入授权页面
    用户同意授权,获取code
  2. 通过code换取网页授权access_token+OpenID
    此时snsapi_base流程已经结束
  3. 通过access_token+OpenID拿到用户信息
    支持UnionID机制、因为小程序、公众号里面的OpenID其实是各不相同的, appid不同,则获取到的openid就不同

网页授权流程详细版

  1. 用户在微信中打开你的网址 A
  2. 你在服务器里面偷换下给他重定向到网址 B
  3. 用户眼睁睁看着 B 网址展现一个是否同意授权的按钮
  4. 用户闭眼按下去,网址 B 跳到了 网址 C
  5. 你在服务器里面拿到了网址 C 上面的 code
  6. 你在服务器里面拿着 code 和 公众号 id/secret 拼了个网址 D
  7. 你在服务器里面请求网址 D 要回来 access_token 和 openID
  8. 你在服务器里面拿着 OpenID 去请求用户资料

网页授权注意事项

网页授权access_token基础支持access_token不是一个东西

  1. 获取基础支持access_token有次数限制, 所以需要缓存
  2. 获取网页授权access_token没有次数限制, 可以不缓存
    但是如果考虑到多进程, 那可能就需要缓存了

网页授权页面不管用户同不同意都会跳到redirect_uri页面

  1. 同意, code为CODE
  2. 拒绝, code为authdeny

网页授权回调地址redirect_uri

网页授权地址不能加协议号, redirect_uri一定要加协议号否则会报错10003 redirect_uri域名与后台配置不一致

生成授权页面地址

注意微信会对授权链接做正则强匹配校验,如果链接的参数顺序不对,授权页面将无法正常访问

参数说明

参数 是否必须 说明
appid 公众号的唯一标识
redirect_uri 授权后重定向的回调链接地址, 请使用 urlEncode 对链接进行处理
response_type 返回类型,请填写code
scope 应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且, 即使在未关注的情况下,只要用户授权,也能获取其信息 )
state 重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节
#wechat_redirect 无论直接打开还是做页面302重定向时候,必须带此参数

格式

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

示例

对于接口作用域(scope),能调用的接口有以下

授权作用域(scope) 接口 接口说明
snsapi_base /sns/oauth2/access_token 通过code换取access_token、refresh_token和已授权scope
snsapi_base /sns/oauth2/refresh_token 刷新或续期access_token使用
snsapi_base /sns/auth 检查access_token有效性
snsapi_userinfo /sns/userinfo 获取用户个人信息

F.A.Q

什么是授权临时票据(code)?

答:第三方通过code进行获取access_token的时候需要用到,code的超时时间为10分钟,一个code只能成功换取一次access_token即失效。code的临时性和一次保障了微信授权登录的安全性。第三方可通过使用https和state参数,进一步加强自身授权登录的安全性。

什么是授权作用域(scope)?

答:授权作用域(scope)代表用户授权给第三方的接口权限,第三方应用需要向微信开放平台申请使用相应scope的权限后,使用文档所述方式让用户进行授权,经过用户授权,获取到相应access_token后方可对接口进行调用。

注意事项

一定要严格看清楚官方文档!!! 这一点很重要, 比如

  • 微信网页授权用的是公众号appid secret
  • 二维码登陆用的是开放平台appid secret
    开放平台里面, 显示创建的, 说明会创建新的appid和secret, 显示绑定的, 只会绑定已经有的appid和secret

参考

一锅端掉微信公众号-小程序的用户资料获取
三十六章 微信网页授权笔记
微信网页授权
网站应用微信登录开发指南

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant