Как превратить oAuth2 служб Google в доступ к API объявлений Google oAuth2 - PullRequest
0 голосов
/ 02 ноября 2018

Итак, я работаю с Google API Client для PHP и у меня работает поток OAuth,

class GoogleClient {
    private static $client_id = "1050479587066-f64vq210hc2m15fdj4r77g8ml7jin30d.apps.googleusercontent.com";
    private static $client_Secret = "CK8orQfPNpD9UgF0bqNJinVI";
    private static $redirect_uri = '/return.php';

    private static $access;

    private static $client = null;

    private static function checkForAccess(){
        if(isset(self::$access)){
            return true;
        }

        if(isset($_SESSION['GoogleAuth'])){
            self::$access = $_SESSION['GoogleAuth'];
            return true;
        }
        return false;
    }

    public static function GetClient(){
        if(is_null(self::$client)){
            $params = [
                "client_id" => self::$client_id,
                "client_secret" => self::$client_Secret,
                "redirect_uri" => self::$redirect_uri,
                "application_name" => "Test AdWords System"
            ];
            if(self::checkForAccess() && self::isLoggedIn()){
                $param["access_token"] =  self::$access['access_token'];
            }
             //Create and Request to access Google API
            $client = new Google_Client($params);
        }
        return $client;
    }

    public static function doLogin(){
        $scopes = [ 'https://www.googleapis.com/auth/adwords', 'https://www.googleapis.com/auth/dfp',  "https://www.googleapis.com/auth/userinfo.email"];
        return self::GetClient()->createAuthUrl($scopes);
    }

    public static function doLoginFinal(){
        if (!$code = $_GET['code']) {
            throw new Exception("Auth Code is missing.");
        }

        $authResponse = self::GetClient()->authenticate($code);
        if (isset($authResponse['error'])) {
            throw new Exception(
                "Unable to get access token.", 
                null, 
                new Exception(
                    "{$authResponse['error']} {$authResponse['error_description']}"
                )
            );
        }

        $_SESSION['GoogleAuth'] = $authResponse;
        self::$access = $authResponse;
    }

    public static function isLoggedIn(){
        if(self::checkForAccess()){
            if(isset(self::$access)){
                $expiresAt = @self::$access['created']+@self::$access['expires_in'];
                return (time() < $expiresAt);
            }
        }
        return false;
    }

    public static function GetExpiry(){
        if(self::checkForAccess()){
            return self::$access['created']+self::$access['expires_in'];
        }
        throw new Exception("The User is not logged into a google account.");
    }
}

теперь этот класс работает, я могу войти в систему и у меня есть область действия для google-adwords, проблема возникает из-за плохой документации для googleads-php-lib

Так что из примера к getCampaigns он использует $oAuth2Credential = (new OAuth2TokenBuilder())->fromFile()->build();, но у меня нет файла, поэтому я вошел в файл OAuth2TokenBuilder, который я не могу выяснить, как я могу дать уже сгенерированные токены доступа объектам googleads.

Я дважды проверил google-php-api-client репозиторий услуг , и нет службы AdWords, которую я могу использовать.

Я копался в исходных файлах googleads-php-lib, чтобы посмотреть, смогу ли я найти метод для реализации этого, но пока я просто застреваю, поскольку все, кажется, требует определенных типов параметров поэтому я могу что-то настроить, чтобы предоставить подробности, но код всегда полагается на несколько классов, поэтому я не могу просто создать тот, который расширяет класс. и я передаю это до конца.

Ключи будут уничтожены после выполнения этого теста!

1 Ответ

0 голосов
/ 06 ноября 2018

Ну, после нескольких дней копания в исходных файлах и взлома этого, и я наконец нашел реализацию, которая работает.

После создания учетной записи моего менеджера: https://developers.google.com/adwords/api/docs/guides/signup

Итак, это два новых метода, добавленных в мой статический класс GoogleClient

private static $developerToken = "";

private static function GetUserRefreshCredentials(){
    return new UserRefreshCredentials(
            null,
            [
                'client_id' => self::$client_id,
                'client_secret' => self::$client_secret,
                'refresh_token' => self::$access['refresh_token']
            ]
        );
}

public function GetAdwordsSession(){
    $builder = new AdWordsSessionBuilder();
    $builder->defaultOptionals();
    $builder->withDeveloperToken(slef::$developerToken);
    return $builder->withOAuth2Credential(self::GetUserRefreshCredentials())->build();
}
...