google adwords API授权请求

时间:2020-02-17 08:12:30

标签: php oauth-2.0 google-ads-api google-api-php-client

我正在开发现有CPA系统和Google AdWords之间的集成。 转化存储在系统中,目标是作为后台任务定期分析转化并将其发送到用户的Google广告帐户。

这是我到目前为止所想的:

  1. 我需要一个Google应用程序,用户将向其授予将数据推送到其广告帐户的权限。
  2. 我需要Oauth2凭据来授权我的应用程序,并且需要用户凭据来授权API请求。

创建和存储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对象中的“网络”应用程序凭据以获取用户凭据时,我能够获得有效的响应,但是我不确定这是正确的方法去做。

2)如何授权API请求以将数据推送到特定用户的帐户?

以下是示例代码:

 $session = (new AdWordsSessionBuilder())
        ->fromFile()
        ->withOAuth2Credential($oAuth2Credential)
        ->withClientCustomerId('<client-customer-id>')
        ->build();

据我了解,会话对象对于构建任何进一步的查询(包括向上转换)都是必不可少的。

->fromFile()使用受指导的配置文件来获取我的令牌和Auth数据-基本上是对我的应用程序进行授权。

$oAuth2Credential是OAuth2对象,其中包含特定用户的授权数据。问题在于,在文档中,此对象是由构建器创建的,并且使用相同的方法fromFile(),但我不知道该对象必须包含哪些数据。

我将access_tokenrefresh_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_tokenrefresh_token,然后它会自动刷新,还是我需要单独的工作程序来定期刷新用户令牌以保持其有效?

1 个答案:

答案 0 :(得分:0)

这里有一个链接,描述了让客户端授权您的应用程序的流程。 https://pete-bowen.com/google-ads-api/adwords-api-authorize-multiple-users

一旦存储了客户机ID,秘密和刷新令牌(在安全的地方),您就可以使用OAuth2TokenBuilder类,该类具有允许您提供clientId,秘密和刷新令牌的方法,而不是从配置文件中读取它们。