2017-09-29 23 views
0

を郵送するためのサブスクリプションを作成しようとしたとき、私はマイクロソフトグラフの/subscriptionsエンドポイントを使用しようとしていますが、私は次の応答取得しています。Microsoftアプリケーション登録ポータルでステータスコード:禁断のイベント

stdClass Object 
(
    [error] => stdClass Object 
     (
      [code] => ExtensionError 
      [message] => Operation: Create; Exception: [Status Code: Forbidden; Reason: Forbidden] 
      [innerError] => stdClass Object 
       (
        [request-id] => 15acd5eb-46db-408e-8c6b-3bb779d63940 
        [date] => 2017-09-29T17:44:45 
       ) 
     ) 
) 

を私はアプリケーション許可をMail.ReadUser.Read.All私のアプリケーションに付与しました。

私はthis documentationです。

/subscriptionsへのコール直前に、アクセストークンを正常に取得し、それを使用して/usersエンドポイントからユーザー情報を取得しています。

私はこれらの要求をするためにPHPのカールを使用してい

$url = "https://graph.microsoft.com/v1.0/subscriptions/"; 

$headers = array(); 
$headers[] = 'Authorization: Bearer '.$token; 
$headers[] = 'Content-Type: application/json'; 

$postData = array (
     "changeType" => "created,updated", 
     "notificationUrl" => "https://example.com/subscriptionListener.php", 
     "resource" => "users/GUID-of-a-user/mailFolders('Inbox')/messages", 
     "expirationDateTime" => "2017-10-01T18:23:45.9356913Z", 
     "clientState" => "12345" 
     ); 

$postJSON = json_encode($postData); 

$ch = curl_init(); 

curl_setopt($ch,CURLOPT_URL,$url); 
curl_setopt($ch,CURLOPT_POST,count($postData)); 
curl_setopt($ch,CURLOPT_POSTFIELDS,$postJSON); 
curl_setopt($ch,CURLOPT_HTTPHEADER, $headers); 
curl_setopt($ch,CURLOPT_RETURNTRANSFER, true); 


$result = curl_exec($ch); 
echo "<pre>", print_r(json_decode($result), 1), "</pre>"; 

「私の確認エンドポイント(subscriptionListener.phpが)検証トークンと呼ばれているが、私はアカウントに電子メールを送信する場合、私は私を購読通知を受け取っていません。

UPDATE:私はtoken debuggerに私のトークンを貼り付け、私のトークンがの役割を示していることが見つかりました:

"roles": [ 
    "User.Read.All" 
    ], 

のサブスクリプション・エンドポイントは、Microsoftアプリケーションポータルに応じて私のアプリを持っている、Mail.Readが必要です。 Microsoft Application Portal Permissions

私のアプリケーションの権限が自分のトークンに反映されていないようです。

大変助かりました!

答えて

0

最後にこれを理解しました。私は新しいMail.Read権限のために「管理者同意」を提供できませんでした。

「Admin Consent」というタイトルのセクションで回答がhereでした。表示されているとおりにURLを入力するだけで、サインインした後に「同意する」をクリックします。 redirect_uriのパラメータは機能していないことに注意してください。そうでない場合は、[同意する]をクリックするとエラーメッセージが表示されますが、管理者の同意は引き続き付与されます。