Skip to content
开发文档
能力中心
应用市场
WebOffice
开发者后台

接收并处理回调

当订阅的回调操作发生时,开放平台服务器会向回调请求地址发送 HTTP POST 请求,应用方服务器需要接收并处理回调,并立即返回响应内容。 本文将介绍接收并处理回调时涉及的操作。

流程概述

回调订阅整体可分为 4 个步骤: 1、在开发者后台-事件与回调-回调配置配置用于接收事件消息推送的地址(URL)。 2、在开发者后台-事件与回调-回调配置选择需要订阅的回调。 3、在开发者后台-事件与回调-加密配置设置安全校验。用于确认业务服务器接收到的请求来自开放平台,而不是伪造的风险请求。 4、事件触发并推送至应用的回调订阅地址,应用解密消息体并响应成功。

当开放平台服务器推送回调至请求地址后,应用服务器需要接收回调请求,并在 3 秒内完成业务处理、返回响应结果。在该过程中,你需要根据实际配置情况,完成以下操作。

📌 请注意:回调是同步操作,不提供补推机制。如果你的业务服务器超时未响应,则系统会判断回调失败,并在用户前端内展示报错信息。

1. 设置回调地址并响应challenge

配置回调地址后,WPS 开放平台服务器会向该地址发送一个 application/json 格式的 HTTP POST 请求,以验证配置地址的有效。 该 POST 请求中会携带一个 challenge 字段,应用需要在 1 秒内,将接收到的 challenge 值原样返回给 WPS 开放平台。仅回调地址验证通过情况下,才可在后续触发时向请求地址发送回调数据。

请求说明

请求地址应用方设置的回调地址
请求方法POST
签名方式KSO-1

请求头(Header)

Header 名称参数类型是否必填说明
Content-Typestring使用:application/json
X-Kso-DatestringRFC1123 格式的日期,例: Wed, 23 Jan 2013 06:43:08 GMT
X-Kso-AuthorizationstringKSO-1 签名值,详见:签名方法
注意:此处使用 app_id 作为 access_keyencrypt_key 作为 secret_key

请求体(Body)

名称参数类型是否必填说明
challengestring应用需要在响应中原样返回的值

请求地址示例

[POST] 应用方设置的回调地址

请求体示例

json
{
  "challenge": "string"
}

响应体

名称参数类型说明
challengestring应用在响应中原样返回的值

响应体示例

json
{
  "challenge": "string"
}

2. 接收回调并做安全校验

当你的业务服务器接收到来自开放平台推送的回调时,你可以通过签名校验的方式确保请求来自开放平台。 如果你已配置了 encrypt_key,则业务服务器接收到回调请求后,可直接使用 app_id 作为 access_keyencrypt_key 作为 secret_key 完成签名校验。

签名示例参考:KSO-1 签名算法说明

3. 接收回调并响应回调

你的业务服务器接收回调请求后,需要在 3 秒内响应回调,以完成客户端(前端)的交互行为。 目前需要订阅回调的功能以及对应的回调结构、使用方式等说明,请参见下表:

功能callback_name回调结构
WPS协作消息卡片xz_card如果你构建的卡片可通过交互组件完成业务处理,则需要订阅 WPS协作消息卡片 回调。
该回调对应的回调参数、响应参数说明,可参见WPS协作消息卡片回传交互

请求说明

请求地址应用方设置的回调地址
请求方法POST
签名方式KSO-1

请求头(Header)

Header 名称参数类型是否必填说明
Content-Typestring使用:application/json
X-Kso-DatestringRFC1123 格式的日期,例: Wed, 23 Jan 2013 06:43:08 GMT
X-Kso-AuthorizationstringKSO-1 签名值,详见:签名方法
注意:此处使用 app_id 作为 access_keyencrypt_key 作为 secret_key

请求体(Body)

名称参数类型是否必填说明
callback_namestring回调名称
app_idstring应用id
dataobject回调的数据,根据 callback_name 不同有所不同

请求地址示例

[POST] 应用方设置的回调地址

请求体示例

json
{
  "callback_name": "string",
  "app_id": "string",
  "data": {
    // 回调的数据,根据 callback_name 不同有所不同
  }
}

响应体

名称参数类型说明
codeinteger响应代码。非 0 表示失败,参照《状态码说明》
msgstring响应信息

响应体示例

json
{
  "msg": "string",
  "code": 0
}
回到旧版