Ошибка при приеме приглашения MCC с API Adwords PHP - PullRequest
0 голосов
/ 05 ноября 2018

У меня возникли проблемы с принятием приглашения на отправку ссылки MCC с PHP.

Учетная запись MCC не является учетной записью верхнего уровня, это подчиненная учетная запись MCC.

Я могу отправить приглашение правильно (из учетной записи 9547216945 клиенту 1096054675), используя API, проблема в том, что я использую Oauth2 для доступа от имени этого клиента и пытаюсь принять приглашение.

Предположим, я отправил приглашение без проблем.

Я провожу тестирование, используя собственную учетную запись Adwords, так что это мой тестовый клиент.

Затем я следую следующие шаги, чтобы принять:

Файл: test.php

$clientId     = "834249844................ak68sd6t.apps.googleusercontent.com";
$clientSecret = "uJdPPC..............CN";
$callbackUrl  = "http://example.com/test.php";


$oauth2 = new OAuth2([
    'authorizationUri' => 'https://accounts.google.com/o/oauth2/v2/auth',
    'tokenCredentialUri' => 'https://www.googleapis.com/oauth2/v4/token',
    'redirectUri' => $callbackUrl,
    'clientId' => $clientId,
    'clientSecret' => $clientSecret,
    'scope' => 'https://www.googleapis.com/auth/adwords', 
]);


if (!isset($_GET['code'])) {
    $oauth2->setState(sha1(openssl_random_pseudo_bytes(1024)));
    $_SESSION['oauth2state'] = $oauth2->getState();

    // Redirect the user to the authorization URL.
    $config = [ 'access_type' => 'offline', 'prompt' => 'consent'];

    header('Location: ' . $oauth2->buildFullAuthorizationUri($config));
    exit;
}
elseif (empty($_GET['state']) || ($_GET['state'] !== $_SESSION['oauth2state'])) {
    unset($_SESSION['oauth2state']);
    exit('Invalid state.');
} 
else {
    $oauth2->setCode($_GET['code']);
    $authToken = $oauth2->fetchAuthToken();

    $oAuth2Credential = (new OAuth2TokenBuilder())
      ->withClientId($clientId)
      ->withClientSecret($clientSecret)
      ->withRefreshToken($authToken['refresh_token'])
      ->build()
    ;

    // Construct an API session configured from the OAuth2 credentials above.
    $session = (new AdWordsSessionBuilder())
        ->withDeveloperToken("m2l..........Vq3g")
        ->withOAuth2Credential($oAuth2Credential)
        ->withClientCustomerId("1096054675") 
        ->build()
    ;

    $adWordsServices = new AdWordsServices();
    $linkOp = new LinkOperation();
    $link = new ManagedCustomerLink();
    $link->setClientCustomerId('1096054675');
    $link->setManagerCustomerId('9547216945');
    $link->setLinkStatus(LinkStatus::ACTIVE);
    $linkOp->setOperand($link);
    $linkOp->setOperator(Operator::ADD);

    $managedCustomerService = $adWordsServices->get($session, ManagedCustomerService::class);
    $result = $managedCustomerService->mutateLink([$linkOp]);
}

Этот скрипт заставляет меня войти в клиентскую учетную запись (ту, которую я использую для тестирования), затем я использую токен обновления клиента с Oauth2, и когда я хочу принять предыдущее отправленное приглашение, я получаю эту ошибку :

[ManagedCustomerServiceError.NOT_AUTHORIZED @ operations [0]]

Я пытался заставить его работать несколько раз, но безуспешно, кто-нибудь знает, что я здесь не так делаю?

Спасибо!

[РЕШЕНО]

Проблема была в том, что я должен использовать

$linkOp->setOperator(Operator::SET) 

вместо

$linkOp->setOperator(Operator::ADD) 

Чтобы принять существующее ожидающее приглашение.

...