使用 Microsoft Graph 建置 PHP 應用程式
本教學課程會教導您如何建置 PHP 控制台應用程式,以使用 Microsoft 圖形 API 代表使用者存取數據。
注意
若要瞭解如何使用 Microsoft Graph 來存取使用僅限應用程式驗證的數據,請參閱本 僅限應用程式的驗證教學課程。
在本教學課程中,您將:
提示
除了遵循本教學課程,您可以透過 快速入 門工具下載已完成的程序代碼,以自動化應用程式註冊和設定。 下載的程式代碼不需要修改即可運作。
您也可以下載或複製 GitHub 存放庫 ,並遵循自述檔中的指示來註冊應用程式並設定專案。
必要條件
開始本教學課程之前,您應該已在開發計算機上安裝 PHP 和 Composer 。
您也應該有具有 Exchange Online 信箱Microsoft公司或學校帳戶。 如果您沒有Microsoft 365 租使用者,您可能有資格透過 Microsoft 365 開發人員計劃;如需詳細資訊,請參閱 常見問題。 或者,您可以 註冊 1 個月的免費試用版,或購買Microsoft 365 方案。
注意
本教學課程是以 PHP 8.1.5 版和 Composer 2.3.5 版所撰寫。 本指南中的步驟可能適用於其他版本,但尚未經過測試。
在入口網站中註冊應用程式
在此練習中,您將在 Azure Active Directory 中註冊新的應用程式,以啟用 用戶驗證。 您可以使用 Microsoft Entra 系統管理中心或使用 Microsoft Graph PowerShell SDK 來註冊應用程式。
註冊應用程式以進行用戶驗證
在本節中,您將使用 裝置程式代碼流程註冊支援使用者驗證的應用程式。
開啟瀏覽器並流覽至 Microsoft Entra 系統管理中心 ,並使用全域系統管理員帳戶登入。
選Microsoft左側導覽中的 [Entra ID ],依序展開 [ 身分識別]、[ 應用程式],然後選取 [ 應用程式註冊]。
選取 [新增註冊]。 輸入應用程式名稱,例如
Graph User Auth Tutorial
。視需要設定 支持的帳戶類型 。 選項如下:
選項 誰可以登入? 僅限此組織目錄中的帳戶 只有您Microsoft 365 組織中的使用者 任何組織目錄中的帳戶 任何Microsoft 365 組織中的使用者 (公司或學校帳戶) 任何組織目錄中的帳戶...和個人Microsoft帳戶 任何Microsoft 365 組織中的使用者 (公司或學校帳戶) 和個人Microsoft帳戶 將 [重新導向 URI ] 保留空白。
選取 [登錄]。 在應用程式的 [ 概觀] 頁面上,將應用程式 (用戶端的值複製 ) 標識 符並加以儲存,您將在下一個步驟中加以儲存。 如果您只針對支持的帳戶類型選擇 [此組織目錄中的帳戶],也請複製 [目錄 (租使用者) 標識符並加以儲存。
選取管理下的驗證。 找出 [ 進階設定] 區 段,並將 [ 允許公用用戶端流程 ] 切換為 [ 是],然後選擇 [ 儲存]。
注意
請注意,您未在應用程式註冊上設定任何 Microsoft Graph 許可權。 這是因為範例會使用 動態同意 來要求使用者驗證的特定許可權。
建立 PHP 主控台應用程式
從初始化新的 Composer 項目開始。 在您要建立項目的目錄中, (CLI) 開啟命令行介面。 執行下列指令:
composer init
回答提示。 您可以接受大部分問題的預設值,但回應 n
下列事項:
Would you like to define your dependencies (require) interactively [yes]? n
Would you like to define your dev dependencies (require-dev) interactively [yes]? n
Add PSR-4 autoload mapping? Maps namespace "Microsoft\Graphtutorial" to the entered relative path. [src/, n to skip]: n
安裝相依性
繼續之前,請新增一些您稍後將使用的額外相依性。
- Microsoft Graph SDK for PHP 呼叫 Microsoft Graph。
- vlucas/phpdotenv ,用於從 .env 檔案讀取環境變數。
在 CLI 中執行下列命令以安裝相依性。
composer require microsoft/microsoft-graph vlucas/phpdotenv
載入應用程式設定
在本節中,您會將應用程式註冊的詳細數據新增至專案。
在專案根目錄中建立名為 .env 的檔案,並新增下列程序代碼。
CLIENT_ID=YOUR_CLIENT_ID_HERE TENANT_ID=common GRAPH_USER_SCOPES='user.read mail.read mail.send'
根據下表更新值。
設定 值 CLIENT_ID
應用程式註冊的用戶端識別碼 TENANT_ID
如果您選擇只允許組織中的使用者登入的選項,請將此值變更為您的租使用者識別碼。 否則,請保留為 common
。重要
如果您使用 git 之類的原始檔控制,現在是將 .env 檔案從原始檔控制中排除的好時機,以避免不小心洩漏您的應用程式識別符。
設計應用程式
在本節中,您將建立簡單的控制台型功能表。
在專案根目錄中建立名為 main.php 的檔案。 新增開頭和結尾 PHP 標籤。
<?php ?>
在 PHP 標記之間新增下列程式代碼。
// Enable loading of Composer dependencies require_once realpath(__DIR__ . '/vendor/autoload.php'); require_once 'GraphHelper.php'; print('PHP Graph Tutorial'.PHP_EOL.PHP_EOL); // Load .env file $dotenv = Dotenv\Dotenv::createImmutable(__DIR__); $dotenv->load(); $dotenv->required(['CLIENT_ID', 'TENANT_ID', 'GRAPH_USER_SCOPES']); initializeGraph(); greetUser(); $choice = -1; while ($choice != 0) { echo('Please choose one of the following options:'.PHP_EOL); echo('0. Exit'.PHP_EOL); echo('1. Display access token'.PHP_EOL); echo('2. List my inbox'.PHP_EOL); echo('3. Send mail'.PHP_EOL); echo('4. Make a Graph call'.PHP_EOL); $choice = (int)readline(''); switch ($choice) { case 1: displayAccessToken(); break; case 2: listInbox(); break; case 3: sendMail(); break; case 4: makeGraphCall(); break; case 0: default: print('Goodbye...'.PHP_EOL); } }
在關閉 PHP 標記之前,於檔案結尾處新增下列佔位符方法。 您將在後續步驟中實作它們。
function initializeGraph(): void { // TODO } function greetUser(): void { // TODO } function displayAccessToken(): void { // TODO } function listInbox(): void { // TODO } function sendMail(): void { // TODO } function makeGraphCall(): void { // TODO }
這會實作基本功能表,並從命令行讀取用戶的選擇。
新增用戶驗證
在本節中,您將擴充上一個練習中的應用程式,以支援使用 Azure AD 進行驗證。 這是取得必要的 OAuth 存取令牌以呼叫 Microsoft Graph 的必要專案。
建立存取令牌提供者
Microsoft Graph SDK 包含以 PHP 聯盟 OAuth2 客戶端為基礎的驗證提供者。 不過,在本教學課程中,您將使用 裝置程式代碼流程 來取得存取令牌。 包含的驗證提供者不會實作此流程,因此您將實作自定義存取令牌提供者。
在專案根目錄中建立名為 DeviceCodeTokenProvider.php 的新檔案。 新增下列程式碼。
<?php // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. use GuzzleHttp\Client; use Http\Promise\FulfilledPromise; use Http\Promise\Promise; use Http\Promise\RejectedPromise; use Microsoft\Kiota\Abstractions\Authentication\AccessTokenProvider; use Microsoft\Kiota\Abstractions\Authentication\AllowedHostsValidator; class DeviceCodeTokenProvider implements AccessTokenProvider { private string $clientId; private string $tenantId; private string $scopes; private AllowedHostsValidator $allowedHostsValidator; private string $accessToken; private Client $tokenClient; public function __construct(string $clientId, string $tenantId, string $scopes) { $this->clientId = $clientId; $this->tenantId = $tenantId; $this->scopes = $scopes; $this->allowedHostsValidator = new AllowedHostsValidator(); $this->allowedHostsValidator->setAllowedHosts([ "graph.microsoft.com", "graph.microsoft.us", "dod-graph.microsoft.us", "graph.microsoft.de", "microsoftgraph.chinacloudapi.cn" ]); $this->tokenClient = new Client(); } public function getAuthorizationTokenAsync(string $url, array $additionalAuthenticationContext = []): Promise { $parsedUrl = parse_url($url); $scheme = $parsedUrl["scheme"] ?? null; if ($scheme !== 'https' || !$this->getAllowedHostsValidator()->isUrlHostValid($url)) { return new FulfilledPromise(null); } // If we already have a user token, just return it // Tokens are valid for one hour, after that it needs to be refreshed if (isset($this->accessToken)) { return new FulfilledPromise($this->accessToken); } // https://learn.microsoft.com/azure/active-directory/develop/v2-oauth2-device-code $deviceCodeRequestUrl = 'https://login.microsoftonline.com/'.$this->tenantId.'/oauth2/v2.0/devicecode'; $tokenRequestUrl = 'https://login.microsoftonline.com/'.$this->tenantId.'/oauth2/v2.0/token'; // First POST to /devicecode $deviceCodeResponse = json_decode($this->tokenClient->post($deviceCodeRequestUrl, [ 'form_params' => [ 'client_id' => $this->clientId, 'scope' => $this->scopes ] ])->getBody()->getContents()); // Display the user prompt print($deviceCodeResponse->message.PHP_EOL); // Response also indicates how often to poll for completion // And gives a device code to send in the polling requests $interval = (int)$deviceCodeResponse->interval; $device_code = $deviceCodeResponse->device_code; // Do polling - if attempt times out the token endpoint // returns an error while (true) { sleep($interval); // POST to the /token endpoint $tokenResponse = $this->tokenClient->post($tokenRequestUrl, [ 'form_params' => [ 'client_id' => $this->clientId, 'grant_type' => 'urn:ietf:params:oauth:grant-type:device_code', 'device_code' => $device_code ], // These options are needed to enable getting // the response body from a 4xx response 'http_errors' => false, 'curl' => [ CURLOPT_FAILONERROR => false ] ]); if ($tokenResponse->getStatusCode() == 200) { // Return the access_token $responseBody = json_decode($tokenResponse->getBody()->getContents()); $this->accessToken = $responseBody->access_token; return new FulfilledPromise($responseBody->access_token); } else if ($tokenResponse->getStatusCode() == 400) { // Check the error in the response body $responseBody = json_decode($tokenResponse->getBody()->getContents()); if (isset($responseBody->error)) { $error = $responseBody->error; // authorization_pending means we should keep polling if (strcmp($error, 'authorization_pending') != 0) { return new RejectedPromise( new Exception('Token endpoint returned '.$error, 100)); } } } } } public function getAllowedHostsValidator(): AllowedHostsValidator { return $this->allowedHostsValidator; } } ?>
設定 Graph 用戶端以進行用戶驗證
在本節中, DeviceCodeTokenProvider
您將使用 類別,使用 裝置程式代碼流程來要求存取令牌。
在專案根目錄中建立名為 GraphHelper.php 的新檔案。 新增下列程式碼。
<?php class GraphHelper { } ?>
在 PHP 標籤新增下列
using
語句。use Microsoft\Graph\Generated\Models; use Microsoft\Graph\Generated\Users\Item\MailFolders\Item\Messages\MessagesRequestBuilderGetQueryParameters; use Microsoft\Graph\Generated\Users\Item\MailFolders\Item\Messages\MessagesRequestBuilderGetRequestConfiguration; use Microsoft\Graph\Generated\Users\Item\SendMail\SendMailPostRequestBody; use Microsoft\Graph\Generated\Users\Item\UserItemRequestBuilderGetQueryParameters; use Microsoft\Graph\Generated\Users\Item\UserItemRequestBuilderGetRequestConfiguration; use Microsoft\Graph\GraphRequestAdapter; use Microsoft\Graph\GraphServiceClient; use Microsoft\Kiota\Abstractions\Authentication\BaseBearerTokenAuthenticationProvider; require_once 'DeviceCodeTokenProvider.php';
將下列程式碼新增至
GraphHelper
類別。private static string $clientId = ''; private static string $tenantId = ''; private static string $graphUserScopes = ''; private static DeviceCodeTokenProvider $tokenProvider; private static GraphServiceClient $userClient; public static function initializeGraphForUserAuth(): void { GraphHelper::$clientId = $_ENV['CLIENT_ID']; GraphHelper::$tenantId = $_ENV['TENANT_ID']; GraphHelper::$graphUserScopes = $_ENV['GRAPH_USER_SCOPES']; GraphHelper::$tokenProvider = new DeviceCodeTokenProvider( GraphHelper::$clientId, GraphHelper::$tenantId, GraphHelper::$graphUserScopes); $authProvider = new BaseBearerTokenAuthenticationProvider(GraphHelper::$tokenProvider); $adapter = new GraphRequestAdapter($authProvider); GraphHelper::$userClient = GraphServiceClient::createWithRequestAdapter($adapter); }
以下列內容取代 main.php 中的空白
initializeGraph
函式。function initializeGraph(): void { GraphHelper::initializeGraphForUserAuth(); }
此程式代碼會從 .env 檔案載入資訊,並初始化兩個DeviceCodeTokenProvider
GraphServiceClient
屬性:對象和物件。 物件 DeviceCodeTokenProvider
將用來要求存取令牌,而 GraphServiceClient
對象將用來呼叫 Microsoft Graph。
測試裝置程式代碼流程
接下來,新增程式代碼以從 GraphHelper
取得存取令牌。
將下列函式新增至
GraphHelper
類別。public static function getUserToken(): string { return GraphHelper::$tokenProvider ->getAuthorizationTokenAsync('https://graph.microsoft.com')->wait(); }
以下列內容取代 main.php 中的空白
displayAccessToken
函式。function displayAccessToken(): void { try { $token = GraphHelper::getUserToken(); print('User token: '.$token.PHP_EOL.PHP_EOL); } catch (Exception $e) { print('Error getting access token: '.$e->getMessage().PHP_EOL.PHP_EOL); } }
建置並執行應用程式。 當系統提示您輸入選項時,請輸入
1
。 應用程式會顯示 URL 和裝置程式代碼。$ php main.php PHP Graph Tutorial Please choose one of the following options: 0. Exit 1. Display access token 2. List my inbox 3. Send mail 4. Make a Graph call 1 To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code RB2RUD56D to authenticate.
開啟瀏覽器並瀏覽至顯示的 URL。 輸入提供的程式代碼並登入。
重要
流覽至
https://microsoft.com/devicelogin
時,請留意任何已登入瀏覽器的現有Microsoft 365 帳戶。 使用瀏覽器功能,例如配置檔、來賓模式或私人模式,以確保您驗證為您想要用於測試的帳戶。完成後,返回應用程式以查看存取令牌。
提示
僅供驗證和偵錯之用,您只能在 使用 Microsoft 的在線令牌剖析器https://jwt.ms,將公司或學校帳戶 (的使用者存取令牌譯碼) 。 如果您在呼叫 Microsoft Graph 時遇到令牌錯誤,這會很有用。 例如,確認
scp
令牌中的宣告包含預期的 Microsoft Graph 許可權範圍。
取得使用者
在本節中,您會將 Microsoft Graph 併入應用程式。 針對此應用程式,您將使用 Microsoft Graph SDK for PHP 來呼叫 Microsoft Graph。
將下列程式碼新增至
GraphHelper
類別。public static function getUser(): Models\User { $configuration = new UserItemRequestBuilderGetRequestConfiguration(); $configuration->queryParameters = new UserItemRequestBuilderGetQueryParameters(); $configuration->queryParameters->select = ['displayName','mail','userPrincipalName']; return GraphHelper::$userClient->me()->get($configuration)->wait(); }
以下列內容取代 main.php 中的空白
greetUser
函式。function greetUser(): void { try { $user = GraphHelper::getUser(); print('Hello, '.$user->getDisplayName().'!'.PHP_EOL); // For Work/school accounts, email is in Mail property // Personal accounts, email is in UserPrincipalName $email = $user->getMail(); if (empty($email)) { $email = $user->getUserPrincipalName(); } print('Email: '.$email.PHP_EOL.PHP_EOL); } catch (Exception $e) { print('Error getting user: '.$e->getMessage().PHP_EOL.PHP_EOL); } }
如果您現在執行應用程式,在您登入應用程式之後,會依名稱歡迎您。
Hello, Megan Bowen!
Email: MeganB@contoso.com
程式代碼說明
請考慮函式中的程序 getUser
代碼。 這隻是幾行,但有一些重要詳細數據需要注意。
存取 'me'
函式會建置對 Get 使用者 API 的要求。 此 API 有兩種方式可供存取:
GET /me
GET /users/{user-id}
在此情況下,程式代碼會呼叫 GET /me
API 端點。 這是在不知道使用者標識碼的情況下取得已驗證使用者的快捷方式。
注意
GET /me
因為 API 端點會取得已驗證的使用者,所以它只適用於使用使用者驗證的應用程式。 僅限應用程式的驗證應用程式無法存取此端點。
要求特定屬性
函式會使用 $select 查詢參數 來指定所需的屬性集。
強型別傳回型別
函式會傳回 User
從 API 的 JSON 回應還原串行化的物件。 因為程式代碼使用 $select
,所以只有要求的屬性在傳回 User
的物件中會有值。 所有其他屬性都會有預設值。
清單收件匣
在本節中,您將新增在使用者的電子郵件收件匣中列出訊息的功能。
將下列程式碼新增至
GraphHelper
類別。public static function getInbox(): Models\MessageCollectionResponse { $configuration = new MessagesRequestBuilderGetRequestConfiguration(); $configuration->queryParameters = new MessagesRequestBuilderGetQueryParameters(); // Only request specific properties $configuration->queryParameters->select = ['from','isRead','receivedDateTime','subject']; // Sort by received time, newest first $configuration->queryParameters->orderby = ['receivedDateTime DESC']; // Get at most 25 results $configuration->queryParameters->top = 25; return GraphHelper::$userClient->me() ->mailFolders() ->byMailFolderId('inbox') ->messages() ->get($configuration)->wait(); }
以下列內容取代 main.php 中的空白
listInbox
函式。function listInbox(): void { try { $messages = GraphHelper::getInbox(); // Output each message's details foreach ($messages->getValue() as $message) { print('Message: '.$message->getSubject().PHP_EOL); print(' From: '.$message->getFrom()->getEmailAddress()->getName().PHP_EOL); $status = $message->getIsRead() ? "Read" : "Unread"; print(' Status: '.$status.PHP_EOL); print(' Received: '.$message->getReceivedDateTime()->format(\DateTimeInterface::RFC2822).PHP_EOL); } $nextLink = $messages->getOdataNextLink(); $moreAvailable = isset($nextLink) && $nextLink != '' ? 'True' : 'False'; print(PHP_EOL.'More messages available? '.$moreAvailable.PHP_EOL.PHP_EOL); } catch (Exception $e) { print('Error getting user\'s inbox: '.$e->getMessage().PHP_EOL.PHP_EOL); } }
執行應用程式、登入,然後選擇選項 2 來列出您的收件匣。
Please choose one of the following options: 0. Exit 1. Display access token 2. List my inbox 3. Send mail 4. Make a Graph call 2 Message: Updates from Ask HR and other communities From: Contoso Demo on Yammer Status: Read Received: Mon, 18 Apr 2022 14:24:16 +0000 Message: Employee Initiative Thoughts From: Patti Fernandez Status: Read Received: Mon, 18 Apr 2022 13:52:03 +0000 Message: Voice Mail (11 seconds) From: Alex Wilber Status: Unread Received: Wed, 13 Apr 2022 02:30:27 +0000 Message: Our Spring Blog Update From: Alex Wilber Status: Unread Received: Tue, 12 Apr 2022 16:46:01 +0000 Message: Atlanta Flight Reservation From: Alex Wilber Status: Unread Received: Mon, 11 Apr 2022 13:39:10 +0000 Message: Atlanta Trip Itinerary - down time From: Alex Wilber Status: Unread Received: Fri, 08 Apr 2022 18:36:01 +0000 ... More messages available? True
程式代碼說明
請考慮函式中的程序 getInbox
代碼。
存取已知的郵件資料夾
函式會傳遞 /me/mailFolders/inbox/messages
至要求產生器,以建置 對清單訊息 API 的要求。 因為它包含 區 /mailFolders/inbox
段,所以 API 只會傳回所要求郵件資料夾中的訊息。 在此情況下,由於收件匣是使用者信箱內的預設已知資料夾,因此可透過其已知名稱存取。 非預設資料夾的存取方式相同,方法是將已知名稱取代為郵件資料夾的ID屬性。 如需可用已知資料夾名稱的詳細資訊,請參閱 mailFolder 資源類型。
存取集合
不同於 getUser
上一節傳回單一物件的 函式,這個方法會傳回訊息的集合。 Microsoft Graph 中傳回集合的大部分 API 不會在單一回應中傳回所有可用的結果。 相反地,他們會使用 分頁 來傳回部分結果,同時提供方法讓用戶端要求下一個「頁面」。
默認頁面大小
使用分頁的 API 會實作預設頁面大小。 對於訊息,預設值為10。 用戶端可以使用 $top 查詢參數來要求更多 (或更少 ) 。 在 getInbox
中,這是使用 queryParameters->top
查詢參數中的 屬性來完成。
注意
傳入的 queryParameters->top
值是上限,而不是明確的數位。 API 會傳回一些訊息 ,最多可達 指定的值。
取得後續頁面
如果伺服器上有更多可用的結果,集合回應會包含具有 @odata.nextLink
API URL 的屬性,以存取下一頁。 PHP SDK 會將這個 公開為 getOdataNextLink
集合要求物件上的 方法。 如果這個方法傳回非空字串,則會有更多可用的結果。 如需詳細資訊,請參閱 使用 Microsoft Graph SDK 逐頁流覽集合。
排序集合
函式會使用 $orderby 查詢參數 ,要求在收到訊息 (屬性) receivedDateTime
時排序的結果。 它包含 DESC
關鍵詞,因此會先列出最近收到的訊息。
傳送郵件
在本節中,您將新增以已驗證使用者身分傳送電子郵件訊息的功能。
將下列程式碼新增至
GraphHelper
類別。public static function sendMail(string $subject, string $body, string $recipient): void { $message = new Models\Message(); $message->setSubject($subject); $itemBody = new Models\ItemBody(); $itemBody->setContent($body); $itemBody->setContentType(new Models\BodyType(Models\BodyType::TEXT)); $message->setBody($itemBody); $email = new Models\EmailAddress(); $email->setAddress($recipient); $to = new Models\Recipient(); $to->setEmailAddress($email); $message->setToRecipients([$to]); $sendMailBody = new SendMailPostRequestBody(); $sendMailBody->setMessage($message); GraphHelper::$userClient->me()->sendMail()->post($sendMailBody)->wait(); }
以下列內容取代 main.php 中的空白
sendMail
函式。function sendMail(): void { try { // Send mail to the signed-in user // Get the user for their email address $user = GraphHelper::getUser(); // For Work/school accounts, email is in Mail property // Personal accounts, email is in UserPrincipalName $email = $user->getMail(); if (empty($email)) { $email = $user->getUserPrincipalName(); } GraphHelper::sendMail('Testing Microsoft Graph', 'Hello world!', $email); print(PHP_EOL.'Mail sent.'.PHP_EOL.PHP_EOL); } catch (Exception $e) { print('Error sending mail: '.$e->getMessage().PHP_EOL.PHP_EOL); } }
執行應用程式、登入,然後選擇選項 3 將電子郵件傳送給您自己。
Please choose one of the following options: 0. Exit 1. Display access token 2. List my inbox 3. Send mail 4. Make a Graph call 3 Mail sent.
注意
如果您使用 Microsoft 365 開發人員計劃中的開發人員租用戶進行測試,您傳送的電子郵件可能不會傳遞,而且您可能會收到未傳遞的報告。 如果您遇到這種情況,請透過 Microsoft 365 系統管理中心連絡支持人員。
若要確認已收到訊息,請選擇選項 2 以列出您的收件匣。
程式代碼說明
請考慮函式中的程序 sendMail
代碼。
傳送郵件
函式會使用 $userClient->me()->sendMail()
要求產生器,以建置傳 送郵件 API 的要求。 要求產生器會接受包含要傳送之訊息的要求本文。
建立物件
不同於先前對僅讀取數據的 Microsoft Graph 呼叫,此呼叫會建立數據。 若要使用用戶端連結庫來執行這項操作,請建立代表數據的關聯數位、設定所需的屬性,然後在 API 呼叫中傳送它。 因為呼叫正在傳送資料,所以 POST
會使用 方法, GET
而不是 。
選擇性:新增您自己的程序代碼
在本節中,您會將自己的 Microsoft Graph 功能新增至應用程式。 這可能是來自 Microsoft Graph 檔 或 Graph 總管的代碼段,或您所建立的程式碼。 此區段為選擇性。
更新應用程式
將下列程式碼新增至
GraphHelper
類別。public static function makeGraphCall(): void { // INSERT YOUR CODE HERE }
以下列內容取代 main.php 中的空白
makeGraphCall
函式。function makeGraphCall(): void { try { GraphHelper::makeGraphCall(); } catch (Exception $e) { print(PHP_EOL.'Error making Graph call'.PHP_EOL.PHP_EOL); } }
選擇 API
在您想要嘗試Microsoft圖形中尋找 API。 例如, 建立事件 API。 您可以使用 API 檔中的其中一個範例,或建立您自己的 API 要求。
設定許可權
請查看所選取 API 參考檔的 [許可權] 區段, 以查看支援哪些驗證方法。 例如,某些 API 不支援僅限應用程式或個人Microsoft帳戶。
- 若要使用使用者驗證來呼叫 API (如果 API 支援使用者 (委派的) 驗證) ,請在 .env 中新增必要的許可權範圍。
- 若要使用僅限應用程式驗證來呼叫 API,請參閱 僅限應用程式驗證 教學課程。
新增您的程序代碼
將您的程式代碼新增至 makeGraphCall
GraphHelper.php 中的函 式。
恭喜!
您已完成 PHP Microsoft Graph 教學課程。 既然您有一個可呼叫 Microsoft Graph 的工作應用程式,您可以實驗並新增新功能。
- 瞭解如何搭配使用 僅限應用程式驗證 與 Microsoft Graph PHP SDK。
- 請造訪 Microsoft Graph 概觀 ,以查看您可以使用 Microsoft Graph 存取的所有數據。
PHP 範例
在這個區段有遇到問題嗎? 如果有,請提供意見反應,好讓我們可以改善這個區段。