我正在开发现有的CPA系统和Google AdWords之间的集成。转化存储在系统中,目标是作为后台任务定期分析转化并将其发送到用户的Google广告帐户。
这是我到目前为止所想的:
现在不考虑创建和存储gclid的过程。
我使用php客户端库https://github.com/googleads/googleads-php-lib,它具有adsapi_php.ini配置文件。在此文件中,有开发人员令牌,经理帐户客户ID和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'
]);
如果我理解正确,我绝对需要具有Web应用程序的OAuth凭据才能有一个回调来保存用户的访问和刷新令牌,以便稍后在我的后台任务中使用它们。
1)此凭据和adsapi_ini.php文件中的凭据是否必须相同?
我已经尝试为我的Web类型凭据生成一个刷新令牌,以便在conf文件中使用,但是它不起作用。现在,当我在配置文件中具有应用程序类型“其他”的凭据,并且在Oauth2对象中具有“ Web”应用程序凭据以获取用户凭据时,我能够获得有效的响应,但是我不确定这是正确的方法去做。
2)如何授权API请求将数据推送到某些用户的帐户?
这里是示例代码:
$session = (new AdWordsSessionBuilder())
->fromFile()
->withOAuth2Credential($oAuth2Credential)
->withClientCustomerId('<client-customer-id>')
->build();
据我所知,会话对象对于构建任何进一步的查询(包括向上转换)都是必不可少的。
[->fromFile()
使用指导的配置文件来获取我的令牌和Auth数据-基本上授权了我的应用程序。
$oAuth2Credential
是包含特定用户的授权数据的OAuth2对象。问题在于,在文档中,此对象是由构建器创建的,并使用相同的方法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)如何管理用户的令牌到期?
[文档说,客户端库会自动处理刷新令牌,但是我不知道在我的情况下它将如何工作。发出API请求时,是否需要在OAuth对象中传递access_token
和refresh_token
,然后它会自动刷新,还是我需要单独的工作程序定期刷新用户令牌以使其保持有效?
这里是一个链接,描述了让客户端授权您的应用的流程。https://pete-bowen.com/google-ads-api/adwords-api-authorize-multiple-users
一旦存储了客户端ID,秘密和刷新令牌(在安全的地方),您就可以使用OAuth2TokenBuilder类,该类具有允许您提供clientId,秘密和刷新令牌的方法,而不是从配置文件中读取它们。] >