Я разрабатываю интеграцию между существующей системой CPA и Google AdWords. Конверсии хранятся в системе, и цель состоит в том, чтобы периодически, в качестве фоновой задачи, анализировать конверсии и отправлять их в учетную запись Google Ad пользователя.
Вот то, что я вычислил до сих пор:
- Мне нужно приложение Google, для которого пользователи будут предоставлять разрешение на получение данных pu sh в своей рекламной учетной записи.
- Мне нужны учетные данные Oauth2 для авторизации моего приложения и учетные данные пользователей для авторизации запроса API.
Процесс создания и хранения gclid сейчас не касается.
Я использую php клиентская библиотека https://github.com/googleads/googleads-php-lib, которая имеет adsapi_ php .ini файл конфигурации. В этом файле находятся токен разработчика, идентификатор клиента учетной записи менеджера и учетные данные OAuth2 (cliendId, clientSecret, refreshToken).
Однако, когда пользователь дает доступ к моему приложению через экран согласия, я создаю объект OAuth2 следующим образом:
$oAuth2Credential = new OAuth2([
'authorizationUri' => 'https://accounts.google.com/o/oauth2/v2/auth',
'tokenCredentialUri' => 'https://www.googleapis.com/oauth2/v4/token',
'redirectUri' => '<myEndpoint>',
'clientId' => '<myClientId>',
'clientSecret' => '<myClientSecret>',
'scope' => 'https://www.googleapis.com/auth/adwords'
]);
Если я правильно понимаю, мне абсолютно необходимы учетные данные OAuth веб-приложения в чтобы получить обратный вызов, чтобы сохранить доступ пользователя и обновить токены sh, чтобы использовать их позже в моей фоновой задаче.
1) Должны ли эти учетные данные и данные в файле adsapi_ini. php быть одинаковыми?
Я пытался сгенерировать refre sh токен для моих учетных данных веб-типа для использования в файле conf, но он не работал. Прямо сейчас я могу получить действительный ответ, когда у меня есть учетные данные для типа приложения «другие» в файле конфигурации и «веб-учетные данные» приложения в объекте Oauth2 для получения учетных данных пользователя, но я не уверен, что это правильный путь чтобы сделать это.
2) Как авторизовать запрос API на данные pu sh для учетной записи определенного пользователя?
Вот пример кода:
$session = (new AdWordsSessionBuilder())
->fromFile()
->withOAuth2Credential($oAuth2Credential)
->withClientCustomerId('<client-customer-id>')
->build();
Как я понимаю, сессионный объект важен для построения любых дальнейших запросов, в том числе для обновления преобразований.
->fromFile()
использует измененный файл конфигурации для получения моего токена и данных Auth - в основном авторизует мое приложение.
$oAuth2Credential
- это объект OAuth2, содержащий определенные c данные авторизации пользователя. Проблема в том, что в документации этот объект создается компоновщиком и использует тот же метод fromFile()
, и я не понимаю, какие данные он должен содержать.
Я храню access_token
и refresh_token
в моя база данных, и сейчас я создаю объект OAuth следующим образом:
$oAuth2Credential = new OAuth2([
'authorizationUri' => 'https://accounts.google.com/o/oauth2/v2/auth',
'tokenCredentialUri' => 'https://www.googleapis.com/oauth2/v4/token',
'redirectUri' => '<myEndpoint>',
'clientId' => '<myClientId>',
'clientSecret' => '<myClientSecret>',
'scope' => 'https://www.googleapis.com/auth/adwords',
'access_token' => '<user_access_token>'
]);
Таким образом, я просто добавляю access_token
к параметрам, которые я использую для получения этого токена от пользователя. Это работает, но не похоже на правильный способ сделать это.
3) Как управлять сроком действия токена пользователя?
В документации сказано, что клиентская библиотека автоматически обрабатывает токены обновления, но я не понимаю, как это будет работать в моем случае , Нужно ли передавать access_token
с refresh_token
в объекте OAuth при выполнении запроса API, а затем он автоматически обновляет sh, или мне нужен отдельный работник, чтобы периодически обновлять sh пользовательских токенов, чтобы сохранять их действительность?