如何使用Python通过Refresh Token连接Bing API并获取数据?
解决Bing API刷新令牌授权及数据获取问题
1. 先用Refresh Token换取有效的Access Token
你之前直接拿Refresh Token请求报告API的思路是错的——Refresh Token的作用是在旧Access Token过期时,换取新的有效Access Token,真正用来请求API的是Access Token。
刷新令牌的请求细节
- 请求地址:
https://login.microsoftonline.com/common/oauth2/v2.0/token - 请求方式:必须用POST,不能用GET
- 表单参数需包含这些字段:
grant_type:固定值为refresh_tokenclient_id:你的Client IDclient_secret:你的Client Secretrefresh_token:你持有的Refresh Tokenscope:必须包含Bing Ads的权限范围,比如https://ads.microsoft.com/ads.manage offline_access
Python代码示例
import requests token_url = "https://login.microsoftonline.com/common/oauth2/v2.0/token" token_payload = { "grant_type": "refresh_token", "client_id": "你的ClientID", "client_secret": "你的ClientSecret", "refresh_token": "你的RefreshToken", "scope": "https://ads.microsoft.com/ads.manage offline_access" } response = requests.post(token_url, data=token_payload) token_data = response.json() if "access_token" in token_data: new_access_token = token_data["access_token"] # 部分场景会返回新的Refresh Token,建议保存下来供下次使用 new_refresh_token = token_data.get("refresh_token") else: print(f"刷新令牌失败:{token_data.get('error_description', '未知错误')}") exit()
2. 使用新Access Token请求报告API
拿到有效的Access Token后,再调用https://searchapi.pubcenter.microsoft.com/api/v1/reportJobs/接口,请求头里必须带上Bearer令牌及其他必要凭证。
请求注意事项
- 请求方法:如果是获取已有报告任务用GET,如果是创建新报告任务需要用POST,具体以接口要求为准
- 请求头必须包含:
Authorization:格式为Bearer {new_access_token}DeveloperToken:你的开发者令牌CustomerId:你的User ID(注意字段名可能为CustomerId,需确认和授权账号匹配)
Python代码示例
import requests report_api_url = "https://searchapi.pubcenter.microsoft.com/api/v1/reportJobs/" headers = { "Authorization": f"Bearer {new_access_token}", "DeveloperToken": "你的DeveloperToken", "CustomerId": "你的UserID" } response = requests.get(report_api_url, headers=headers) report_data = response.json() if response.status_code == 200: print("数据获取成功:", report_data) else: print("请求失败:", report_data)
错误排查(针对AuthorizationFailure)
你遇到的凭证无效错误,大概率是以下原因导致:
- Client ID/Client Secret、Refresh Token存在拼写错误,或者Refresh Token已过期/失效(刷新令牌后旧的Refresh Token可能会作废)
- 刷新令牌时的
scope未配置正确权限,必须包含Bing Ads的管理权限 - 请求报告API时,CustomerId(或UserID)、Developer Token与授权账号不匹配
- 用GET请求去刷新令牌,该接口仅支持POST请求
内容的提问来源于stack exchange,提问作者SDS
相关产品推荐
相关产品推荐

