Office関連

Microsoft Graph SDK for PHPを使ったAPIの呼び出しサンプル

知らない間に(恐らくBuild 2017のタイミングに合わせて)Microsoft Graph・PHP用SDKの安定版がリリースされていたので、さっそく試してみました。

テスト環境

  • Windows 7 Professional SP1 64-bit
  • XAMPP Portable Version: 5.6.30
  • PHP Version 5.6.30
  • Microsoft アカウント

アプリケーションIDとアプリケーションシークレットの取得

APIを呼び出すにあたり、まずはアプリケーションID(クライアントID)とアプリケーションシークレット(クライアントシークレット)の準備をします。

  1. v2.0エンドポイントを使用するため、Application Registration Portalにアクセスし、Microsoft アカウントでサインインします。
  2. アプリの追加」ボタンをクリックします。
  3. Register your application画面が表示されたら、アプリケーション名や連絡先を入力して、「Create」ボタンをクリックします。
  4. アプリケーションの登録画面が表示されたら、「アプリケーション ID」(クライアントID)をコピーしておきます。
  5. 新しいパスワードを生成」ボタンをクリックして、生成されたパスワードをコピーしておきます。このパスワードがアプリケーションシークレット(クライアントシークレット)となります。
  6. プラットフォームの追加」ボタンをクリックして、「Web」を追加します。
  7. リダイレクト URL」欄に認証後に飛ばされる先のURL(リダイレクトURL)を入力します。
  8. Microsoft Graph のアクセス許可」は一先ず「User.Read」だけにしておきます。必要に応じて、ここでスコープを追加します。
  9. 今回は「プロファイル」は空欄にしておきます。
  10. 保存」ボタンをクリックして、アプリケーションの設定を保存します。

以上でアプリケーションIDとアプリケーションシークレットの準備は完了です。

SDKとOAuth認証用ライブラリの準備

SDKを使ってAPIを呼び出すわけですが、GitHubを見ると下記のような記述があります。

The Microsoft Graph SDK for PHP does not include any default authentication implementations. Instead, you can authenticate with the library of your choice, or against the OAuth endpoint directly.

OAuth 2.0の認証部分に関してはSDKに含まれていないため、自力で実装するか適当なライブラリを使う必要があるようです。

今回は「Azure Active Directory v2.0 認証ライブラリ」でも紹介されている「PHP League oauth2-client」を使うことにします。

インストールは簡単で、「composer install」するだけです。
(必要に応じて、導入するバージョンを変更してください。)

{
    "require": {
        "league/oauth2-client": "~2.0",
        "microsoft/microsoft-graph": "1.0.*"
    }
}

特にエラーが発生しなければ、これでSDKの準備は完了です。

Microsoft Graph SDK for PHPによるAPIの呼び出し

準備が整ったので、次はいよいよコードを書いていきます。

※ コード内の「clientId」と「clientSecret」、「redirectUri」はそれぞれ、上記手順で取得したものに置き換えてください。

<?php
  require_once './vendor/autoload.php';
  use Microsoft\Graph\Graph;
  use Microsoft\Graph\Model;
  $accessToken = NULL;
  
  $provider = new \League\OAuth2\Client\Provider\GenericProvider([
    'clientId'                => '(アプリケーション ID)',
    'clientSecret'            => '(アプリケーション シークレット)',
    'redirectUri'             => '(リダイレクト URL)',
    'urlAuthorize'            => 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize',
    'urlAccessToken'          => 'https://login.microsoftonline.com/common/oauth2/v2.0/token',
    'urlResourceOwnerDetails' => '',
    'scopes'                  => 'user.read'
  ]);
  
  //アクセストークン取得
  if($_SERVER['REQUEST_METHOD'] === 'GET' && !isset($_GET['code']) && !isset($_GET['error'])){
    $authorizationUrl = $provider->getAuthorizationUrl();
    header('Location: ' . $authorizationUrl);
    exit();
  }elseif($_SERVER['REQUEST_METHOD'] === 'GET' && isset($_GET['code'])){
    try{
      $accessTokenObj = $provider->getAccessToken('authorization_code', [
        'code' => $_GET['code']
      ]);
      $accessToken = $accessTokenObj->getToken();
    }catch(League\OAuth2\Client\Provider\Exception\IdentityProviderException $e){
      printf('Error:', $e->getMessage());
    }
  }
  
  //Graph API呼び出し
  if($accessToken){
    $graph = new Graph();
    $graph->setAccessToken($accessToken);
    
    $user = $graph->createRequest('GET', '/me')
              ->setReturnType(Model\User::class)
              ->execute();
    echo 'Hello, ' . $user->getDisplayName();
  }

上記コードのページを開くと、Microsoft アカウントのサインインページに飛ばされるので、サインインを行います。

コンセントUIが表示されるので、「はい」ボタンをクリックして、アクセスを許可します。

APIの呼び出しが無事に行われれば、ユーザー名が表示されます。

おわりに

今回初めてMicrosoft GraphのPHP用SDKとOAuth認証用ライブラリを使ってみましたが、驚くほど簡単にAPIを呼び出せました。

VBAから無理やり呼んだときとは雲泥の差です。

やはり専用に用意されたSDKは便利ですね!
管理も非常に楽になるし、Microsoft Graphを使ったWebアプリケーションを開発される方は、SDKの利用を強くお薦めいたします。

選択中の図形の書式設定を一括変更するPowerPointマクロ前のページ

PowerPointのマクロを共有化して使う方法次のページ

関連記事

  1. Office関連

    メールアドレスからExchangeUserを取得するOutlookマクロ

    mougに“メールアドレスをキーとしてExchangeグローバルアドレ…

  2. Excel

    Google TTSで文字列を読み上げるExcelアドイン

    前回の記事で書いたGoogle TTSで文字列を読み上げるマクロ(言語…

  3. Excel

    [VBA]ユーザーフォーム上のコンボボックスでオートコンプリート機能を実装する方法

    MSDNフォーラムに「ユーザーフォーム上のコンボボックスで、任意の文字…

  4. Office関連

    ファイルをブックに埋め込むExcelマクロ

    大分前に書いた回答用のコードが出てきたので、記事として残しておきます。…

  5. Office関連

    CDOを使ってGmail送信を行うVBAマクロ(UTF-8対応版)

    2年ほど前にCDOを使ってGmail送信を行うVBAマクロについて記事…

コメント

  • コメント (0)

  • トラックバックは利用できません。

  1. この記事へのコメントはありません。

Time limit is exhausted. Please reload CAPTCHA.

※本ページはプロモーションが含まれています。

Translate

最近の記事

アーカイブ

PAGE TOP