Bing Ads sdk V12:错误代码 105,无效凭据(客户管理)

Bing Ads sdk V12: Error code 105, Invalid Credential (Customer Management)

我在执行“GetUser”请求时遇到错误代码 105(消息:“身份验证失败。提供的凭据无效或帐户处于非活动状态”)的问题。我已经明白这是因为目标环境的访问令牌(AuthenticationToken header 元素)或开发人员令牌不正确。所以这一定是关于我设置凭据(或我的凭据)的方式。这是我的代码:

public function getAuthorization()
{
    $result = AuthController::getRefreshToken(); //get The refresh token, update it if necessary
    AuthController::WriteOAuthRefreshToken($result); //stock the refresh token

    $authentication = (new OAuthWebAuthCodeGrant())
            ->withEnvironment(AuthController::ApiEnvironment) //production
            ->withClientSecret(AuthController::ClientSecret)
            ->withClientId(AuthController::ClientId)
            ->withOAuthTokens(
    (new OAuthTokens())
            ->withAccessToken(json_decode($result, true)["access_token"])
            ->withRefreshToken(json_decode($result, true)["refresh_token"])
            ->withAccessTokenExpiresInSeconds(3600))
        ->withRedirectUri(AuthController::RedirectUri)
        ->withState(rand(0,999999999));

    $GLOBALS['AuthorizationData'] = (new AuthorizationData())
        ->withAuthentication($authentication)
        ->withDeveloperToken(AuthController::DeveloperToken);

    AuthController::Authenticate();
}

这是调用 getUser 函数 () 的身份验证函数

static function Authenticate()
{
    // Authenticate for Bing Ads services with a Microsoft Account. Perform a $GLOBALS['AuthorizationData']->Authentication->RequestOAuthTokensByRefreshToken($refreshToken);
    AuthController::AuthenticateWithOAuth();

    $GLOBALS['CustomerManagementProxy'] = new ServiceClient(
        ServiceClientType::CustomerManagementVersion12,
        $GLOBALS['AuthorizationData'],
        AuthController::ApiEnvironment);
    $GLOBALS['CustomerManagementProxy']->SetAuthorizationData($GLOBALS['AuthorizationData']);

    // Here is the problem
    $user = AuthController::GetUser(null, true)->User;
}

我目前使用的getUser函数与documentation中PHP“代码语法”部分的函数相同。 我正在使用我自己的凭据使用生产环境。我已经检查了我的开发人员令牌和所有相应的权利(这似乎是正确的)。每次尝试执行该请求时,我都会更新我的令牌。 我设置请求的方式有什么问题吗? 如果问题是关于令牌的,有没有办法检查它是否正确? 我准确地说,我也尝试过使用 getAccount function 得到相同的结果。

有什么想法吗?谢谢你的时间。

这里有一些想法可供探索:

  1. 您可以使用这些凭据登录 Bing Ads web application 即,该用户是否有权访问 Bing Ads 帐户?
  2. OAuthTokens->AccessToken 是否已设置或为空,例如,尝试 var_dump($authentication).
  3. 尝试直接在 auth 对象中刷新令牌,例如,请参阅 this sample
  4. 记录 SOAP 请求和响应以查看是否在 GetUser 调用中设置了 AuthenticationToken 例如,在 GetUser 调用之后立即打印最后一个 request/response:

    print $GLOBALS['Proxy']->GetService()->__getLastRequest()."\n";
    print $GLOBALS['Proxy']->GetService()->__getLastResponse()."\n";
    

否则,要确认凭据,您可能需要直接联系 Bing Ads support

希望对您有所帮助!