lloadout/microsoftgraph

该包提供对 Microsoft Graph API 的包装

v1.15 2024-06-10 07:32 UTC

This package is auto-updated.

Last update: 2024-09-10 08:02:59 UTC


README

Latest Version on Packagist Total Downloads

Microsoft Graph

用例

Laravel 包,用于使用 Microsoft 邮件、OneDrive、Teams、Excel、日历和联系人

该包围绕 Microsoft Graph API 进行包装。

  1. 它提供 Microsoft 邮件的 邮件 驱动器。
  2. 它提供 OneDrive 的存储驱动器。
  3. 它提供与 Microsoft Teams 交互的功能。
  4. 它提供与 Excel 交互的可能性,使其能够读写 Excel 文件。
  5. 它允许您管理 日历 事件。
  6. 它允许您管理 联系人
  7. 它允许您读取和处理 邮件

您需要在 Microsoft Azure Portal 中注册应用程序才能使用此包。按照 Microsoft 文档中的步骤操作:https://docs.microsoft.com/en-us/graph/auth-register-app-v2

安装

您可以通过 composer 安装此包

composer require lloadout/microsoftgraph

将其添加到您的 .env 文件中,并用在 Microsoft Azure Portal 应用程序注册中指定的值填充
如果您在 Azure AD 中创建了多租户应用程序,则不要将您的租户 ID 放入 MS_TENANT_ID 变量中,而是将其设置为 common

MS_TENANT_ID=
MS_CLIENT_ID=
MS_CLIENT_SECRET=
MS_GRAPH_API_VERSION=v1.0
MS_REDIRECT_URL=https://your-url.com/microsoft/callback

连接您的账户

该包使用 OAuth 并提供两个路由

第一个路由会将您重定向到 Microsoft 的同意屏幕

https://your-url.com/microsoft/connect

第二个是您需要在 Microsoft Azure Portal 应用程序注册中指定的回调 URL

https://your-url.com/microsoft/callback

回调将触发 MicrosoftGraphCallbackReceived 事件,您必须在 EventServiceProvider 中监听此事件,并将 accessData 存储到会话变量 microsoftgraph-access-data 中。您可以在此事件的监听器中添加您的令牌存储逻辑。

public function boot()
{
    Event::listen(function (MicrosoftGraphCallbackReceived $event) {
        session()->put('microsoftgraph-access-data', $event->accessData); 
    });
}

该包将搜索名为 microsoftgraph-access-data 的会话变量以建立连接。因此,请在登录时提供此变量,并将其 accessData 作为值存储在会话变量 microsoftgraph-access-data 中。例如:在登录时,您从数据库中获取 accessData 并将其存储到会话变量 microsoftgraph-access-data 中。

邮件使用

配置

您必须提供以下 API 权限:Mail.send

在您的 .env 文件中设置环境变量 MAIL_MAILER

MAIL_MAILER=microsoftgraph

注意:请确保您的发送地址是您同意的地址

使用

Mail::send(new YourMailable());

Mail::raw('The body of my first test message', function($message) {
    $message->to('john@doe.com', 'John Doe')->subject('A mail send via lloadout/microsoftgraph');
});

读取和处理邮件

您必须提供以下 API 权限:Mail.Read, Mail.ReadWrite, Mail.ReadBasic

可用方法

    getMailFolders(): array|GraphResponse|mixed
    getSubFolders(id): array|GraphResponse|mixed
    getMailMessagesFromFolder([folder: string = 'inbox'], [isRead: true = true], [skip: int = 0], [limit: int = 20]): array
    updateMessage(id, data): array|GraphResponse|mixed
    moveMessage(id, destinationId): array|GraphResponse|mixed
    getMessage(id): array|GraphResponse|mixed
    getMessageAttachements(id): array|GraphResponse|mixed
    $mail = app(Mail::class);

    collect($mail->getMailFolders())->each(function($folder){
        echo $folder['displayName']."<br />";
    });

    //get all unread messages from inbox
    collect($mail->getMailMessagesFromFolder('inbox', isRead: false))->each(function($message) use ($mail){
        echo $message['subject']."<br />";
    });
        

存储使用

配置

您必须提供以下 API 权限:Files.ReadWrite.all

将 OneDrive 根添加到您的 .env 文件中

MS_ONEDRIVE_ROOT="me/drive/root"

可用方法

Laravel Storage 门面中所有方法均可用。 https://laravel.net.cn/docs/8.x/filesystem#configuration

使用

该包创建了一个名为 onedrive 的磁盘。这意味着您可以像Laravel文档中描述的那样使用所有方法:[Laravel 文件系统配置](https://laravel.net.cn/docs/8.x/filesystem#configuration)

$disk = Storage::disk('onedrive');
#create a dir
$disk->makeDirectory('Test folder');
#storing files
$disk->put('Test folder/file1.txt','Content of file 1');
$disk->put('Test folder/file2.txt','Content of file 2');
#getting files
Storage::disk('onedrive')->get('Test folder/file1.txt');

团队使用

配置

您必须提供以下API权限:Chat.ReadWrite

可用方法

    getJoinedTeams(): array|GraphResponse|mixed
    getChannels(team): array|GraphResponse|mixed
    getChats(): array|GraphResponse|mixed
    getChat(id): array|GraphResponse|mixed
    getMembersInChat(chat): array|GraphResponse|mixed
    send(teamOrChat, message): array|GraphResponse|mixed

使用

首先实例化Teams类

$teamsClass = new Teams();

获取您是成员的所有团队(需要额外权限:Group.Read.All

$joinedTeams = $teamsClass->getJoinedTeams();

获取团队的所有频道(需要额外权限:Group.Read.All

$channels = $teamsClass->getChannels($team);

获取用户的全部聊天(需要额外权限:Chat.Read.All

$chats = $teamsClass->getChats(); 

通过给定的ID获取聊天(需要额外权限:Chat.Read.All

$chats = $teamsClass->getChat('your-chat-id'); 

获取频道中的所有成员(需要额外权限:ChannelMessage.Read.All

$members = $teamsClass->getMembersInChat($chat));

向频道发送消息(需要额外权限:ChannelMessage.Send

$teamsClass->send($teamOrChat,'Hello world!');

Excel使用

配置

您必须提供以下 API 权限:Files.ReadWrite.all

可用方法

    loadFile(file): void
    loadFileById(fileId): void
    setCellValues(cellRange, values: array): void
    getCellValues(cellRange): array
    recalculate(): void
    createSession(fileId): string

使用

首先实例化Excel类

$excelClass = new Excel();

从OneDrive加载文件

$excelClass->loadFile('Test folder/file1.xlsx');

通过ID加载文件

$excelClass->loadFileById($fileId);

设置范围的单元格值

$values = ['B1' => null, 'B2' => '01.01.23', 'B3' => 3, 'B4' => '250', 'B5' => '120', 'B6' => '30 cm', 'B7' => null, 'B8' => null, 'B9' => null, 'B10' => null, 'B11' => null, 'B12' => 2];
$excelClass->setCellValues('B1:B12', $values);
$excelClass->getCellValues('H1:H20');

日历使用

配置

您必须提供以下API权限:Calendars.ReadWrite

可用方法

    getCalendars(): array
    getCalendarEvents(calendar: Calendar): array
    saveEventToCalendar(calendar: Calendar, event: Event): GraphResponse|mixed
    makeEvent(starttime: string, endtime: string, timezone: string, subject: string, body: string, [attendees: array = [...]], [isOnlineMeeting: bool = false]): Event

使用

首先实例化Calendar类

$calendarClass = new Calendar();

获取所有日历

$calendars = $calendarClass->getCalendars();

获取日历的所有事件

$events = $calendarClass->getCalendarEvents($calendar);

将事件保存到日历,事件对象是MicrosoftGraphEvent对象。我们创建了一个辅助函数来创建事件对象 Calendar::makeEvent(string $starttime, string $endtime, string $timezone, string $subject, string $body, array $attendees = [], bool $isOnlineMeeting = false)

$calendarClass->saveEvent($calendar, $event);

联系人使用

配置

您必须提供以下API权限:Contacts.ReadWrite

可用方法

    getContacts(): array

使用

首先实例化Contacts类

$contactsClass = new Contacts();

获取所有联系人

$contacts = $contactsClass->getContacts();

测试

composer test

变更日志

有关最近更改的更多信息,请参阅变更日志

贡献

有关详细信息,请参阅贡献指南

安全漏洞

有关如何报告安全漏洞,请参阅我们的安全策略

鸣谢

许可协议

MIT 许可协议 (MIT)。有关更多信息,请参阅许可文件