最新的 Google Adwords oAuth API 实施

Posted

技术标签:

【中文标题】最新的 Google Adwords oAuth API 实施【英文标题】:Latest Google Adwords oAuth API implementation 【发布时间】:2017-08-21 02:24:48 【问题描述】:

美好的一天,

我在尝试将我的 adwords API oAuth 迁移到更新的 API 版本(即 v201705)时遇到问题。

我使用 v201609 的旧实现正在运行,现在因为这个版本已经处于日落状态。我一直在将我的应用迁移到更新的 API 版本。

基本上,我很难从 Google 或任何地方找到任何说明如何使用与最新 Adwords API 版本相关的 Adwords API 实施 Google oAuth 的文档。

以下是我当前的代码:

$redirectUri = 'http://xxxxxxx/dashboard/accounts/oauth2callback';
    $code = $_GET['code'];
    //$code = Request::query('code');

    $user = new AdWordsUser(
                            base_path('auth.ini'),
                            null,
                            null,
                            null,
                            base_path('settings.ini'),
                            null
                            );

    $OAuth2Handler = $user->GetOAuth2Handler();

    // Get the access token using the authorization code. Ensure you use the same
    // redirect URL used when requesting authorization.
    $user->SetOAuth2Info(
    $OAuth2Handler->GetAccessToken(
    $user->GetOAuth2Info(), $code, $redirectUri));

    // The access token expires but the refresh token obtained for offline use
    // doesn't, and should be stored for later use.
    //return $user->GetOAuth2Info();
    //$result = json_decode($user->GetOAuth2Info());

    $refreshToken = $user->GetOAuth2Info()['refresh_token'];

谁能指出我最新的 Google Adwords API 版本的正确实现?

以下是我目前一直在努力实现的目标,但显然这不起作用和/或完全遗漏了一些东西:

$redirectUri = 'http://xxxxxxx/dashboard/accounts/oauth2callback';
    $code = $_GET['code'];
    //$code = Request::query('code');

    /* $user = new AdWordsUser(
                            base_path('auth.ini'),
                            null,
                            null,
                            null,
                            base_path('settings.ini'),
                            null
                            ); */

    // Generate a refreshable OAuth2 credential for authentication.
    $oAuth2Credential = (new OAuth2TokenBuilder())
        ->fromFile()
        ->build();

    // Construct an API session configured from a properties file and the OAuth2
    // credentials above.

    $user = (new AdWordsSessionBuilder())
    ->fromFile()
    ->withOAuth2Credential($oAuth2Credential)
    ->build();

    $OAuth2Handler = $user->GetOAuth2Handler();

    // Get the access token using the authorization code. Ensure you use the same
    // redirect URL used when requesting authorization.
    $user->SetOAuth2Info(
    $OAuth2Handler->GetAccessToken(
    $user->GetOAuth2Info(), $code, $redirectUri));

    // The access token expires but the refresh token obtained for offline use
    // doesn't, and should be stored for later use.
    //return $user->GetOAuth2Info();
    //$result = json_decode($user->GetOAuth2Info());

    $refreshToken = $user->GetOAuth2Info()['refresh_token'];

    $customer_id = $this->GetClientCustomerName($refreshToken)['customer_id'];
    //$customer_name = $this->GetClientCustomerName($refreshToken)['customer_name'];

谢谢。

【问题讨论】:

我已经设法弄清楚了这一点。 【参考方案1】:

好吧,我终于发现我需要遵循 Google OAuth2 实施,因为我之前使用的是 Google Adwords 实施。不知道两者的工作方式相同。

以下是我提出并正在工作的内容:

$redirectUri = 'http://xxxxxxx/dashboard/accounts/oauth2callback';
    $code = $_GET['code'];

    $oauth2 = new OAuth2([
        'authorizationUri' => 'https://accounts.google.com/o/oauth2/v2/auth',
        'tokenCredentialUri' => 'https://www.googleapis.com/oauth2/v4/token',
        'redirectUri' => $redirectUri,
        'clientId' => $this->client_id,
        'clientSecret' => $this->client_secret,
        'scope' => '****'
    ]);


    $oauth2->setCode($code);
    $authToken = $oauth2->fetchAuthToken();

    // Store the refresh token for your user in your local storage if you
    // requested offline access.
    $refreshToken = $authToken['refresh_token'];

【讨论】:

以上是关于最新的 Google Adwords oAuth API 实施的主要内容,如果未能解决你的问题,请参考以下文章

Google Adwords API 错误 - OAuth 客户端已删除

如何将 OAuth 与 Google AdWords / AdSense API 一起使用?

Google Adwords OAuth“错误”:“invalid_client”异常

将授权机制 ClientLogin 迁移到 OAuth2 Google AdWords v201206 Perl

Google Adwords API with OAuth2 如何获取授权用户的电子邮件?

使用 suds 在 Python 中使用 OAuth2 进行 Google Adwords API 身份验证