<?php 
/** 
 * Composer autoload 
 */ 
require_once __DIR__ . '/../vendor/autoload.php'; 
 
/** 
 * Used classes 
 */ 
use WsdlToPhp\PackageBase\AbstractSoapClientBase; 
use Ews\EnumType\EwsExchangeVersionType; 
use Ews\EwsClassMap; 
use Ews\StructType\EwsRequestServerVersion; 
use Ews\StructType\EwsGetServerTimeZonesType; 
 
/** 
 * Your Office 365 login 
 */ 
define('EWS_WS_LOGIN', ''); 
/** 
 * Your Office 365 passowrd 
 */ 
define('EWS_WS_PASSWORD', ''); 
 
/** 
 * Minimal options in order to instanciate the ServiceType named Get 
 */ 
$options = array( 
    AbstractSoapClientBase::WSDL_URL => __DIR__ . '/../wsdl/services.wsdl', 
    AbstractSoapClientBase::WSDL_CLASSMAP => EwsClassMap::get(), 
    AbstractSoapClientBase::WSDL_LOGIN => EWS_WS_LOGIN, 
    AbstractSoapClientBase::WSDL_PASSWORD => EWS_WS_PASSWORD, 
); 
 
/** 
 * Instanciation of the ServiceType get that gather all the operations beginnig with "get". 
 */ 
$get = new \Ews\ServiceType\EwsGet($options); 
/** 
 * Configure the SoapHeader, each header's method begins with "setSoapHeader". 
 */ 
$get->setSoapHeaderRequestServerVersion(new EwsRequestServerVersion(EwsExchangeVersionType::VALUE_EXCHANGE_2013_SP_1)); 
/** 
 * Send the request, you can customize the request by modifiying the new EwsGetServerTimeZonesType() instance 
 */ 
$result = $get->GetServerTimeZones(new EwsGetServerTimeZonesType()); 
 
/** 
 * Debug informations provided by the utility methods 
 */ 
if (false) { 
    echo 'XML Request: ' . $get->getLastRequest() . "\r\n"; 
    echo 'Headers Request: ' . $get->getLastRequestHeaders() . "\r\n"; 
    echo 'XML Response: ' . $get->getLastResponse() . "\r\n"; 
    echo 'Headers Response: ' . $get->getLastResponseHeaders() . "\r\n"; 
} 
 
/** 
 * Sample call for GetServerTimeZones operation/method 
*/ 
if ($result !== false) { 
    /** 
     * @var Ews\StructType\EwsArrayOfResponseMessagesType 
     */ 
    $responseMessages = $result->getResponseMessages(); 
    /** 
     * @var Ews\StructType\EwsGetServerTimeZonesResponseMessageType 
     */ 
    $response = $responseMessages->getGetServerTimeZonesResponseMessage(); 
    $response = $response[0]; 
    /** 
     * @var Ews\ArrayType\EwsArrayOfTimeZoneDefinitionType 
     */ 
    $timeZoneDefinitions = $response->getTimeZoneDefinitions(); 
    $timeZoneDefinitions->initInternArray(); 
    /** 
     * Display the TimeZones if there is at least one: 
     * 
     * 108 timezones found! 
     * Id: Dateline Standard Time, Name: (UTC-12:00) International Date Line West 
     * Id: Samoa Standard Time, Name: (UTC+13:00) Samoa 
     * Id: UTC-11, Name: (UTC-11:00) Coordinated Universal Time-11 
     * Id: Hawaiian Standard Time, Name: (UTC-10:00) Hawaii 
     * Id: Alaskan Standard Time, Name: (UTC-09:00) Alaska 
     * Id: Pacific Standard Time (Mexico), Name: (UTC-08:00) Baja California 
     * Id: Pacific Standard Time, Name: (UTC-08:00) Pacific Time (US & Canada) 
     * Id: US Mountain Standard Time, Name: (UTC-07:00) Arizona 
     * Id: Mountain Standard Time (Mexico), Name: (UTC-07:00) Chihuahua, La Paz, Mazatlan 
     * Id: Mountain Standard Time, Name: (UTC-07:00) Mountain Time (US & Canada) 
     * Id: Central America Standard Time, Name: (UTC-06:00) Central America 
     * ... etc 
     * 
     * Otherwise it displays: 
     * No timezone found! 
     */ 
    if ($timeZoneDefinitions->count() > 0) { 
        echo PHP_EOL . sprintf('%d timezones found!', $timeZoneDefinitions->count()) . PHP_EOL; 
        foreach ($timeZoneDefinitions as $timeZoneDefinition) { 
            echo sprintf('Id: %s, Name: %s', $timeZoneDefinition->getId(), $timeZoneDefinition->getName()) . PHP_EOL; 
        } 
    } else { 
        echo PHP_EOL . 'No timezone found!'; 
    } 
} else { 
    /** 
     * In this case, we get the \SoapFault object 
     */ 
    print_r($get->getLastErrorForMethod('\Ews\ServiceType\EwsGet::GetServerTimeZones')); 
}
 
 |