在公众号授权托管给第三方平台后,第三方平台可以根据本文档相关说明,代替授权公众号发起网页授权。关于OAuth2.0的详细介绍,可以参考OAuth2.0协议标准 作为第三方平台开发商,需要拥有自己的appid以及secret(在创建第三方平台并获得审核成功后可以获取),以及确保授权的公众号具备授权作用域的权限,以及用于回调的域名。 授权流程微信目前支持Authorization code授权模式,主要流程分为两步: 1. 获取code 2. 通过code换取accesstoken
流程图: 
第一步:请求CODE请求方法在确保微信公众账号拥有授权作用域(scope参数)的权限的前提下(一般而言,已微信认证的服务号拥有snsapi_base和snsapi_userinfo),使用微信客户端打开以下链接(严格按照以下格式,包括顺序和大小写,并请将参数替换为实际内容): http://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参数 第二步:通过code换取access_token请求方法获取第一步的code后,请求以下链接获取access_token: http://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 |
返回说明正确的返回: { "access_token":"ACCESS_TOKEN", "expires_in":7200, "refresh_token":"REFRESH_TOKEN", "openid":"OPENID", "scope":"SCOPE" }
参数 |
---|
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: http://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 |
正确的返回: { "access_token":"ACCESS_TOKEN", "expires_in":7200, "refresh_token":"REFRESH_TOKEN", "openid":"OPENID", "scope":"SCOPE" }
参数 |
---|
access_token | 接口调用凭证 | expires_in | access_token接口调用凭证超时时间,单位(秒) | refresh_token | 用户刷新access_token | openid | 授权用户唯一标识 | scope | 用户授权的作用域,使用逗号(,)分隔 |
错误返回样例:: {"errcode":40029,"errmsg":"invalid code"}
|