lloadout / microsoftgraph
该包提供对 Microsoft Graph API 的包装
Requires
- php: ^8.1
- ext-fileinfo: *
- illuminate/contracts: ^9|^10.0|^11.0
- microsoft/microsoft-graph: ^1.89
- socialiteproviders/microsoft: ^4.2
- spatie/laravel-package-tools: ^1.14.0
Requires (Dev)
- laravel/pint: ^1.10
- nunomaduro/larastan: ^2.0
- orchestra/testbench: ^6.15|^8.0
README
Microsoft Graph
用例
Laravel 包,用于使用 Microsoft 邮件、OneDrive、Teams、Excel、日历和联系人
该包围绕 Microsoft Graph API 进行包装。
- 它提供 Microsoft 邮件的 邮件 驱动器。
- 它提供 OneDrive 的存储驱动器。
- 它提供与 Microsoft Teams 交互的功能。
- 它提供与 Excel 交互的可能性,使其能够读写 Excel 文件。
- 它允许您管理 日历 事件。
- 它允许您管理 联系人。
- 它允许您读取和处理 邮件。
您需要在 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)。有关更多信息,请参阅许可文件