Skip to content

03 — 任务中心开放 API(OAuth2)

第三方在门户「任务中心」创建异步任务、汇报进度、完成 / 失败 / 取消确认。
代码锚点:OpenTaskControllerOpenTaskAccessSupportOpenTask*Request

基路径/api/open/tasks
鉴权Authorization: Bearer {access_token}(OAuth2 opaque Token,非 JWT)。


1. 如何拿到 Token

  1. 门户管理员为你注册 CONFIDENTIAL Client,绑定 system_codescopes 至少含:
    • 写:api:write(创建 / 进度 / 完成 / 失败 / 取消确认)
    • 仅查:api:read(详情 / 分页)
  2. 授权码 流程让门户用户授权(见 04-SSO接入-IdP.md):
    • GET /oauth2/authorize?...&scope=api:write(或含 api:read
    • POST /oauth2/tokengrant_type=authorization_code
  3. 后续可用 POST /oauth2/refresh 刷新。

未开通 client_credentials。无用户授权则无法调用本开放面。

规则说明
api:write 蕴含读持有写 scope 时可调详情 / 分页
system_code取自 Token 对应 Client 绑定,不信任请求体
归属校验写操作前按 TaskAccessContext.forApp(systemCode) 校验任务属本应用
禁止混用本 Token 不能/api/system/** 等管理端 API

2. 接口清单

方法路径scope说明
POST/api/open/tasksapi:write创建任务,立刻出现在 ownerUsername 的任务中心
PATCH/api/open/tasks/{taskCode}/progressapi:write汇报进度
POST/api/open/tasks/{taskCode}/completeapi:write完成(SUCCESS / PARTIAL
POST/api/open/tasks/{taskCode}/failapi:write标记失败
POST/api/open/tasks/{taskCode}/cancelledapi:write执行方确认已停止(用户请求取消后)
GET/api/open/tasks/{taskCode}api:read详情(含 cancelRequested,供轮询停止意图)
GET/api/open/tasksapi:read本应用任务分页(联调/对账)

成功时响应为统一 ApiResultdata 为任务快照(见 §4)或分页结果。


3. 请求字段

3.1 创建 — POST /api/open/tasks

字段必填说明
title任务标题
bizType业务类型,如 REPORT_EXPORT
categoryEXPORT / IMPORT / CONVERT / EXECUTE / QUERY / OTHER
ownerUsername归属门户用户登录名(任务出现在其任务中心)
externalRef第三方幂等键
cancellable是否可被用户请求中断
payload入参对象(服务端序列化为 JSON)
payloadJson入参 JSON 字符串;与 payload 二选一,优先 payloadJson
contextJson上下文 JSON
expireAt结果过期时间

createdBy 由服务端写入为 client_idsystemCode 取自 Client 绑定。

3.2 进度 — PATCH /api/open/tasks/{taskCode}/progress

Body(AsyncTaskProgressCommand):

字段说明
progressPercent0–100
totalCount / processedCount / successCount / failCount计数
message进度文案

3.3 完成 — POST /api/open/tasks/{taskCode}/complete

字段必填说明
statusSUCCESSPARTIAL
message摘要
resultJson结果摘要 JSON
actions完成动作列表(见下)
totalCount 等计数 / progressPercent终态计数

actions[](完成动作)

字段说明
typeDOWNLOAD / ROUTE / LINK / COPY
label按钮文案
primary是否主按钮
fileKeyDOWNLOAD:DFS fileKey(入库)
urlDOWNLOAD/LINK:可访问 URL(出参常由门户填充)
path / name / queryROUTE
targetLINK 打开方式
textCOPY 文本

3.4 失败 / 取消确认

POST .../failPOST .../cancelled,可选 body:

字段说明
message说明文案;缺省分别为「任务失败」「用户已停止」

协作式取消:cancellable=true 时用户可请求停止;RUNNING 仅置 cancelRequested,执行方安全点调用 cancelled 确认。详见 doc/10-规范定义.md §7.5。

3.5 分页 Query — GET /api/open/tasks

参数说明
pageNum从 1,默认 1
pageSize默认 20,上限 100
category / status / bizType / keyword筛选
systemCode查询字段存在;实际列表按 Token Client 绑定应用隔离

4. 任务快照(响应 data 要点)

字段说明
taskCode任务业务编码(路径参数)
externalRef第三方幂等键
title / bizType / category创建时字段
systemCode来源应用
ownerUsername归属用户
statusPENDINGRUNNINGSUCCESS / PARTIAL / FAILED / CANCELLED
cancellable / cancelRequested / canCancel中断协作
progressPercent 与计数、message进度
payloadJson / contextJson / resultJson / actions入参与结果
createdBy / createdAt / updatedAt / finishedAt / expireAt审计与时效

5. curl 示例

bash
# 假设已通过授权码换得 ACCESS_TOKEN
curl -sS -X POST "https://portal.example.com/api/open/tasks" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "报表导出",
    "bizType": "REPORT_EXPORT",
    "category": "EXPORT",
    "ownerUsername": "admin",
    "externalRef": "job-20260716-001",
    "cancellable": true,
    "payload": {"reportId": "R1"}
  }'

curl -sS -X PATCH "https://portal.example.com/api/open/tasks/{taskCode}/progress" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"progressPercent":40,"message":"处理中"}'

curl -sS "https://portal.example.com/api/open/tasks/{taskCode}" \
  -H "Authorization: Bearer $ACCESS_TOKEN"

6. 常见错误

code / 现象含义
缺少 / 无效 access_token未带 Bearer 或 Token 失效
403 Token 缺少 scope未申请 api:write / api:read
400 Client 未绑定 system_code管理端补绑
任务不属于本应用taskCode 非本 Client 创建 / 归属不对

更多规范见 doc/10 §7.5doc/07 §4.6


7. 下载 Demo