核心:不是勾选单个广告账户,商家在授权页面勾选【巨量引擎工作台组织】,授权后拿到 access_token,调用oauth2/advertiser/get拿到cc_account_id,再用 cc_account_id 调用ebp/advertiser/list一次性取出组织下全部本地推账户
登录【巨量商业开放平台 open.oceanengine.com】
创建巨量营销类型应用(第三方服务 / 自研投放系统),企业认证
【应用权限申请】,一次性申请下面权限(你的 CRM 业务)
✅ 账号服务 → 巨量引擎工作台组织管理(ebp 组织接口权限)
✅ 本地推管理 → 抖音号管理 - 抖音号获取(获取 aweme 抖音号)
✅ 本地推线索接口权限(获取本地推线索)
配置回调地址 redirect_uri
在应用基本信息填写回调地址,必须和授权链接里的 redirect_uri 完全一致(域名、参数、http/https 严格匹配,否则回调失败)
回调地址是你 FastAdmin 后端接口地址,例如:shturl.cc/PsZy9X4jF510rQOMEpgkqHJsVdR7uGp
保存 app_id 和 app_secret
⚠️ 权限需要平台审核,一般 1 个工作日,权限没审核通过,授权页面不会出现组织选项,ebp 接口会报无权限。
基础授权地址:
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
打开链接,用【巨量工作台组织管理员账号】扫码登录(必须是工作台组织管理员,协作者无法授权组织资产)
授权页面,资产选择下拉,选择【巨量引擎工作台组织】(重点!不是单个广告账户)
👉 这里就是区分「组织授权」vs「单账户授权」:
单账户授权:勾选一个个本地推 advertiser_id
组织授权:直接勾选顶层【工作台组织】,授权后可以读取该组织下全部归属的本地推 / 广告账户
阅读授权协议,确认授权范围,点击【同意授权】
平台自动跳转到你配置的redirect_uri回调地址,GET 参数带回:
shturl.cc/PsZy9X4jF510rQOMEpgkqHJsVdR7uGp?auth_code=xxxx&state=merchant_10001
auth_code:一次性授权码,有效期 10 分钟,只能调用一次换取 token
state:你之前传入的自定义参数,用来识别是哪个商家
接口地址: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_token、refresh_token、过期时间存入商家数据库,绑定 state 对应的商家 ID
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、昵称等,入库
CRM 后台页面,商家点击【授权巨量工作台】,跳转到拼装好的 OAuth 授权链接
商家管理员扫码登录 → 选择【工作台组织】→同意授权 → 跳转回调地址,带回 auth_code
后端拿 auth_code 换取 access_token + refresh_token,入库
调用oauth2/advertiser/get拿到 cc_account_id(工作台组织 ID)
调用ebp/advertiser/list传入 cc_account_id,筛选 account_source=LOCAL,拿到该组织下全部本地推投放账户 advertiser_id
循环每个本地推账户,拉取账户下绑定的抖音 aweme 账号信息入库
定时任务:用 refresh_token 刷新 access_token,定期同步本地推账户、抖音号、线索数据