Php Microsoft Graph api:订阅通知请求失败问题
我正在为Webhook创建订阅。对于实现,我使用Php Microsoft Graph api:订阅通知请求失败问题,php,laravel,outlook,microsoft-graph-api,Php,Laravel,Outlook,Microsoft Graph Api,我正在为Webhook创建订阅。对于实现,我使用https://github.com/microsoftgraph/msgraph-sdk-php软件包 下面是功能的实现 class WebhookRepository { public function __construct() { $this->graph = new Graph(); } public function subscribe($accessToken) {
https://github.com/microsoftgraph/msgraph-sdk-php
软件包
下面是功能的实现
class WebhookRepository
{
public function __construct()
{
$this->graph = new Graph();
}
public function subscribe($accessToken)
{
try {
$this->graph->setAccessToken($accessToken);
$sub = new Model\Subscription();
$sub->setChangeType("created,updated");
$sub->setNotificationUrl(notificationUrl);
$sub->setResource("/me/mailfolders('inbox')/messages");
$sub->setClientState('SecretClientState');
$dateTime = new Carbon();
$dateTime->addDays(3);
$sub->setExpirationDateTime($dateTime);
$subResult = $this->graph->createRequest("POST", "/subscriptions")
->attachBody($sub)
->setReturnType(Model\Subscription::class)
->execute();
} catch (\Exception $e) {
}
}
}
public function notify(Request $request)
{
$token = $request->input('validationToken');
$response = response()->make($token, 200);
$response->header('content-type', 'text/plain');
return $response;
}
当我执行这个请求时,它会用validateToken将请求发送到通知URL
。如文档中所述,我将发送与第2步相同的响应
还有notify功能的实现
class WebhookRepository
{
public function __construct()
{
$this->graph = new Graph();
}
public function subscribe($accessToken)
{
try {
$this->graph->setAccessToken($accessToken);
$sub = new Model\Subscription();
$sub->setChangeType("created,updated");
$sub->setNotificationUrl(notificationUrl);
$sub->setResource("/me/mailfolders('inbox')/messages");
$sub->setClientState('SecretClientState');
$dateTime = new Carbon();
$dateTime->addDays(3);
$sub->setExpirationDateTime($dateTime);
$subResult = $this->graph->createRequest("POST", "/subscriptions")
->attachBody($sub)
->setReturnType(Model\Subscription::class)
->execute();
} catch (\Exception $e) {
}
}
}
public function notify(Request $request)
{
$token = $request->input('validationToken');
$response = response()->make($token, 200);
$response->header('content-type', 'text/plain');
return $response;
}
此通知函数返回200个响应代码,内容类型为text/plain
。和我一起去。但是在订阅响应中,我得到了这个错误
string(246) "Client error: `POST https://graph.microsoft.com/beta/subscriptions` resulted in a `400 Bad Request` response:
{
"error": {
"code": "InvalidRequest",
"message": "Subscription validation request timed out.",
"inner (truncated...)
"
我被困在这里了。未获得notify函数如何在请求中发送验证令牌的任何示例
仅供参考:我正在
Laravel5.5
框架中使用此功能 一个天真的问题:在您的验证响应中,您是否真的包括传入验证调用中收到的解码验证令牌
你引用了:
$token=$request->input('validationToken')代码>
“validationToken”是POST调用中包含的实际值(解码后)的占位符吗:
POST https://{notificationUrl}?validationToken={opaquetokencreatedbymicrosoftworgraph}
一个天真的问题:在验证响应中,您是否在传入的验证调用中实际包含收到的解码验证令牌
你引用了:
$token=$request->input('validationToken')代码>
“validationToken”是POST调用中包含的实际值(解码后)的占位符吗:
POST https://{notificationUrl}?validationToken={opaqueTokenCreatedByMicrosoftGraph}
我得到了完全相同的超时响应
检查以确保创建订阅的请求未阻止从Microsoft Graph到notificationUrl的HTTP POST验证请求
Microsoft Graph将等待10秒钟,等待通知URL返回HTTP 200 OK响应以验证其活动状态,然后发送超时消息
如果您使用的是PHP的内置web服务器,它只运行一个单线程进程,因此如果请求被阻止,PHP应用程序将暂停
我得到了完全相同的超时响应
检查以确保创建订阅的请求未阻止从Microsoft Graph到notificationUrl的HTTP POST验证请求
Microsoft Graph将等待10秒钟,等待通知URL返回HTTP 200 OK响应以验证其活动状态,然后发送超时消息
如果您使用的是PHP的内置web服务器,它只运行一个单线程进程,因此如果请求被阻止,PHP应用程序将暂停
嗨,我真的很困惑如何解码验证令牌。你能给我提供一个如何解码验证令牌的例子吗。这是什么意思?1。不透明令牌意味着您不应该解析它,也不应该对令牌的形状/格式进行假设,因为它将来可能会更改。2.通过解码,我的意思是解码URL查询字符串。根据您使用的库,这可能会自动完成。如果您不解码,您发送给我们的令牌的值可能会被编码,从而导致比较检查失败。通常,在使用web API时,必须对所有查询字符串进行编码/解码。嗨,我真的很困惑如何解码验证令牌。你能给我提供一个如何解码验证令牌的例子吗。这是什么意思?1。不透明令牌意味着您不应该解析它,也不应该对令牌的形状/格式进行假设,因为它将来可能会更改。2.通过解码,我的意思是解码URL查询字符串。根据您使用的库,这可能会自动完成。如果您不解码,您发送给我们的令牌的值可能会被编码,从而导致比较检查失败。通常,在使用web API时,必须对所有查询字符串进行编码/解码。