簡體   English   中英

如何使用outlook rest api訪問outlook通訊錄

[英]How to access outlook address book using outlook rest api

我想通過outlook rest api訪問一個組織的全球通訊錄

我能夠使用 OAUTH2 實現單點登錄部分,但我無法理解如何訪問聯系人對象

我已經經歷了這個和許多其他例子,但無法理解如何在 PHP 中實現它們

首先,如果你想使用rest api訪問outlook聯系人,目前微軟建議客戶使用Microsoft Graph 更多詳情請參考文檔

其次,關於如何通過php應用獲取outlook conatcts,需要使用oauth2-client添加Azure AD身份驗證並獲取Azure AD訪問令牌,然后調用api獲取訪問令牌的聯系人。 例如,請參考以下步驟了解如何在 php web application 中實現

  1. 注冊 Azure AD 應用程序

  2. 配置您的應用程序所需的應用程序權限在此處輸入圖片說明 在此處輸入圖片說明

  3. 使用 SDK oauth2-client實現 Azure AD 身份驗證創建一個.env文件

    OAUTH_APP_ID=YOUR_APP_ID_HERE OAUTH_APP_PASSWORD=YOUR_APP_PASSWORD_HERE OAUTH_REDIRECT_URI=<your redirect url> OAUTH_SCOPES='openid profile offline_access' + <your need outlook permissions> OAUTH_AUTHORITY=https://login.microsoftonline.com/common OAUTH_AUTHORIZE_ENDPOINT=/oauth2/v2.0/authorize OAUTH_TOKEN_ENDPOINT=/oauth2/v2.0/token

    獲取訪問令牌

    <?php namespace App\\Http\\Controllers; use App\\Http\\Controllers\\Controller; use Illuminate\\Http\\Request; class AuthController extends Controller { public function signin() { // Initialize the OAuth client $oauthClient = new \\League\\OAuth2\\Client\\Provider\\GenericProvider([ 'clientId' => env('OAUTH_APP_ID'), 'clientSecret' => env('OAUTH_APP_PASSWORD'), 'redirectUri' => env('OAUTH_REDIRECT_URI'), 'urlAuthorize' => env('OAUTH_AUTHORITY').env('OAUTH_AUTHORIZE_ENDPOINT'), 'urlAccessToken' => env('OAUTH_AUTHORITY').env('OAUTH_TOKEN_ENDPOINT'), 'urlResourceOwnerDetails' => '', 'scopes' => env('OAUTH_SCOPES') ]); $authUrl = $oauthClient->getAuthorizationUrl(); // Save client state so we can validate in callback session(['oauthState' => $oauthClient->getState()]); // Redirect to AAD signin page return redirect()->away($authUrl); } public function callback(Request $request) { // Validate state $expectedState = session('oauthState'); $request->session()->forget('oauthState'); $providedState = $request->query('state'); if (!isset($expectedState)) { // If there is no expected state in the session, // do nothing and redirect to the home page. return redirect('/'); } if (!isset($providedState) || $expectedState != $providedState) { return redirect('/') ->with('error', 'Invalid auth state') ->with('errorDetail', 'The provided auth state did not match the expected value'); } // Authorization code should be in the "code" query param $authCode = $request->query('code'); if (isset($authCode)) { // Initialize the OAuth client $oauthClient = new \\League\\OAuth2\\Client\\Provider\\GenericProvider([ 'clientId' => env('OAUTH_APP_ID'), 'clientSecret' => env('OAUTH_APP_PASSWORD'), 'redirectUri' => env('OAUTH_REDIRECT_URI'), 'urlAuthorize' => env('OAUTH_AUTHORITY').env('OAUTH_AUTHORIZE_ENDPOINT'), 'urlAccessToken' => env('OAUTH_AUTHORITY').env('OAUTH_TOKEN_ENDPOINT'), 'urlResourceOwnerDetails' => '', 'scopes' => env('OAUTH_SCOPES') ]); try { // Make the token request $accessToken = $oauthClient->getAccessToken('authorization_code', [ 'code' => $authCode ]); return redirect()->route('contacts'); } catch (League\\OAuth2\\Client\\Provider\\Exception\\IdentityProviderException $e) { return redirect('/') ->with('error', 'Error requesting access token') ->with('errorDetail', $e->getMessage()); } } return redirect('/') ->with('error', $request->query('error')) ->with('errorDetail', $request->query('error_description')); } } ```
  4. 將訪問令牌與Microsoft Graph SDK 一起使用 更多詳情請參考文檔

public function mail()
{
  if (session_status() == PHP_SESSION_NONE) {
    session_start();
  }

  $tokenCache = new \App\TokenStore\TokenCache;

  $graph = new Graph();
  $graph->setAccessToken($tokenCache->getAccessToken());

  $contacts = $graph->createRequest('GET', '/me/contacts/{Id}')
                ->setReturnType(Model\Contact::class)
                ->execute();


}

具體實現方式請參考示例

另外,如果你想用php調用outlook rest api,請參考文檔 但請注意,您需要更改應用程序權限。

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM