使用BingAds-PHP-SDK调用GetUser()时遇InvalidCredentials错误
你说已经通过OAuth成功拿到了访问令牌和刷新令牌,但调用GetUser()接口时碰到了错误码105的InvalidCredentials异常,这个问题我之前在对接Bing Ads API时也遇到过,给你几个实用的排查方向:
确认SDK是否正确配置了所有必要的认证信息
很多时候大家只记得传入OAuth令牌,但容易漏掉开发者令牌(Developer Token)。在Bing Ads PHP SDK里,你需要同时配置OAuth令牌和开发者令牌,示例代码如下:$authorizationData = new \Microsoft\BingAds\Auth\AuthorizationData(); $authorizationData->setAuthentication( new \Microsoft\BingAds\Auth\OAuthTokens( '你的访问令牌', '你的刷新令牌', time() + 3600 // 过期时间,根据实际情况设置 ) ); $authorizationData->setDeveloperToken('你的开发者令牌'); // 后续初始化ServiceClient并调用GetUser()开发者令牌需要你在Bing Ads开发者中心申请,没有它的话哪怕OAuth令牌正确,也会触发认证失败。
检查账号状态是否正常
错误提示里明确提到了"the account is inactive",你可以登录Bing Ads后台,查看当前认证的账号是否处于正常激活状态——有没有被暂停、禁用,或者是否存在未完成的账号验证步骤。账号状态异常会直接导致认证失败。验证OAuth权限范围是否正确
回顾一下你发起OAuth授权请求时设置的scope参数,必须包含https://ads.microsoft.com/ads.manage这个核心权限(如果是沙箱环境则是https://sandbox.ads.microsoft.com/ads.manage)。如果权限范围不包含访问用户信息的权限,即使拿到令牌也无法调用GetUser()接口。确认环境一致性
如果你使用的是Bing Ads沙箱环境的SDK,那必须确保你的OAuth令牌也是从沙箱的授权端点获取的;如果是生产环境,要对应生产环境的端点。沙箱和生产环境的令牌是不互通的,环境不匹配会直接触发认证错误。检查令牌的有效性
可以用JWT解码工具查看令牌的内容:- 确认
exp字段对应的过期时间是否还在有效期内(有时候令牌生成后可能因为时区问题提前失效); - 确认
aud字段是否正确指向Bing Ads的API地址(沙箱是https://sandbox.api.bingads.microsoft.com,生产是https://api.bingads.microsoft.com)。
- 确认
如果以上步骤都排查过还是无法解决,建议重新走一遍OAuth授权流程,重新获取令牌——有时候授权过程中可能会出现隐性的参数错误,重新生成令牌能解决这类问题。
内容的提问来源于stack exchange,提问作者kupendra

