PHP - MySQL的进行同步联系人与Exchange(PHP - Syncing MySQL

2019-07-29 03:56发布

作为一个PHP Web应用程序的一部分,我有MySQL的联系人表。 它是整个应用程序集成,使您添加联系人,编辑联系人或添加联系人作为关系到另一个表。 但是,目前它是自包含的。 该公司希望它与Exchange同步,以便加入到交换联系人将显示在web应用程序和web应用程序添加的联系人将显示通过Exchange。

所以,我有两个问题:1)与Exchange 2通信)与Exchange同步。

至于基本的沟通得好,它看起来像这个库将能够管理它https://github.com/jamesiarmes/php-ews 。 不过,我完全迷失了方向,以如何管理同步,不从哪里开始。

Answer 1:

在内置的方式来同步项目是通过函数调用SyncFolderItems 。 基本上到Exchange的一切,包括联系人是一个文件夹,所以你只是通过CONTACTSDistinguishedFolderId在同步请求。

同步的工作原理是在donloading最大512元的批次定帐户中的所有项目和每一批之后它给你SyncState作为refernce点兑换知道你离开的地方。 所以,它给你做增量同步的能力。

现在,这当然是一种方式,这意味着外汇 - >您的DB。 另一种方法是aeound你应该瓶坯原子更新/请求-更改/添加/删除项目形成你的数据库的那一刻,你应该发出足够的请求,Exchange服务器,以保持数据同步,elese它会在你的下一个被覆盖SyncFolderItems

你可以更多阅读了关于SyncFolderItems @ MSDN

如果你想看到的例子SyncFolderItems你可以看看@ EWSWrapper的Python版本 ,它已经在最近增加。 虽然这是蟒蛇,你仍然可以得到基本的想法如何构建请求/响应处理。

希望这可以帮助 :)



Answer 2:

我知道这个话题很老。 然而,以供将来参考下面找到一个解决方案。 它使用上述库PHP-EWS。

我也刚刚加入这个官方的php-EWS维基: https://github.com/jamesiarmes/php-ews/wiki/Calendar:-Synchronization

// Define EWS
$ews = new ExchangeWebServices($host, $username, $password, $version);

// fill with string from last sync
$sync_state = null;

$request = new EWSType_SyncFolderItemsType;
$request->SyncState = $sync_state;
$request->MaxChangesReturned = 512;
$request->ItemShape = new EWSType_ItemResponseShapeType;
$request->ItemShape->BaseShape = EWSType_DefaultShapeNamesType::ALL_PROPERTIES;

$request->SyncFolderId = new EWSType_NonEmptyArrayOfBaseFolderIdsType;
$request->SyncFolderId->DistinguishedFolderId = new EWSType_DistinguishedFolderIdType;
$request->SyncFolderId->DistinguishedFolderId->Id = EWSType_DistinguishedFolderIdNameType::CALENDAR;

$response = $ews->SyncFolderItems($request);

$sync_state = $response->ResponseMessages->SyncFolderItemsResponseMessage->SyncState;
$changes = $response->ResponseMessages->SyncFolderItemsResponseMessage->Changes;

// created events
if(property_exists($changes, 'Create')) {
    foreach($changes->Create as $event) {
        $id = $event->CalendarItem->ItemId->Id;
        $change_key = $event->CalendarItem->ItemId->ChangeKey;
        $start = $event->CalendarItem->Start;
        $end = $event->CalendarItem->End;
        $subject = $event->CalendarItem->Subject;
    }
}

// updated events
if(property_exists($changes, 'Update')) {
    foreach($changes->Update as $event) {
        $id = $event->CalendarItem->ItemId->Id;
        $change_key = $event->CalendarItem->ItemId->ChangeKey;
        $start = $event->CalendarItem->Start;
        $end = $event->CalendarItem->End;
        $subject = $event->CalendarItem->Subject;
    }
}

// deleted events
if(property_exists($changes, 'Delete')) {
    foreach($changes->Delete as $event) {
        $id = $event->CalendarItem->ItemId->Id;
        $change_key = $event->CalendarItem->ItemId->ChangeKey;
        $start = $event->CalendarItem->Start;
        $end = $event->CalendarItem->End;
        $subject = $event->CalendarItem->Subject;
    }
}


文章来源: PHP - Syncing MySQL Contacts with Exchange