温馨提示:本文翻译自stackoverflow.com,查看原文请点击:php - Microsoft Graph Rest API: how does "notification endpoint validation" works?
microsoft-graph php office365api outlook-restapi

php - Microsoft Graph Rest API:“通知端点验证”如何工作?

发布于 2020-04-19 11:00:33

阅读文档后,我看到...“客户端必须在10秒内提供具有以下特征的响应:”

  • 200(OK)状态代码。
  • 内容类型必须是文本/纯文本。
  • 主体必须包含Microsoft Graph提供的验证令牌。

我在客户端收到的请求是

/?validationToken = Validation%3a + Testing + client + application + reachability + for + subscription + Request-Id%3a + ef492401-75ec-4ac8-b87a-89d0b81ae977

所以我给的答复是

$responseCode = 200;
http_response_code($responseCode);
header('Content-type: text/plain');
echo $response = $_GET['validationToken'];

翻译成..是:

验证:测试客户端应用程序对订阅的可访问性Request-Id:ef492401-75ec-4ac8-b87a-89d0b81ae977

为什么我收到此回复?

< HTTP/1.1 400
< {
<     "error": {
<         "code": "InvalidRequest",
<         "message": "Subscription validation request failed. Must respond with 200 OK to this request.",
<         "innerError": {
<             "request-id": "ef492401-75ec-4ac8-b87a-89d0b81ae977",
<             "date": "2020-02-04T14:50:35"
<         }
<     }
< }

查看更多

提问者
sensorario
被浏览
54
sensorario 2020-02-06 12:50

问题在这里:

$request["notificationUrl"] = $conf['NotificationURL'];
$request["lifecycleNotificationUrl"] = "https://webhook.azurewebsites.net/api/lifecycleNotifications";

配置中的第二个URL不存在。如果调用,则返回400。正确的配置应为:

$request["notificationUrl"] = $conf['NotificationURL'];
$request["lifecycleNotificationUrl"] = $conf['NotificationURL'];

那解决了问题。