PAYATHON 2026

「查询单条投诉单」中 REPORT_SUCCEED 状态的业务含义

支付小周

明确结论

REPORT_SUCCEED 表示投诉已成功提交或登记到投诉处理系统,也就是“举报成功”。

这个状态只说明投诉单已经进入系统,不表示投诉内容已经核实成立,也不表示处理已经完成、退款已经成功或责任已经认定。

只有「查询单条投诉单」会返回该状态,通常是因为详情接口需要展示更完整的投诉单生命周期,包括最初的登记状态。「交易投诉通知回调」和「查询交易投诉列表」主要用于后续处理或展示可操作的投诉单,因此不会返回这个初始状态。

如果接口文档没有进一步说明 REPORT_SUCCEED,应按“投诉提交成功、投诉单已生成”处理,不能将其视为最终处理结果。

业务含义

收到 REPORT_SUCCEED 后,可以确认以下信息:

  • 系统已成功接收投诉或举报请求。
  • 对应的投诉单已经创建,可以通过详情接口查询。
  • 投诉单可能还没有进入受理、协商、处理或完结阶段。
  • 商户通常不应根据该状态直接执行退款、关闭订单等不可逆操作。

页面可以将该状态展示为“投诉已提交”或“等待后续处理”。例如:

投诉状态:已提交
处理进度:等待平台受理或进入后续处理流程

不建议展示为:

投诉成立
商户责任已确认
投诉处理成功
退款已完成

“举报成功”中的“成功”指举报提交成功,并非投诉处理成功。

为什么其他接口不返回该状态

这三个接口的用途不同,返回的状态范围不一定完全相同。

「查询单条投诉单」

详情接口查询的是指定投诉单,通常需要返回其当前的准确状态,因此可能包含创建初期的 REPORT_SUCCEED。

常见场景包括:

  • 用户提交投诉后立即查询详情。
  • 投诉单已经创建,但还没有进入后续处理环节。
  • 排查某个投诉单的完整状态变化。

「交易投诉通知回调」

回调接口通常用于通知商户需要关注或处理的业务变化。投诉刚登记成功时,如果还没有产生需要商户处理的事件,平台可能不会发送回调。

因此,没有收到 REPORT_SUCCEED 回调,并不意味着投诉单创建失败。是否创建成功,应根据投诉提交结果或详情查询结果确认。

「查询交易投诉列表」

列表接口通常用于批量展示和业务处理,可能只返回已经进入受理、处理中或已完结阶段的投诉单。处于初始登记状态的数据,可能还不在列表接口的查询范围内。

不同接口也可能使用不同的状态枚举或数据视图,不能假设详情、列表和回调接口一定返回完全相同的状态集合。

建议的处理步骤

1. 将 REPORT_SUCCEED 作为独立状态处理

不要直接将其归入“处理中”或“已完成”。内部可以映射为“已提交,等待后续处理”。

REPORT_SUCCEED -> 已提交

2. 不要使用该状态触发最终业务动作

收到该状态后,只更新投诉单记录和页面提示。退款、关闭投诉、判责等操作,应等待明确的状态或业务结果。

3. 以详情接口作为单条投诉单的状态依据

如果列表、回调和详情接口返回的状态暂时不一致,可以保存投诉单号,再通过「查询单条投诉单」获取当前状态。

不要进行无间隔轮询。查询频率应遵守接口文档中的限频要求;如果文档没有明确说明,应采用合理的退避策略。

4. 对未知状态保持兼容

状态枚举以后可能扩展。代码中应保留默认分支,避免新状态导致反序列化失败或整个任务中断。

代码示例

下面的示例演示了状态映射,具体字段名称应以实际接口响应为准。

public String getComplaintStatusText(String status) {
    if (status == null || status.isBlank()) {
        return "状态未知";
    }

    return switch (status) {
        case "REPORT_SUCCEED" -> "投诉已提交,等待后续处理";
        case "PROCESSING" -> "投诉处理中";
        case "FINISHED" -> "投诉已处理完成";
        default -> "未知状态:" + status;
    };
}

如果 PROCESSING、FINISHED 不是接口文档中的真实枚举,需要替换为文档实际定义的状态,不能直接用于生产环境。

业务逻辑中也可以明确限制该状态下允许执行的操作:

public boolean canExecuteFinalAction(String status) {
    return switch (status) {
        case "REPORT_SUCCEED" -> false;
        // 在这里补充文档明确允许执行最终操作的状态
        default -> false;
    };
}

前端展示也应为未知状态保留兜底处理:

const statusTextMap = {
  REPORT_SUCCEED: '投诉已提交,等待后续处理',
};

function getStatusText(status) {
  return statusTextMap[status] ?? `未知状态:${status ?? '-'}`;
}

注意事项

  • REPORT_SUCCEED 不等于投诉成立。
  • REPORT_SUCCEED 不等于投诉处理完成。
  • REPORT_SUCCEED 不表示退款、赔付或责任认定已经完成。
  • 不要要求回调接口和列表接口覆盖详情接口的全部状态。
  • 不要只依赖回调维护投诉单状态,必要时应通过详情接口校准。
  • 对账或排查状态时,应同时记录投诉单号、接口返回状态和查询时间。
  • 如果官方接口文档对该状态有其他定义,应以当前文档和平台实际约定为准。没有明确说明时,不应进一步推断受理结果或处理时限。

备注:内容仅供参考。