使用PHP从EWS office365获取所有公用文件夹/共享联系人

使用PHP从EWS office365获取所有公用文件夹/共享联系人,php,exchangewebservices,microsoft-graph-api,php-ews,Php,Exchangewebservices,Microsoft Graph Api,Php Ews,我正在从office 365创建一个简单的联系人簿,其中列出了我公司的所有共享联系人。 我也在尝试使用Graph和EWS,但我不知道哪里出了问题 在中搜索似乎没有机会看到我的“其他联系人”->“所有联系人”文件夹。 我一直在尝试使用“/me/contactFolders”端点和“/people”端点。他们中没有一个人给了我结果 我还使用了一个库(该项目是基于Laravel构建的)通过Exchange访问文件夹,但运气不好。 使用,我可以只列出我的联系人,而没有任何机会看到其他文件夹或其他类型的联

我正在从office 365创建一个简单的联系人簿,其中列出了我公司的所有共享联系人。 我也在尝试使用Graph和EWS,但我不知道哪里出了问题

在中搜索似乎没有机会看到我的“其他联系人”->“所有联系人”文件夹。 我一直在尝试使用“/me/contactFolders”端点和“/people”端点。他们中没有一个人给了我结果

我还使用了一个库(该项目是基于Laravel构建的)通过Exchange访问文件夹,但运气不好。 使用,我可以只列出我的联系人,而没有任何机会看到其他文件夹或其他类型的联系人

有人给新手小费吗

提前谢谢。 编辑 这是使用PHP-EWS库的控制器

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use garethp\ews\ContactsAPI as ContactsAPI;

use garethp\ews\API;
use garethp\ews\API\Enumeration;
use garethp\ews\API\Type;
use garethp\ews\API\ExchangeWebServices;
//use garethp\ews\API\ExchangeAutodiscover;
//use garethp\ews\API\Exception\AutodiscoverFailed;
class SharedContatctsController extends Controller
{
    //
    public function index()
    {
      # code...

      $mail='developeremail@example.com';
      $pwd='password';
      $version='Exchange2016';
      //$apiS = ExchangeAutodiscover::getAPI($mail, $pwd);
      //$server=$apiS->getClient()->getServer();
      $server='mail.example.com;
      $api = ContactsAPI::withUsernameAndPassword($server, $mail, $pwd);
      $contacts = $api->getContacts();
      //return print($api->getFolderId());
      //If you want to get contacts within a folder
      //$folder = $api->getFolderByDisplayName('Altri Contatti', 'contacts');
      //$contacts = $api->getContacts($folder->getFolderId());
      return view('shared',array('contacts'=>$contacts,'displayName'=>$contacts['displayName']));
    }

}
这是显示“BackupContacts”文件夹的控制器,该文件夹与“Contact”位于同一目录中


/me/contacts
将仅返回当前用户默认联系人文件夹中的联系人。类似地,
/me/contactFolders
只返回当前用户邮箱的联系人文件夹(如果没有超出默认文件夹的内容,则返回空结果)

这里的关键是
/me
元素。这是
当前已验证用户的同义词person@company.com
既有
/me/联系人
又有
/用户/person@company.com/联系人
将返回完全相同的结果


当前不是检索组织联系人(即存储在GAL中的联系人)的方法从
/v1.0
API集中。但是
/beta
API中有一个对象,因此支持即将到来。

/me/contacts
将仅返回当前用户默认联系人文件夹中的联系人。同样,
/me/contactFolders
将仅返回当前用户邮箱的联系人文件夹x(如果没有超出默认文件夹的内容,则结果为空)

这里的关键是
/me
元素。这是
当前已验证用户的同义词person@company.com
既有
/me/联系人
又有
/用户/person@company.com/联系人
将返回完全相同的结果


当前没有从
/v1.0
API集中检索组织联系人(即存储在GAL中的联系人)的方法。但是
/beta
API中有一个对象,因此支持即将到来。

我们总是很乐意帮助和支持新的编码人员,但您需要首先帮助自己。:-)如果您有问题,请发布您尝试过的内容,并清楚地解释哪些内容不起作用。阅读一个好问题。一定要阅读。抱歉@JayBlanchard。只是编辑以使其更清楚。我们总是很乐意帮助和支持新的编码人员,但您需要首先帮助自己。:-)如果您有问题,请发布您尝试过的内容,并清楚解释哪些内容不起作用,然后提供。读一个好问题。请务必阅读和阅读。抱歉@JayBlanchard。只是编辑了一下,让它更清晰。
<?php

namespace App\Http\Controllers;
use Microsoft\Graph\Graph;
use Microsoft\Graph\Model;
use App\Http\Controllers\Controller;

class OutlookController extends Controller
{
public function contacts()
{
  if (session_status() == PHP_SESSION_NONE) {
    session_start();
  }

  $tokenCache = new \App\TokenStore\TokenCache;

  $graph = new Graph();
  $graph->setAccessToken($tokenCache->getAccessToken());

  $user = $graph->createRequest('GET', '/me')
                ->setReturnType(Model\User::class)
                ->execute();

  $contactsQueryParams = array (
    // // Only return givenName, surname, and emailAddresses fields
    //"\$select" => "displayName,scoredEmailAddresses",
    // Sort by given name
    //"\$orderby" => "givenName ASC",
    // Return at most 10 results
    "\$orderby"=>"displayName",
    "\$top" => "1000"
  );

  $getContactsUrl = '/me/contactFolders/{BackuPlderId-retrieved-with-Graph}/contacts/?'.http_build_query($contactsQueryParams);
  $contacts = $graph->createRequest('GET', $getContactsUrl)
                    ->addHeaders(array ('X-AnchorMailbox' => $user->getMail()))
                    ->setReturnType(Model\Contact::class)
                    ->execute();

  return view('contacts', array(
    'username' => $user->getdisplayName(),
    'usermail' => $user->getMail(),
    'contacts' => $contacts
  ));
}
}