接口文档SDK业务专题开发者工具

授权认证

本节将为您介绍如何进行 Marketing API 的授权认证。

Marketing API目前支持基于QQ和微信两种账号进行授权鉴权。所有接口均通过请求参数中传递的 access_token(授权令牌)来进行身份认证和鉴权,系统会在校验 access_token有效、接口调用配额未用完、接口调用频次未超限3个条件符合后接受此次请求进行具体业务处理并做出响应。

1. 如何通过 OAuth 2.0 获得 access_token

客户需要通过您的应用进行推广操作时,您的应用需要先引导客户完成至少一次 OAuth 2.0 认证操作,以便获得调用接口操作的客户的推广帐号所必须的 access_token 。Marketing API的 OAuth 2.0 遵循业界通用的规范和流程,完成 OAuth 2.0 认证(当前只支持 server-side 模式)需要完成以下步骤:

  • A、引导客户进入 OAuth 2.0 登录界面;
  • B、客户用推广帐号登录(基于QQ号的使用开户QQ或自理管理员QQ,基于微信号的使用微信公众号或代理商管理员对应的微信账号扫码),;
  • C、登录成功并确认授权后腾讯广告将向您的应用程序返回一个授权码(Authorization Code);
  • D、应用程序调用接口用授权码(Authorization Code)获得 access_token,同时获得一个用于刷新 access_token 的 refresh_token;
  • E、在 access_token 过期后,使用 refresh_token 获得新的 access_token(可选)。

详细描述如下:

步骤1:引导客户完成OAuth 2.0认证获得authorization_code

获得 authorization_code 需要引导客户完成 OAuth 2.0 的认证。调用 OAuth 2.0 授权页面的URL形如:
https://developers.e.qq.com/oauth/authorize?client_id=123456&redirect_uri=https%3a%2f%2fwww.example.com%3fpara1%3da%26para2%3db&state=&scope=ADS_MANAGEMENT&account_type=ACCOUNT_TYPE_QQ

其中:

  • client_id:开发者创建的应用程序的唯一标识id,必填,可通过【应用程序管理页面】查看;
  • redirect_uri:回调地址,由开发者自行提供和定义(地址主域需与开发者创建应用程序时登记的回调主域一致),用于跳转并接收回调信息,必填,该字段需要做UrlEncode,确保后续跳转正常;
  • state:开发者自定义参数,可用于验证请求有效性或者传递其他自定义信息,回调的时候会原样带回,可选;
  • scope:授权的能力范围,可选,不传时表示授权范围为当前应用程序所拥有的所有全部权限;
  • account_type:授权用的账号类型,可选,包括QQ号和微信号,不传时默认为QQ号

OAuth 2.0 授权页面如下图所示:

其中页面右侧为应用程序信息,左侧为请求授权的帐号信息,客户可以切换选择是用QQ号还是用微信号,推荐开发者直接在引导客户进入授权页时通过account_type指定要授权的账号类型。

右侧显示的是应用程序的logo、名称、以及可授权的权限组分类。

  • 其中logo、名称是创建应用程序时开发者自行上传的信息,可授权的权限组分类是根据开发者调用oauth/authorize接口同步的scope生成的权限组信息;
  • 授权客户可通过列表选择授权给开发者的操作权限。

左侧是提供给授权客户进行身份验证的入口。如客户同意授权,需要登录其对应的 QQ 帐号或者用微信号扫码,并点击同意授权。
登录后,页面将会显示请求授权的 账号信息。

值得注意的是,请求授权的 QQ 帐号需要是商务管家、代理商或直客广告主的开户 QQ,或者是子客户的自理管理 QQ,微信账号需要是微信广告账号对应的公众号管理员微信,或者微信广告代理商的管理员微信,否则将会授权失败。

不同类型的帐号在同意授权后,应用可操作的推广帐号不同,具体规则如下:

  • 如果请求授权的是 QQ代理商帐号,代理商用 开户 QQ 登录并同意授权,完成 OAuth 2.0 后应用获得 access_token,该应用会获得 当前代理商所有子客户的推广帐号 的操作权限;
  • 如果请求授权的是 QQ直客帐号,客户用 开户 QQ 登录并同意授权,完成 OAuth 2.0 后应用获得 access_token,该用户会获得 当前客户推广帐号 的操作权限;
  • 如果请求授权的是 QQ商务管家帐号,客户用 开户 QQ 登录并同意授权,完成 OAuth 2.0 后应用获得 access_token,该用户会获得 当前商务管家账号下推广帐号 的操作权限;
  • 如果请求授权的是 QQ代理商子客户,用子客户的 自理管理员 QQ(由代理商分配)登录并同意授权,完成 OAuth 2.0 后应用获得 access_token,该应用会获得 当前子客户推广帐号 的操作权限。
  • 如果请求授权的是 微信广告代理商帐号,代理商用 管理员微信 扫码并同意授权,完成 OAuth 2.0 后应用获得 access_token,该应用会获得 当前代理商及所有代理客户的推广帐号 的操作权限;
  • 如果请求授权的是 微信广告主帐号,客户用 微信公众号对应的管理员微信 扫码并同意授权,完成 OAuth 2.0 后应用获得 access_token,该用户会获得 当前客户推广帐号 的操作权限;

当引导客户在上述登录界面完成登录身份验证后,系统会携带 authorization_code(有效期5分钟)和state两个参数在浏览器端发出GET请求,形如: http://www.example.com/response?authorization_code=6a6b6c6d&state=112233

当上述请求完成或请求链接超出3秒时,系统会自动跳转到刚才定义的回调地址中。您的应用程序在收到上述返回后,应当在 authorization_code 有效期内,利用 authorization_code 获得 access_token(详见下一步),并在跳转后的页面对客户给出相应的提示或跳转指引。

步骤2:使用 authorization_code 获得 access_token 和 refresh_token

用 authorization_code 获得 access_token 和 refresh_token 的接口地址为 https://api.e.qq.com/oauth/token,接口输入参数如下表所示:

名称 类型 描述
client_id
integer 应用 id,在开发者官网创建应用后获得,可通过 [应用程序管理页面] 查看
client_secret
string 应用 secret,在开发者官网创建应用后获得,可通过 [应用程序管理页面] 查看
字段长度最小 1 字节,长度最大 256 字节
grant_type
string 请求的类型,可选值: authorization_code (授权码方式获取 token )、 refresh_token (刷新 token )
字段长度最小 1 字节,长度最大 64 字节
authorization_code
string OAuth 认证 code,可通过获取 Authorization Code 接口获取,当 grant_type=authorization_code 时必填
字段长度最小 1 字节,长度最大 64 字节
refresh_token
string 应用 refresh token,当 grant_type=refresh_token 时必填
字段长度最小 1 字节,长度最大 256 字节
redirect_uri
string 应用回调地址,当 grant_type=authorization_code 时, redirect_uri 为必传参数,仅支持 http 和 https,不支持指定端口号,且传入的地址需要与获取 authorization_code 时,传入的回调地址保持一致
字段长度最小 1 字节,长度最大 1024 字节

请求示例:

curl -G 'https://api.e.qq.com/oauth/token' \
    -d 'client_id=<CLIENT_ID>' \
    -d 'client_secret=<CLIENT_SECRET>' \
    -d 'grant_type=authorization_code' \ 
    -d 'authorization_code=<AUTHORIZATION_CODE>' \
    -d 'redirect_uri=https://www.example.com'

返回示例:

{
    code: 0,
    message: ,
    data: {
        access_token: 228bd56b7ee039540953352f766b40d31651487e,
        refresh_token: 854e744a1f4c6fc20f498e366b9aabd2c4b971fd,
        access_token_expires_in: 86400,
        refresh_token_expires_in: 2592000 
    }
}

获得 access_token 后,您可用此调用接口对相关的推广帐号进行操作,如果发起Marketing API请求可通过发起请求章节进行了解。

值得注意的是,一旦 access_token 失效,您将无法调用接口。access_token 和 refresh_token 的有效期可以通过 oauth/token 接口的返回字段获取,默认情况下 access_token 和 refresh_token 的有效期如下:

  • access_token默认有效期为24小时
  • refresh_token默认有效期为30天

2. 如何更新 access_token

在refresh_token有效期内,您可以用 refresh_token 通过 auth/token 接口刷新 access_token。请求示意如下:

curl -G 'https://api.e.qq.com/oauth/token' \
    -d 'client_id=<CLIENT_ID>' \
    -d 'client_secret=<CLIENT_SECRET>' \
    -d 'grant_type=refresh_token' \
    -d 'refresh_token=<REFRESH_TOKEN>'

特别注意,每次刷新access_token时, refresh_token会自动续期。

3. 如何更新 refresh_token

如果 refresh_token 失效,您需要重新通过 OAuth 2.0 获得新的 access_token 和 refresh_token 。 关于 OAuth 2.0 相关接口说明,可以参考接口清单中的 OAuth 相关接口