/**
 * Runs the example.
 */
function HandleTwoFactorAuthorizationErrorExample()
{
    // Create an AdWordsUser using the credentials for a 2-step tester account.
    $user = new AdWordsUser(NULL, '*****@*****.**', 'testaccount');
    try {
        $authToken = $user->GetAuthToken();
        printf("Successfully retrieved auth token for the account '%s': '%s'\n", $user->GetEmail(), $authToken);
    } catch (AuthTokenException $e) {
        if (strpos($e->GetError(), 'InvalidSecondFactor') !== FALSE) {
            // See http://goo.gl/SHgXV for more details.
            print "The account has 2-step verification enabled, so an " . "application-specific password must be used instead.\n";
        } else {
            print "Invalid email or password.\n";
        }
    }
}
/**
 * Runs the example.
 * @param AdWordsUser $user the user to run the example with
 */
function GetAccountHierarchyExample(AdWordsUser $user)
{
    // Get the service, which loads the required classes.
    $servicedAccountService = $user->GetService('ServicedAccountService', 'v201109');
    // Create selector.
    $selector = new ServicedAccountSelector();
    // To get the links paging must be disabled.
    $selector->enablePaging = FALSE;
    // Make the get request.
    $graph = $servicedAccountService->get($selector);
    // Display serviced account graph.
    if (isset($graph->accounts)) {
        // Create map from customerId to parent and child links.
        $childLinks = array();
        $parentLinks = array();
        if (isset($graph->links)) {
            foreach ($graph->links as $link) {
                $childLinks[$link->managerId->id][] = $link;
                $parentLinks[$link->clientId->id][] = $link;
            }
        }
        // Create map from customerID to account, and find root account.
        $accounts = array();
        $rootAccount = NULL;
        foreach ($graph->accounts as $account) {
            $accounts[$account->customerId] = $account;
            if (!array_key_exists($account->customerId, $parentLinks)) {
                $rootAccount = $account;
            }
        }
        // The root account may not be returned in the sandbox.
        if (!isset($rootAccount)) {
            $rootAccount = new Account();
            $rootAccount->customerId = 0;
            $rootAccount->login = $user->GetEmail();
        }
        // Display account tree.
        print "(Customer Id, Account Name/Login, Link Status)\n";
        DisplayAccountTree($rootAccount, NULL, $accounts, $childLinks, 0);
    } else {
        print "No serviced accounts were found.\n";
    }
}
/**
 * Runs the example.
 * @param AdWordsUser $user the user to run the example with
 */
function GetAccountHierarchyExample(AdWordsUser $user)
{
    // Get the service, which loads the required classes.
    $managedCustomerService = $user->GetService('ManagedCustomerService', ADWORDS_VERSION);
    // Create selector.
    $selector = new Selector();
    // Specify the fields to retrieve.
    $selector->fields = array('Login', 'CustomerId', 'Name');
    // Make the get request.
    $graph = $managedCustomerService->get($selector);
    // Display serviced account graph.
    if (isset($graph->entries)) {
        // Create map from customerId to parent and child links.
        $childLinks = array();
        $parentLinks = array();
        if (isset($graph->links)) {
            foreach ($graph->links as $link) {
                $childLinks[$link->managerCustomerId][] = $link;
                $parentLinks[$link->clientCustomerId][] = $link;
            }
        }
        // Create map from customerID to account, and find root account.
        $accounts = array();
        $rootAccount = NULL;
        foreach ($graph->entries as $account) {
            $accounts[$account->customerId] = $account;
            if (!array_key_exists($account->customerId, $parentLinks)) {
                $rootAccount = $account;
            }
        }
        // The root account may not be returned in the sandbox.
        if (!isset($rootAccount)) {
            $rootAccount = new Account();
            $rootAccount->customerId = 0;
            $rootAccount->login = $user->GetEmail();
        }
        // Display account tree.
        print "(Customer Id, Account Name/Login)\n";
        DisplayAccountTree($rootAccount, NULL, $accounts, $childLinks, 0);
    } else {
        print "No serviced accounts were found.\n";
    }
}
 /**
  * Gets the HTTP headers for the report download request.
  * @param AdWordsUser $user the AdWordsUser to get credentials from
  * @param string $url the URL the request will be made to
  * @param array $options the options for the download
  * @return array and array of strings, which are header names and values
  */
 private static function GetHeaders($user, $url, array $options = NULL)
 {
     $headers = array();
     $version = !empty($options['version']) ? $options['version'] : $user->GetDefaultVersion();
     // Authorization.
     if ($user->GetOAuthInfo()) {
         $oauthParams = $user->GetOAuthHandler()->GetSignedRequestParameters($user->GetOAuthInfo(), $url, 'POST');
         $headers['Authorization'] = 'OAuth ' . $user->GetOAuthHandler()->FormatParametersForHeader($oauthParams);
     } elseif ($user->GetOAuth2Info()) {
         if (!$user->IsOAuth2AccessTokenValid() && $user->CanRefreshOAuth2AccessToken()) {
             $user->RefreshOAuth2AccessToken();
         }
         $oauth2Header = $user->GetOAuth2Handler()->FormatCredentialsForHeader($user->GetOAuth2Info());
         $headers['Authorization'] = $oauth2Header;
     } else {
         $headers['Authorization'] = 'GoogleLogin auth=' . $user->GetAuthToken();
     }
     // Developer token.
     $headers['developerToken'] = $user->GetDeveloperToken();
     // Target client.
     $email = $user->GetEmail();
     $clientId = $user->GetClientId();
     if (isset($clientId)) {
         if (strpos($clientId, '@') !== FALSE) {
             if ($version < 'v201109') {
                 $headers['clientEmail'] = $clientId;
             } else {
                 throw new ReportDownloadException('Client emails are not supported ' . 'in versions v201109 and later.');
             }
         } else {
             $headers['clientCustomerId'] = $clientId;
         }
     } else {
         if ($version < 'v201109' && isset($email)) {
             $headers['clientEmail'] = $email;
         } else {
             throw new ReportDownloadException('The client customer ID must be ' . 'specified for report downloads.');
         }
     }
     // Flags.
     if (isset($options['returnMoneyInMicros'])) {
         $headers['returnMoneyInMicros'] = $options['returnMoneyInMicros'] ? 'true' : 'false';
     }
     return $headers;
 }
 /**
  * Gets the HTTP headers for the report download request.
  * @param AdWordsUser $user the AdWordsUser to get credentials from
  * @param string $url the URL the request will be made to
  * @param array $options the options for the download
  * @return array and array of strings, which are header names and values
  */
 private static function GetHeaders($user, $url, array $options = NULL)
 {
     $headers = array();
     $version = !empty($options['version']) ? $options['version'] : $user->GetDefaultVersion();
     // Authorization.
     $authHeader = NULL;
     $oAuth2Info = $user->GetOAuth2Info();
     $oAuth2Handler = $user->GetOAuth2Handler();
     if (!empty($oAuth2Info)) {
         $oAuth2Info = $oAuth2Handler->GetOrRefreshAccessToken($oAuth2Info);
         $user->SetOAuth2Info($oAuth2Info);
         $authHeader = $oAuth2Handler->FormatCredentialsForHeader($oAuth2Info);
     } else {
         $authHeader = sprintf(self::CLIENT_LOGIN_FORMAT, $user->GetAuthToken());
     }
     $headers['Authorization'] = $authHeader;
     // Developer token.
     $headers['developerToken'] = $user->GetDeveloperToken();
     // Target client.
     $email = $user->GetEmail();
     $clientCustomerId = $user->GetClientCustomerId();
     if (isset($clientCustomerId)) {
         $headers['clientCustomerId'] = $clientCustomerId;
     } else {
         if ($version < 'v201109' && isset($email)) {
             $headers['clientEmail'] = $email;
         } else {
             throw new ReportDownloadException('The client customer ID must be ' . 'specified for report downloads.');
         }
     }
     // Flags.
     if (isset($options['returnMoneyInMicros'])) {
         $headers['returnMoneyInMicros'] = $options['returnMoneyInMicros'] ? 'true' : 'false';
     }
     return $headers;
 }