文章目录
  1. 1. H5授权–静默授权
    1. 1.1. 一.H5静默授权只获取用户id
      1. 1.1.1. 步骤
        1. 1.1.1.1. 1. 构造url获取code
        2. 1.1.1.2. 2. 根据code获取accesstoken及openid
        3. 1.1.1.3. 请求参数
        4. 1.1.1.4. 错误返回串
  2. 2. H5授权–显式授权
    1. 2.1. 步骤
      1. 2.1.1. 1. 请求CODE
        1. 2.1.1.1. 参数说明
      2. 2.1.2. 返回说明
      3. 2.1.3. 举例子
    2. 2.2. 2.基于code获取access_token
      1. 2.2.1. 参数说明
      2. 2.2.2. 返回说明
    3. 2.3. 二.获取用户基本信息(UnionID机制)
      1. 2.3.1. 请求说明
      2. 2.3.2. 参数说明
      3. 2.3.3. 返回说明
      4. 2.3.4. 建议
      5. 2.3.5. 调用频率限制
      6. 2.3.6. 原文档链接
    4. 2.4. 3.通过access_token调用接口
    5. 2.5. 附录
      1. 2.5.1. 接口原文档

H5授权–静默授权

一.H5静默授权只获取用户id

通过code获取access_token的接口。

步骤

1. 构造url获取code

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

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

2. 根据code获取accesstoken及openid

http请求方式: GET
https://api.weixin.qq.com/sns/oauth2/access_token?
appid=APPID&
secret=SECRET&
code=CODE&
grant_type=authorization_code

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

请求参数

参数是否必须说明
appid应用唯一标识,在微信开放平台提交应用审核通过后获得
secret应用密钥AppSecret,在微信开放平台提交应用审核通过后获得
code填写第一步获取的code参数
grant_type填authorization_code


#### 成功返回串

{
“access_token”:”ACCESS_TOKEN”,
“expires_in”:7200,
“refresh_token”:”REFRESH_TOKEN”,
“openid”:”OPENID”,
“scope”:”SCOPE”
}

参数说明
access_token接口调用凭证
expires_inaccess_token接口调用凭证超时时间,单位(秒)
refresh_token用户刷新access_token
openid授权用户唯一标识
scope用户授权的作用域,使用逗号(,)分隔

错误返回串

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

refresh_token使用参考文档

H5授权–显式授权

网站应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统。
在进行微信OAuth2.在进行微信OAuth2.0授权登录接入之前,在微信开放平台注册开发者帐号,并拥有一个已审核通过的网站应用,并获得相应的AppID和AppSecret,申请微信登录且通过审核后,可开始接入流程。

微信OAuth2.0授权登录目前支持authorization_code模式,适用于拥有server端的应用授权。该模式整体流程为:

H5Oauth2.png

步骤

1. 请求CODE

第三方使用网站应用授权登录前请注意已获取相应网页授权作用域(scope=snsapi_login),则可以通过在PC端打开以下链接:

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

若提示“该链接无法访问”,请检查参数是否填写错误,如redirect_uri的域名与审核时填写的授权域名不一致或scope不为snsapi_login。

参数说明

参数是否必须说明
appid应用唯一标识
redirect_uri请使用urlEncode对链接进行处理
response_type填code
scope应用授权作用域,拥有多个作用域用逗号(,)分隔,网页应用目前仅填写snsapi_login即
state用于保持请求和回调的状态,授权请求后原样带回给第三方。该参数可用于防止csrf攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数加session进行校验

返回说明

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

redirect_uri?code=CODE&state=STATE

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

redirect_uri?state=STATE

举例子

  1. 登录一号店网站应用

    https://passport.yhd.com/wechat/login.do
    
  2. 打开后,一号店会生成state参数,跳转到

    https://open.weixin.qq.com/connect/qrconnect?
    appid=wxbdc5610cc59c1631&
    redirect_uri=https%3A%2F%2Fpassport.yhd.com%2Fwechat%2Fcallback.do&
    response_type=code&
    scope=snsapi_login&
    state=3d6be0a4035d839573b04816624a415e#wechat_redirect
    
  3. 微信用户使用微信扫描二维码并且确认登录后,PC端会跳转到

    https://passport.yhd.com/wechat/callback.do?code=CODE&
    state=3d6be0a4035d839573b04816624a415e
    

2.基于code获取access_token

通过code获取access_token

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

参数说明

参数是否必须说明
appid应用唯一标识,在微信开放平台提交应用审核通过后获得
secret应用密钥AppSecret,在微信开放平台提交应用审核通过后获得
code填写第一步获取的code参数
grant_type填authorization_code

返回说明

正确的返回:

{ 
    "access_token":"ACCESS_TOKEN", 
    "expires_in":7200, 
    "refresh_token":"REFRESH_TOKEN",
    "openid":"OPENID", 
    "scope":"SCOPE",
    "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
}

参数说明

参数说明
access_token接口调用凭证
expires_inaccess_token接口调用凭证超时时间,单位(秒)
refresh_token用户刷新access_token
openid授权用户唯一标识
scope用户授权的作用域,使用逗号(,)分隔
unionid当且仅当该网站应用已获得该用户的userinfo授权时,才会出现该字段。

错误返回样例

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

关于刷新access_token相关,查看 网站应用微信登录开发指南

二.获取用户基本信息(UnionID机制)

基于第一步获取到的用户openid,在本步骤调取用户基本信息

此接口用于获取用户个人信息。开发者可通过OpenID来获取用户基本信息。特别需要注意的是,如果开发者拥有多个移动应用、网站应用和公众帐号,可通过获取用户基本信息中的unionid来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号,用户的unionid是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,unionid是相同的。

请注意,在用户修改微信头像后,旧的微信头像URL将会失效,因此开发者应该自己在获取用户信息后,将头像图片保存下来,避免微信头像URL失效后的异常情况。

请求说明

http请求方式: GET
https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID

参数说明

参数是否必须说明
access_token调用凭证
openid普通用户的标识,对当前开发者帐号唯一
lang国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语,默认为zh-CN

返回说明

正确的Json返回结果:

{
    "openid":"OPENID",
    "nickname":"NICKNAME",
    "sex":1,
    "province":"PROVINCE",
    "city":"CITY",
    "country":"COUNTRY",
    "headimgurl": "http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0",
    "privilege":[
    "PRIVILEGE1",
    "PRIVILEGE2"
    ],
    "unionid": " o6_bmasdasdsad6_2sgVt7hMZOPfL"
}
参数说明
openid普通用户的标识,对当前开发者帐号唯一
nickname普通用户昵称
sex普通用户性别,1为男性,2为女性
province普通用户个人资料填写的省份
city普通用户个人资料填写的城市
country国家,如中国为CN
headimgurl用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空
privilege用户特权信息,json数组,如微信沃卡用户为(chinaunicom)
unionid用户统一标识。针对一个微信开放平台帐号下的应用,同一用户的unionid是唯一的。

错误的Json返回示例:

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

建议

开发者最好保存用户unionID信息,以便以后在不同应用中进行用户信息互通。

调用频率限制

接口名频率限制
通过code换取access_token1万/分钟
刷新access_token5万/分钟
获取用户基本信息5万/分钟

获取access_token后,进行接口调用,有以下前提:

  1. access_token有效且未超时;
  2. 微信用户已授权给第三方应用帐号相应接口作用域(scope)。
    对于接口作用域(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获取用户个人信息

原文档链接

静默授权文档

3.通过access_token调用接口

获取access_token后,进行接口调用,有以下前提:

1. access_token有效且未超时;
2. 微信用户已授权给第三方应用帐号相应接口作用域(scope)。

对于接口作用域(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获取用户个人信息

附录

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

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

接口原文档

微信显式授权

文章目录
  1. 1. H5授权–静默授权
    1. 1.1. 一.H5静默授权只获取用户id
      1. 1.1.1. 步骤
        1. 1.1.1.1. 1. 构造url获取code
        2. 1.1.1.2. 2. 根据code获取accesstoken及openid
        3. 1.1.1.3. 请求参数
        4. 1.1.1.4. 错误返回串
  2. 2. H5授权–显式授权
    1. 2.1. 步骤
      1. 2.1.1. 1. 请求CODE
        1. 2.1.1.1. 参数说明
      2. 2.1.2. 返回说明
      3. 2.1.3. 举例子
    2. 2.2. 2.基于code获取access_token
      1. 2.2.1. 参数说明
      2. 2.2.2. 返回说明
    3. 2.3. 二.获取用户基本信息(UnionID机制)
      1. 2.3.1. 请求说明
      2. 2.3.2. 参数说明
      3. 2.3.3. 返回说明
      4. 2.3.4. 建议
      5. 2.3.5. 调用频率限制
      6. 2.3.6. 原文档链接
    4. 2.4. 3.通过access_token调用接口
    5. 2.5. 附录
      1. 2.5.1. 接口原文档
Fork me on GitHub