巨量【工作台组织(cc_account_id)】OAuth 完整操作指南(用于拉组织下全部本地推账户)

巨量引擎   2026-09-12 15:29   21   0  

核心:不是勾选单个广告账户,商家在授权页面勾选【巨量引擎工作台组织】,授权后拿到 access_token,调用oauth2/advertiser/get拿到cc_account_id,再用 cc_account_id 调用ebp/advertiser/list一次性取出组织下全部本地推账户


一、前置准备(开发者平台,必须先做完)

  1. 登录【巨量商业开放平台 open.oceanengine.com

  2. 创建巨量营销类型应用(第三方服务 / 自研投放系统),企业认证

  3. 【应用权限申请】,一次性申请下面权限(你的 CRM 业务)

  • ✅ 账号服务 → 巨量引擎工作台组织管理(ebp 组织接口权限)

  • ✅ 本地推管理 → 抖音号管理 - 抖音号获取(获取 aweme 抖音号)

  • ✅ 本地推线索接口权限(获取本地推线索)

配置回调地址 redirect_uri

  • 在应用基本信息填写回调地址,必须和授权链接里的 redirect_uri 完全一致(域名、参数、http/https 严格匹配,否则回调失败)

  • 回调地址是你 FastAdmin 后端接口地址,例如:shturl.cc/PsZy9X4jF510rQOMEpgkqHJsVdR7uGp

保存 app_idapp_secret

⚠️ 权限需要平台审核,一般 1 个工作日,权限没审核通过,授权页面不会出现组织选项,ebp 接口会报无权限。


二、拼装 OAuth 授权链接(你 CRM 页面给商家的授权按钮跳转地址)

基础授权地址:

https://ad.oceanengine.com/open_api/oauth2/auth/

URL 参数说明:

参数说明
app_id        你的应用 APPID    
redirect_uri     回调地址,URL 编码    
state         自定义参数,用来标记当前是哪个商家 ID,回调原样带回(FastAdmin 用来绑定商家记录)    
scope         权限数组,不传 = 应用全部已审核权限    
material_auth   1 = 展示素材授权,0 不展示,本地推线索建议填 1

完整示例链接(复制替换参数即可)

https://ad.oceanengine.com/open_api/oauth2/auth/?app_id=123456&redirect_uri=https%3A%2F%2Fxxx.com%2Fapi%2Fdouyin%2Foauth_callback&state=merchant_10001&material_auth=1


三、商家操作步骤(商家打开这个授权链接)

  1. 打开链接,用【巨量工作台组织管理员账号】扫码登录(必须是工作台组织管理员,协作者无法授权组织资产)

  2. 授权页面,资产选择下拉,选择【巨量引擎工作台组织】(重点!不是单个广告账户)

    👉 这里就是区分「组织授权」vs「单账户授权」:

  • 单账户授权:勾选一个个本地推 advertiser_id

  • 组织授权:直接勾选顶层【工作台组织】,授权后可以读取该组织下全部归属的本地推 / 广告账户

阅读授权协议,确认授权范围,点击【同意授权】

平台自动跳转到你配置的redirect_uri回调地址,GET 参数带回:

shturl.cc/PsZy9X4jF510rQOMEpgkqHJsVdR7uGp?auth_code=xxxx&state=merchant_10001
  • auth_code:一次性授权码,有效期 10 分钟,只能调用一次换取 token

  • state:你之前传入的自定义参数,用来识别是哪个商家


四、后端回调逻辑(FastAdmin 控制器处理回调)

步骤 1:用 auth_code 换取 access_token + refresh_token

接口地址:https://ad.oceanengine.com/open_api/oauth2/access_token/ POST

// 示例请求参数
$postData = [
    'app_id' => $app_id,
    'secret' => $app_secret,
    'auth_code' => $auth_code
];

返回核心字段

{
    "access_token": "xxxx",
    "refresh_token": "xxxx",
    "expires_in": 86400,
    "user_id": "登录用户id"
}


access_tokenrefresh_token、过期时间存入商家数据库,绑定 state 对应的商家 ID


步骤 2:调用 oauth2/advertiser/get/ 获取 cc_account_id(工作台组织 ID)

这一步是关键:拿到 token 后,先调用这个接口,返回列表里account_role=CUSTOMER_ADMIN这条的account_id就是cc_account_id(工作台组织 ID)

$ret = OceanEngine::getAuthorizedAdvertiserList($access_token);
// 遍历结果,找到组织记录
foreach($ret['data'] as $item){
    if($item['account_role'] === 'CUSTOMER_ADMIN'){
        $cc_account_id = $item['account_id'];
        //入库保存 cc_account_id
    }
}


步骤 3:使用 cc_account_id 调用 ebp 接口,拉组织下全部本地推账户

//接口:/open_api/2/ebp/advertiser/list/
//参数 cc_account_id + account_source=LOCAL
//拿到所有本地推advertiser_id(local_account_id)


步骤 4:循环每个本地推 advertiser_id,调用本地推 aweme 接口获取绑定抖音号

v3.0/local/aweme/authorized/get/,拿到 aweme_id、昵称等,入库


五、完整业务链路汇总(工作台组织授权模式)

  1. CRM 后台页面,商家点击【授权巨量工作台】,跳转到拼装好的 OAuth 授权链接

  2. 商家管理员扫码登录 → 选择【工作台组织】→同意授权 → 跳转回调地址,带回 auth_code

  3. 后端拿 auth_code 换取 access_token + refresh_token,入库

  4. 调用oauth2/advertiser/get拿到 cc_account_id(工作台组织 ID)

  5. 调用ebp/advertiser/list传入 cc_account_id,筛选 account_source=LOCAL,拿到该组织下全部本地推投放账户 advertiser_id

  6. 循环每个本地推账户,拉取账户下绑定的抖音 aweme 账号信息入库

  7. 定时任务:用 refresh_token 刷新 access_token,定期同步本地推账户、抖音号、线索数据