You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python调用Facebook Marketing API出现Invalid OAuth access token错误求助

解决Facebook Marketing API的"Invalid OAuth access token"错误

你遇到的问题主要有两个核心原因,我来逐个帮你拆解并解决:

1. 错误拆分了应用访问令牌(App Access Token)

Facebook返回的应用访问令牌格式是xxxxxx|yyyyyy,这个完整字符串就是有效的令牌,但你代码里把它拆成了后半段yyyyyy,这直接导致传入了无效的令牌值。

先修正你的get_app_access_token函数,直接返回完整的access_token即可:

def get_app_access_token(app_id, app_secret):
    args = {'grant_type': 'client_credentials', 'client_id': app_id, 'client_secret': app_secret}
    f = urllib2.urlopen("https://graph.facebook.com/oauth/access_token?" + urllib.urlencode(args))
    resp = json.loads(f.read())
    # 直接返回完整的access_token,不要做拆分操作
    return resp["access_token"]

2. 应用访问令牌无权访问广告账户数据

就算你修正了令牌格式,应用访问令牌(App Access Token)本身也没有权限读取广告账户的具体数据——广告账户属于用户私有资源,必须使用用户访问令牌(User Access Token),且该令牌需要用户授权你的应用获得以下核心权限:

  • ads_management:用于读写广告相关数据
  • business_management:(可选)如果你的广告账户归属商务管理平台(BM)

获取用户访问令牌的具体步骤:

  1. 先在Facebook开发者后台,给你的应用添加Facebook Login产品,配置有效的重定向URI(本地测试可以用http://localhost:8000/callback这类地址)。
  2. 构造授权URL引导用户授权(替换{APP_ID}{REDIRECT_URI}为你的实际信息):
https://www.facebook.com/v18.0/dialog/oauth?client_id={APP_ID}&redirect_uri={REDIRECT_URI}&scope=ads_management,business_management&response_type=token
  1. 用户授权后,会在重定向URI的哈希参数中得到短期用户访问令牌;如果需要长期令牌(有效期60天),可以调用API交换:
# 用短期令牌交换长期令牌
args = {'grant_type': 'fb_exchange_token', 'client_id': APP_ID, 'client_secret': SECRET_KEY, 'fb_exchange_token': 'SHORT_LIVED_TOKEN'}
f = urllib2.urlopen("https://graph.facebook.com/oauth/access_token?" + urllib.urlencode(args))
resp = json.loads(f.read())
long_lived_token = resp["access_token"]
  1. 最后用用户访问令牌初始化API:
api = FacebookAdsApi.init(APP_ID, SECRET_KEY, long_lived_token)

额外注意事项:

  • 确保你的Facebook账号是目标广告账户的管理员、编辑或分析师角色,否则即使令牌正确也会被拒绝访问。
  • 测试阶段可以用Facebook的访问令牌调试器来验证令牌的权限和有效期。

内容的提问来源于stack exchange,提问作者Marion

火山引擎 最新活动