У меня возникли проблемы с принятием приглашения на отправку ссылки 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)
Для того, чтобы принять существующее ожидающее приглашение.
Задача ещё не решена.
Других решений пока нет …