链接:https://blog.csdn.net/ASZJBGD/article/details/82838356

主要流程分为两步:

1.获取code

2.通过code换取accesstoken

流程图:

第一步:请求CODE

请求方法

在确保微信公众账号拥有授权作用域(scope参数)的权限的前提下(一般而言,已微信认证的服务号拥有snsapi_base和snsapi_userinfo),使用微信客户端打开以下链接(严格按照以下格式,包括顺序和大小写,并请将参数替换为实际内容):

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

若提示“该链接无法访问”,请检查参数是否填写错误,是否拥有scope参数对应的授权作用域权限。

参数说明

参数 是否必须 说明
appid 公众号的appid
redirect_uri 重定向地址,需要urlencode,这里填写的应是服务开发方的回调地址
response_type 填code
scope 授权作用域,拥有多个作用域用逗号(,)分隔
state 重定向后会带上state参数,开发者可以填写任意参数值,最多128字节
component_appid 服务方的appid,在申请创建公众号服务成功后,可在公众号服务详情页找到

返回说明

用户允许授权后,将会重定向到redirect_uri的网址上,并且带上code, state以及appid

redirect_uri?code=CODE&state=STATE&appid=APPID

若用户禁止授权,则重定向后不会带上code参数,仅会带上state参数

redirect_uri?state=STATE

第二步:通过code换取access_token

请求方法

获取第一步的code后,请求以下链接获取access_token:

https://api.weixin.qq.com/sns/oauth2/component/access_token?appid=APPID&code=CODE&grant_type=authorization_code&component_appid=COMPONENT_APPID&component_access_token=COMPONENT_ACCESS_TOKEN

需要注意的是,由于安全方面的考虑,对访问该链接的客户端有IP白名单的要求。

参数说明

参数 是否必须 说明
appid 公众号的appid
code 填写第一步获取的code参数
grant_type 填authorization_code
component_appid 服务开发方的appid
component_access_token 服务开发方的access_token

返回说明

正确的返回:

  1.  
    {
  2.  
    "access_token":"ACCESS_TOKEN",
  3.  
    "expires_in":7200,
  4.  
    "refresh_token":"REFRESH_TOKEN",
  5.  
    "openid":"OPENID",
  6.  
    "scope":"SCOPE"
  7.  
    }
参数 说明
access_token 接口调用凭证
expires_in access_token接口调用凭证超时时间,单位(秒)
refresh_token 用户刷新access_token
openid 授权用户唯一标识
scope 用户授权的作用域,使用逗号(,)分隔

错误返回样例:

{"errcode":40029,"errmsg":"invalid code"}

第三步:刷新access_token(如果需要)

由于access_token拥有较短的有效期,当access_token超时后,可以使用refresh_token进行刷新,refresh_token拥有较长的有效期(30天),当refresh_token失效的后,需要用户重新授权。

请求方法

获取第一步的code后,请求以下链接获取access_token:

https://api.weixin.qq.com/sns/oauth2/component/refresh_token?appid=APPID&grant_type=refresh_token&component_appid=COMPONENT_APPID&component_access_token=COMPONENT_ACCESS_TOKEN&refresh_token=REFRESH_TOKEN

参数说明

参数 是否必须 说明
appid 公众号的appid
grant_type 填refresh_token
refresh_token 填写通过access_token获取到的refresh_token参数
component_appid 服务开发商的appid
component_access_token 服务开发方的access_token

返回说明

正确的返回:

  1.  
    {
  2.  
    "access_token":"ACCESS_TOKEN",
  3.  
    "expires_in":7200,
  4.  
    "refresh_token":"REFRESH_TOKEN",
  5.  
    "openid":"OPENID",
  6.  
    "scope":"SCOPE"
  7.  
    }
参数 说明
access_token 接口调用凭证
expires_in access_token接口调用凭证超时时间,单位(秒)
refresh_token 用户刷新access_token
openid 授权用户唯一标识
scope 用户授权的作用域,使用逗号(,)分隔

错误返回样例::

{"errcode":40029,"errmsg":"invalid code"}

第四步:通过网页授权access_token获取用户基本信息(需授权作用域为snsapi_userinfo)

如果网页授权作用域为snsapi_userinfo,则此时开发者可以通过access_token和openid拉取用户信息了。

请求方法

http:GET(请使用https协议) https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

参数说明

参数 描述
access_token 网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同
openid 用户的唯一标识
lang 返回国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语

返回说明

正确时返回的JSON数据包如下:

  1.  
    {
  2.  
    "openid":" OPENID",
  3.  
    " nickname": NICKNAME,
  4.  
    "sex":"1",
  5.  
    "province":"PROVINCE"
  6.  
    "city":"CITY",
  7.  
    "country":"COUNTRY",
  8.  
    "headimgurl": "http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46",
  9.  
    "privilege":[ "PRIVILEGE1" "PRIVILEGE2" ],
  10.  
    "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
  11.  
    }
参数 描述
openid 用户的唯一标识
nickname 用户昵称
sex 用户的性别,值为1时是男性,值为2时是女性,值为0时是未知
province 用户个人资料填写的省份
city 普通用户个人资料填写的城市
country 国家,如中国为CN
headimgurl 用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空。若用户更换头像,原有头像URL将失效。
privilege 用户特权信息,json 数组,如微信沃卡用户为(chinaunicom)
unionid 只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段。详见: 获取用户个人信息(UnionID机制

错误时微信会返回JSON数据包如下(示例为openid无效):

{"errcode":40003,"errmsg":" invalid openid "}

微信支持的Authorization code授权模式(公众号开发)(开放平台资料中心中的代公众号发起网页授权)的更多相关文章

  1. 微信第三方平台代公众号发起网页授权 48001 api unauthorized 问题

    https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&gr ...

  2. IdentityServer4专题之七:Authorization Code认证模式

    (1)identityserver4授权服务器端 public static class Config { public static IEnumerable<IdentityResource& ...

  3. [置顶] 使用严苛模式打破Android4.0以上平台应用中UI主线程的“独断专行”

    传送门 ☞ 轮子的专栏 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229 已经有好一段时间没有关注Android应用方面的事情了:)最近单位来了一个Androi ...

  4. 微信公众平台OAuth2.0网页授权

    微信公众平台最近新推出微信认证,认证后可以获得高级接口权限,其中一个是OAuth2.0网页授权,很多朋友在使用这个的时候失败了或者无法理解其内容,希望我出个教程详细讲解一下,于是便有了这篇文章. 一. ...

  5. 微信公众平台开发(71)OAuth2.0网页授权

    微信公众平台开发 OAuth2.0网页授权认证 网页授权获取用户基本信息 作者:方倍工作室 微信公众平台最近新推出微信认证,认证后可以获得高级接口权限,其中一个是OAuth2.0网页授权,很多朋友在使 ...

  6. ***微信公众平台开发: 获取用户基本信息+OAuth2.0网页授权

    本文介绍如何获得微信公众平台关注用户的基本信息,包括昵称.头像.性别.国家.省份.城市.语言.本文的方法将囊括订阅号和服务号以及自定义菜单各种场景,无论是否有高级接口权限,都有办法来获得用户基本信息, ...

  7. 黄聪:微信公众平台开发OAuth2.0网页授权(转)

    微信公众平台开发 OAuth2.0网页授权认证 网页授权获取用户基本信息 作者:方倍工作室 微信公众平台最近新推出微信认证,认证后可以获得高级接口权限,其中一个是OAuth2.0网页授权,很多朋友在使 ...

  8. 微信公众平台开发(71)OAuth2.0网页授权-摘抄

      微信公众平台开发 OAuth2.0网页授权认证 网页授权获取用户基本信息 作者:方倍工作室 微信公众平台最近新推出微信认证,认证后可以获得高级接口权限,其中一个是OAuth2.0网页授权,很多朋友 ...

  9. Java微信公众平台开发之OAuth2.0网页授权

    根据官方文档点击查看在微信公众号请求用户网页授权之前,开发者需要先到公众平台官网中的"开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息"的配置选项中,修 ...

随机推荐

  1. java上传附件含有%处理或url含有%(URLDecoder: Illegal hex characters in escape (%) pattern - For input string)

    在附件名称中含有%的时候,上传附件进行url编码解析的时候会出错,抛出异常: Exception in thread "main" java.lang.IllegalArgumen ...

  2. QT中视图(setViewport)和窗口(setWindow) 小总结

    参考博客: https://blog.csdn.net/weixin_39583140/article/details/92798127 https://blog.csdn.net/u01244271 ...

  3. SpringMvc中乱码问题的解决

    一:如果是前台传递的数据有问题. 在tomcat的service.xml中加上: URIEncoding="UTF-8" <Connector URIEncoding=&qu ...

  4. umeditor word文档图片粘贴-自动上传到服务器

    图片的复制无非有两种方法,一种是图片直接上传到服务器,另外一种转换成二进制流的base64码 目前限chrome浏览器使用,但是项目要求需要支持所有的浏览器,包括Windows和macOS系统.没有办 ...

  5. HDU 6121 Build a tree —— 2017 Multi-University Training 7

    HazelFan wants to build a rooted tree. The tree has nn nodes labeled 0 to n−1, and the father of the ...

  6. [LightOJ1070]Algebraic Problem

    题目:Algebraic Problem 链接:https://vjudge.net/problem/LightOJ-1070 分析: 1)$ a^n+b^n = ( a^{n-1}+b^{n-1} ...

  7. css > 的写法 html

    .userInfo-view .info .name::after { content: " "; display: inline-block; height: 12rpx; wi ...

  8. XX-net https://github.com/XX-net/XX-Net

    XX-net https://github.com/XX-net/XX-Net

  9. Python 进阶_闭包 & 装饰器

    目录 目录 闭包 函数的实质和属性 闭包有什么好处 小结 装饰器 更加深入的看看装饰器的执行过程 带参数的装饰器 装饰器的叠加 小结 装饰器能解决什么问题 小结 闭包 Closure: 如果内层函数引 ...

  10. dex2jar反编译大文件内存溢出的问题

    @echo off REM better invocation scripts for windows from lanchon, release in public domain. thanks! ...