使用Microsoft Graph API生成Teams会议URL的技术问题求助
需求
实现一段PHP脚本,调用页面时返回包含每次生成的Teams会议URL的JSON文件。
初始错误
Fatal error: Uncaught Microsoft\Graph\Generated\Models\ODataErrors\ODataError in C:\xampp\htdocs\teamsapi\vendor\microsoft\microsoft-graph\src\Generated\Models\ODataErrors\ODataError.php:36 Stack trace: #0 C:\xampp\htdocs\teamsapi\vendor\microsoft\kiota-serialization-json\src\JsonParseNode.php(108): Microsoft\Graph\Generated\Models\ODataErrors\ODataError::createFromDiscriminatorValue(Object(Microsoft\Kiota\Serialization\Json\JsonParseNode)) #1 C:\xampp\htdocs\teamsapi\vendor\microsoft\kiota-http-guzzle\src\GuzzleRequestAdapter.php(666): Microsoft\Kiota\Serialization\Json\JsonParseNode->getObjectValue(Array) #2 C:\xampp\htdocs\teamsapi\vendor\microsoft\kiota-http-guzzle\src\GuzzleRequestAdapter.php(160): Microsoft\Kiota\Http\GuzzleRequestAdapter->throwFailedResponse(Object(GuzzleHttp\Psr7\Response), Array, Object(OpenTelemetry\API\Trace\NonRecordingSpan)) #3 C:\xampp\htdocs\teamsapi\vendor\php-http\promise\src\FulfilledPromise.php(39): Microsoft\Kiota\Http\GuzzleRequestAdapter->Microsoft\Kiota\Http{closure}(Object(GuzzleH in C:\xampp\htdocs\teamsapi\vendor\microsoft\microsoft-graph\src\Generated\Models\ODataErrors\ODataError.php on line 36
已完成的Azure配置操作
- 使用管理员账号创建企业应用(也测试过App Registrations,均无效)
- 添加以下权限并授予Admin Consent:Calendars.ReadWrite、Mail.ReadWrite、OnlineMeetings.ReadWrite.All、User.Read、User.ReadWrite.All、VirtualEvent.Read.All
- 添加单页应用重定向URL:
http://localhost/teamspai/index.php - 测试Multitenant和Singletenant模式,均无效
- 通过PowerShell执行
New-CsApplicationAccessPolicy和Grant-CsApplicationAccessPolicy .. -Global配置访问权限
使用的PHP代码
<?php include_once('vendor/autoload.php'); use Microsoft\Graph\GraphServiceClient; use Microsoft\Kiota\Abstractions\ApiException; use Microsoft\Kiota\Authentication\Oauth\ClientCredentialContext; use Microsoft\Graph\Generated\Models\OnlineMeeting; $scopes = ['https://graph.microsoft.com/.default']; $tenantId = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; $clientId = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; $clientSecret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; $tokenRequestContext = new ClientCredentialContext( $tenantId, $clientId, $clientSecret ); $graphServiceClient = new GraphServiceClient($tokenRequestContext); $requestBody = new OnlineMeeting(); $result = $graphServiceClient->me()->onlineMeetings()->post($requestBody)->wait(); echo json_encode($result); ?>
已尝试的解决方法
- 添加权限
- 切换单/多租户模式
- 配置Access Policy
- 降级MSGraph版本
- 创建新应用
当前状态(编辑补充)
将调用改为byUserId后错误消失,但返回空JSON:{}
内容的提问来源于stack exchange,提问作者Santos

