服务端消息通知
简介
开发者应用服务器(AppServer)调用Pano服务端API,以及客户端app和Pano服务器交互时,都会产生若干事件。Pano服务器可以将相关的事件消息通知回调给开发者服务器,以便开发者按需处理。
需要先申请开通Webhook回调,才可以接收相应事件通知,请向技术支持了解详情。
基本格式
Webhook回调本质上就是客户按照本文档的格式定义实现了一个RESTful API,Pano会按照本文档定义的格式发起相应的RESTful调用。Webhook的请求格式与Pano提供的RESTful API请求格式类似,下面是一个请求示例:
POST /path/to/resource
Host: api.example.com
Content-Type: application/json
Authorization: PanoSign <PanoSign>
Tracking-Id: ef9b2acc8e1f4d598090eb6d9cbe8596
{
"eventId": "dg9b2acc8e1f4d598090eb6d9cbe3689",
"eventType": "1",
"notifyTime": 1586938251235,
"eventData": {
//JSON
}
}
Webhook回调地址是在Pano控制台的「应用管理」模块里面配置的,出于安全考虑,Pano建议开发者将回调地址配置为HTTPS。
相关字段说明:
- HTTP method - 固定为
POST
- Content-Type - 固定为
application/json
,表示请求和响应都为JSON数据格式 - Authorization - 为保证安全,Pano在所有的请求里都会带上Authorization请求头,类型为PanoSign,后面带上具体的PanoSign值,方便接收端验证请求的合法性。
- Tracking ID - Pano会带上Tracking-Id头方便后续问题排查,值为UUID
- HTTP Body - 请求消息体,JSON对象:
- eventId - 事件的唯一标识
- eventType - 事件的类型
- notifyTime - webhook消息发生的实际时间,UNIX时间戳,单位:毫秒
- eventData - 事件的具体内容,格式为JSON对象,不同的事件类型会有不同的内容
验证签名
PanoSign由三部分组成,用.
拼接在一起,格式为<appId>.<timestamp>.<signature>
,各字段含义如下:
<appId>
- 你的App ID,请登录 控制台 后在应用管理模块查看你的App ID<timestamp>
- 当前UTC时间戳(精确到秒)<signature>
- 签名,由Http响应内容的原始字符串、当前UTC时间戳、App Secret计算获得,详细算法如下:
signature = base64(HmacSHA256(响应内容的原始字符串+timestamp,appSecret))
- 首先,将响应的原始字符串拼接作为签名内容,appSecret作为签名key
- 然后,通过
HmacSHA256
哈希算法以App Secret作为秘钥计算得到一个hash值 - 最后,将hash值经过base64编码
- 关于PanoSign的格式和校验详情请参考权限控制
消息可靠性
Pano在回调时会尝试3次,然后按照间隔1分钟、2分钟、4分钟、8分钟、16分钟继续尝试5次。Pano在接收到HTTP返回状态码为200的时候认为通知成功。
消息列表
消息列表与详细说明请联系技术支持。