vgrem/php-spo

PHP Office 365 库。它允许通过基于 REST/OData 的 API 对 Office 365 资源执行 CRUD 操作

v3.1.2 2024-04-21 18:46 UTC

README

PHP 版本的 Microsoft 365 库。一个基于 REST/OData 的 Microsoft 365 客户端库。

用法

  1. 安装
  2. 使用 SharePoint API 进行操作
  3. 使用 Teams API 进行操作
  4. 使用 Outlook API 进行操作
  5. 使用 OneDrive API 进行操作

状态

Total Downloads Latest Stable Version Build Status License

安装

您可以使用 Composer 或简单地 下载发行版

Composer

首选方法是通过 composer。如果您尚未安装 composer,请按照 安装说明 进行操作。

安装 composer 后,在项目根目录中执行以下命令以安装此库

composer require vgrem/php-spo

或通过 composer.json 文件

{
    "require": {
        "vgrem/php-spo": "^3"
    }
}

最后,请确保包含自动加载器

require_once '/path/to/your-project/vendor/autoload.php';

要求

PHP 版本: PHP 7.1 或更高版本

使用 SharePoint API 进行操作

支持的 SharePoint 版本列表

  • SharePoint Online 和 OneDrive for Business
  • SharePoint On-Premises (2013-2019)

身份验证

支持以下身份验证流程

1. 应用程序主体与客户端凭据

  use Office365\Runtime\Auth\ClientCredential;
  use Office365\SharePoint\ClientContext;

  $credentials = new ClientCredential("{clientId}", "{clientSecret}");
  $ctx = (new ClientContext("{siteUrl}"))->withCredentials($credentials);

文档

2. 应用程序主体与客户端证书

  use Office365\Runtime\Auth\ClientCredential;
  use Office365\SharePoint\ClientContext;


$tenant = "{tenant}.onmicrosoft.com"; //tenant id or name
$privateKeyPath = "-- path to private.key file--"
$privateKey = file_get_contents($privateKeyPath);

$ctx = (new ClientContext("{siteUrl}"))->withClientCertificate(
    $tenant, "{clientId}", $privateKey, "{thumbprint}");

文档

3. 用户凭据身份验证

  use Office365\Runtime\Auth\UserCredentials;
  use Office365\SharePoint\ClientContext;

  $credentials = new UserCredentials("{userName}", "{password}");
  $ctx = (new ClientContext("{siteUrl}"))->withCredentials($credentials);

4. NTLM 身份验证(适用于 SharePoint On-Premises)

   use Office365\Runtime\Auth\UserCredentials;
   use Office365\SharePoint\ClientContext;

   $credentials = new UserCredentials("{userName}", "{password}");
   $ctx = (new ClientContext("{siteUrl}"))->withNtlm($credentials);

示例

以下示例演示了如何对 SharePoint 列表项资源执行基本的 CRUD 操作

示例 1. 如何读取 SharePoint 列表项

use Office365\SharePoint\ClientContext;
use Office365\Runtime\Auth\ClientCredential;
use Office365\SharePoint\ListItem;

$credentials = new ClientCredential("{client-id}", "{client-secret}");
$client = (new ClientContext("https://{your-tenant-prefix}.sharepoint.com"))->withCredentials($credentials);

$web = $client->getWeb();
$list = $web->getLists()->getByTitle("{list-title}"); //init List resource
$items = $list->getItems();  //prepare a query to retrieve from the
$client->load($items);  //save a query to retrieve list items from the server
$client->executeQuery(); //submit query to SharePoint server
/** @var ListItem $item */
foreach($items as $item) {
    print "Task: {$item->getProperty('Title')}\r\n";
}

或通过流畅 API 语法

use Office365\SharePoint\ClientContext;
use Office365\Runtime\Auth\ClientCredential;
use Office365\SharePoint\ListItem;

$credentials = new ClientCredential("{client-id}", "{client-secret}");
$client = (new ClientContext("https://{your-tenant-prefix}.sharepoint.com"))->withCredentials($credentials);

$items = $client->getWeb()
                ->getLists()
                ->getByTitle("{list-title}")
                ->getItems()
                ->get()
                ->executeQuery();
/** @var ListItem $item */
foreach($items as $item) {
    print "Task: {$item->getProperty('Title')}\r\n";
}

示例 2. 如何创建 SharePoint 列表项

use Office365\SharePoint\ClientContext;
use Office365\Runtime\Auth\ClientCredential;

$credentials = new ClientCredential("{client-id}", "{client-secret}");
$client = (new ClientContext("https://{your-tenant-prefix}.sharepoint.com"))->withCredentials($credentials);

$list = $client->getWeb()->getLists()->getByTitle("Tasks");
$itemProperties = array('Title' => 'Order Approval', 'Body' => 'Order approval task');
$item = $list->addItem($itemProperties)->executeQuery();
print "Task {$item->getProperty('Title')} has been created.\r\n";

示例 3. 如何删除 SharePoint 列表项

use Office365\SharePoint\ClientContext;
use Office365\Runtime\Auth\ClientCredential;

$credentials = new ClientCredential("{client-id}", "{client-secret}");
$client = (new ClientContext("https://{your-tenant-prefix}.sharepoint.com"))->withCredentials($credentials);

$list = $client->getWeb()->getLists()->getByTitle("Tasks");
$listItem = $list->getItemById("{item-id-to-delete}");
$listItem->deleteObject()->executeQuery();

示例 4. 如何更新 SharePoint 列表项

use Office365\SharePoint\ClientContext;
use Office365\Runtime\Auth\ClientCredential;

$credentials = new ClientCredential("{client-id}", "{client-secret}");
$client = (new ClientContext("https://{your-tenant-prefix}.sharepoint.com"))->withCredentials($credentials);

$list = $client->getWeb()->getLists()->getByTitle("Tasks");
$listItem = $list->getItemById("{item-id-to-update}");
$listItem->setProperty('PercentComplete',1);
$listItem->update()->executeQuery();

使用 Teams API 进行操作

示例:创建一个团队

以下是一个创建团队(通过委托权限)的最小请求示例

use Office365\GraphServiceClient;
use Office365\Runtime\Auth\AADTokenProvider;
use Office365\Runtime\Auth\UserCredentials;

function acquireToken()
{
    $tenant = "{tenant}.onmicrosoft.com";
    $resource = "https://graph.microsoft.com";

    $provider = new AADTokenProvider($tenant);
    return $provider->acquireTokenForPassword($resource, "{clientId}",
        new UserCredentials("{UserName}", "{Password}"));
}

$client = new GraphServiceClient("acquireToken");
$teamName = "My Sample Team";
$newTeam = $client->getTeams()->add($teamName)->executeQuery();

使用 Outlook API 进行操作

支持的 API 列表

以下示例演示了如何通过 Outlook 邮件 API 发送消息

 use Office365\GraphServiceClient;
 use Office365\Outlook\Message;
 use Office365\Outlook\ItemBody;
 use Office365\Outlook\BodyType;
 use Office365\Outlook\EmailAddress;
 use Office365\Runtime\Auth\AADTokenProvider;
 use Office365\Runtime\Auth\UserCredentials;

function acquireToken()
{
    $tenant = "{tenant}.onmicrosoft.com";
    $resource = "https://graph.microsoft.com";

    $provider = new AADTokenProvider($tenant);
    return $provider->acquireTokenForPassword($resource, "{clientId}",
        new UserCredentials("{UserName}", "{Password}"));
}

$client = new GraphServiceClient("acquireToken");
/** @var Message $message */
$message = $client->getMe()->getMessages()->createType();
$message->setSubject("Meet for lunch?");
$message->setBody(new ItemBody(BodyType::Text,"The new cafeteria is open."));
$message->setToRecipients([new EmailAddress(null,"fannyd@contoso.onmicrosoft.com")]);
$client->getMe()->sendEmail($message,true)->executeQuery();

使用 OneDrive API 进行操作

以下示例演示了如何通过 OneDrive API 获取我的驱动器 URL

use Office365\GraphServiceClient;
use Office365\Runtime\Auth\AADTokenProvider;
use Office365\Runtime\Auth\UserCredentials;


function acquireToken()
{
    $tenant = "{tenant}.onmicrosoft.com";
    $resource = "https://graph.microsoft.com";

    $provider = new AADTokenProvider($tenant);
    return $provider->acquireTokenForPassword($resource, "{clientId}",
        new UserCredentials("{UserName}", "{Password}"));
}

$client = new GraphServiceClient("acquireToken");
$drive = $client->getMe()->getDrive()->get()->executeQuery();
print $drive->getWebUrl();