Ошибка при приеме приглашения MCC с переполнением стека API Adwords

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

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

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

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

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

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

$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)

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

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …