我正在尝试根据官方api文档注册Office365 Api webhook .我在邮递员中尝试过,所有工作都按预期进行.
Java版本:1.7(我知道......)
我正在使用Play框架版本1.2.7.2
HttpClient的: org.apache.http.client.HttpClient
相关文件:
订阅过程如下:
客户端应用程序为特定资源发出订阅请求(POST).它包括通知URL以及其他属性.
Outlook通知服务尝试使用侦听器服务验证通知URL.它在验证请求中包含验证令牌.
如果侦听器服务成功验证了URL,则会在5秒内返回成功响应,如下所示:
将响应标头中的内容类型设置为text\plain.在响应正文中包含相同的验证令牌.返回HTTP 200响应代码.监听器可以随后丢弃验证令牌.根据URL验证结果,Outlook通知服务会向客户端应用程序发送响应:
如果URL验证成功,则服务将使用唯一的订阅ID创建订阅,并将响应发送到客户端.如果URL验证不成功,则服务会发送错误响应,其中包含错误代码和其他详细信息.在收到成功响应后,客户端应用程序会存储订阅ID以将未来通知与此订阅相关联.
邮差要求:
两个请求都被wireshark拦截:
邮差:
Ý`!Ë2@ʸ1cÊþßV:
ðîPOST /api/v2.0/me/subscriptions HTTP/1.1
Content-Type: application/json
cache-control: no-cache
Postman-Token: a24df796-c49e-4245-a1cf-0949cd6538b6
Authorization: Bearer ###
User-Agent: PostmanRuntime/7.4.0
Accept: */*
Host: localhost:3000
accept-encoding: gzip, deflate
content-length: 430
Connection: keep-alive
{
"@odata.type":"#Microsoft.OutlookServices.PushSubscription",
"ChangeType": "Created, Deleted, Updated",
"ClientState": "some-token",
"NotificationURL": "https://###/office365/receive.php?subId=5",
"Resource": "https://outlook.office.com/api/v2.0/me/Calendars('###')/events"
}
Run Code Online (Sandbox Code Playgroud)
(在wireshark中捕获)(###部件被移除信息,我确保auth和id匹配)
在###/office365/receive.php躺着一个PHP脚本,刚刚回显$_GET['validationtoken'].这在Postman中非常有效.
在Java中,我创建了一个具有相同标题和相同主体的请求
E/@@5â$¸³zêð-gÄV$
Là¼Là¼POST /api/v2.0/me/subscriptions HTTP/1.1
Accept: */*
Content-Type: application/json
Authorization: Bearer ### …Run Code Online (Sandbox Code Playgroud)