я использую https://github.com/Garethp/php-ews/ библиотека для доступа к моей общедоступной папке контактов на сервере Exchange.
Вот как я создаю контакт.
$api = API::withUsernameAndPassword($server, $user, $pass);
$folder = $api->getFolderByDisplayName('Public', Enumeration\DistinguishedFolderIdNameType::PUBLICFOLDERSROOT);
$contattiTotali = $api->getFolderByDisplayName('Contacts', $folder->getFolderId());
$id=$contattiTotali->getFolderId()->getId();
$api->setFolderId($contattiTotali->getFolderId());
$api->createContacts(array(
'GivenName' => 'Homer',
'Surname' => 'Simpson',
'EmailAddresses' => array(
'Entry' => array('Key' => Enumeration\EmailAddressKeyType::EMAIL_ADDRESS_1, '_value' => 'h.simpson@gmail.com')
),
//Creating multiple entries
'PhoneNumbers' => array(
'Entry' => array(
array('Key' => Enumeration\PhoneNumberKeyType::HOME_PHONE, '_value' => '000'),
array('Key' => Enumeration\PhoneNumberKeyType::BUSINESS_PHONE, '_value' => '111'),
)
),
'PhysicalAddresses' => array(
'Entry' => array(
'Key' => Enumeration\PhysicalAddressKeyType::HOME,
'street' => '123 Street',
'city' => '123 City',
'state' => '123 State',
'countryOrRegion' => '123 Country',
'postalCode' => '12345',
)
),
));
На самом деле код работает нормально, но если я выполню его несколько раз, он дублирует контакт.
Есть ли способ проверить, существует ли уже контакт (адрес электронной почты достаточно хорош), прежде чем создавать новый?
Самый простой способ узнать, существует ли уже контакт с конкретным адресом электронной почты, — использовать операцию ResolveName, например:
$request = new EWSType_ResolveNamesType();
$request->UnresolvedEntry = "address@domain.com";
$request->ReturnFullContactData = true;
$return = $ews->ResolveNames($request);
if ($return->ResponseMessages->ResolveNamesResponseMessage->ResponseCode == "NoError") {
return $return->ResponseMessages->ResolveNamesResponseMessage->ResolutionSet->Resolution->Mailbox->EmailAddress;
}
Других решений пока нет …