1 获取投诉列表(合并接口)
接口地址: /merchantapi/order/complaint/list
请求方式: POST
接口说明: 获取投诉列表,包含自营订单和下级订单的投诉(已合并原 proxyList 和 allList 接口)
请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| status | string | 否 | 投诉状态:0=待商户处理,1=等待买家申请平台介入,2=平台介入中,3=已完结 |
| order_type | string | 否 | 订单类型:own=自营订单,proxy=下级订单,空=全部 |
| page | int | 否 | 页码,默认 1 |
| limit | int | 否 | 每页数量,默认 20 |
响应示例:
json
{
"code": 1,
"msg": "获取成功",
"data": {
"list": [
{
"id": 1,
"user_id": 1000,
"source_user_id": 0,
"buyer_user_id": 1008,
"trade_no": "Q251114702349f4",
"desc": "投诉内容",
"status": 0,
"create_at": "2025-11-14 02:11:59",
"create_ip": "127.0.0.1",
"result": 0,
"expire_at": "2025-11-15 02:11:59",
"platform_expire_at": "",
"platform_intervene_at": "",
"merchant_reject_at": "",
"closed_at": "",
"is_refunded": 0,
"refund_at": "",
"update_at": "2025-11-14 02:11:59",
"orders": {
"id": 10,
"trade_no": "Q251114702349f4",
"goods_id": 88,
"goods_name": "商品名称",
"category_name": "虚拟点卡",
"total_price": "95.00",
"status": 1,
"create_at": "2025-11-14 02:00:00"
},
"goods_name": "商品名称",
"order_type": "own",
"order_type_text": "自营订单",
"can_refund": true
},
{
"id": 2,
"user_id": 1001,
"source_user_id": 1000,
"buyer_user_id": 1009,
"trade_no": "Q251114702349f5",
"desc": "下级订单投诉",
"status": 0,
"create_at": "2025-11-14 03:20:15",
"create_ip": "127.0.0.1",
"result": 0,
"expire_at": "2025-11-15 03:20:15",
"platform_expire_at": "",
"platform_intervene_at": "",
"merchant_reject_at": "",
"closed_at": "",
"is_refunded": 0,
"refund_at": "",
"update_at": "2025-11-14 03:20:15",
"orders": {
"id": 11,
"trade_no": "Q251114702349f5",
"goods_id": 89,
"goods_name": "代理商品",
"category_name": "会员服务",
"total_price": "38.00",
"status": 1,
"create_at": "2025-11-14 03:10:00"
},
"goods_name": "代理商品",
"order_type": "proxy",
"order_type_text": "下级订单",
"can_refund": true
}
],
"total": 10
}
}字段说明:
- 列表项返回投诉模型字段和
orders订单关联对象,并额外追加goods_name、order_type、order_type_text、can_refund orders.category_name: 商品分类名称;订单关联对象内部的goods关联不返回order_type: 订单类型own: 自营订单(当前用户 = user_id)proxy: 下级订单(当前用户 ≠ user_id,为代理订单)
order_type_text: 订单类型文本描述can_refund: 是否可以退款- 代理订单:只有货源商户(source_user_id)可以退款
- 非代理订单:只有直接商户(user_id)可以退款
说明:
- 返回所有相关投诉(包括自己的和下级代理的)
- 状态为 0、1、2 的进行中投诉属于待办事项,不受商户 7/15/40 天数据展示周期限制;已完结投诉才按展示周期过滤
- 自动识别订单类型并标注
- 自动判断退款权限
2.2 获取投诉详情
接口地址: /merchantapi/order/complaint/detail
请求方式: POST
请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | int | 是 | 投诉 ID |
响应示例:
json
{
"code": 1,
"msg": "获取成功",
"data": {
"complaint": {
"id": 1,
"user_id": 1000,
"source_user_id": 0,
"buyer_user_id": 1008,
"trade_no": "Q251114702349f4",
"desc": "购买的卡密无法使用",
"status": 0,
"create_at": "2025-11-14 02:11:59",
"create_ip": "127.0.0.1",
"result": 0,
"expire_at": "2025-11-15 02:11:59",
"platform_expire_at": "",
"platform_intervene_at": "",
"merchant_reject_at": "",
"closed_at": "",
"is_refunded": 0,
"refund_at": "",
"update_at": "2025-11-14 02:11:59",
"buyer_appeal_expire_at": ""
},
"order": {
"id": 10,
"trade_no": "Q251114702349f4",
"user_id": 1000,
"buyer_user_id": 1008,
"goods_id": 88,
"goods_name": "QQ币100元",
"category_name": "虚拟点卡",
"quantity": 1,
"price": "95.00",
"total_price": "95.00",
"status": 1,
"is_proxy": 0,
"source_user_id": 0,
"parent_user_id": 0,
"source_goods_id": 0,
"parent_goods_id": 0,
"create_at": "2025-11-14 02:00:00"
},
"buyer": {
"id": 100,
"username": "买家A",
"avatar": "https://example.com/avatar.jpg"
},
"messages": [
{
"id": 1,
"from_user_id": 100,
"from_type": "buyer",
"content": "卡密无法使用",
"create_at": 1699999999
}
],
"canRefund": true,
"canReply": true,
"myRole": "merchant"
}
}字段说明:
complaint: 投诉模型字段,隐藏内部关联对象orders、buyerUserorder: 订单模型字段,额外追加category_name商品分类名称;内部关联对象goods不返回canRefund: 当前用户是否可以退款canReply: 当前用户是否可以回复;代理订单中销售代理为false,只有货源商户为truemyRole: 当前用户角色(merchant=商户,proxy=代理商/货源商户)messages: 投诉会话消息,按id正序返回,第一条通常为买家提交投诉时填写的descmessages[].from_type: 消息来源:buyer=买家,merchant=商户,proxy=货源商户/代理货源方,admin=平台,system=系统状态消息
退款权限规则:
- 代理订单:只有货源商户(source_user_id)可以退款
- 非代理订单:只有直接商户(user_id)可以退款
消息兼容说明:
- 2026-07-06 起,买家提交投诉时的投诉说明会作为
from_type=buyer的第一条消息保存 - 历史数据中如果第一条投诉说明曾保存为
from_type=system、from_user_id=0,接口返回时会按买家消息兼容为from_type=buyer、from_user_id=buyer_user_id - 真正的系统流程消息仍保持
from_type=system,例如平台介入、投诉结束等状态通知
2.3 发送投诉消息
接口地址: /merchantapi/order/complaint/send
请求方式: POST
请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | int | 是 | 投诉 ID |
| content | string | 是 | 消息内容 |
响应示例:
json
{
"code": 1,
"msg": "发送成功"
}业务规则:
- 投诉已结束时不能发送消息
- 代理订单只有货源商户(
source_user_id)可以发送消息,销售代理只能查看沟通记录 - 非代理订单只有直接商户(
user_id)可以发送消息 - 实时推送消息给相关方,频道名为
private-group-complaint-{投诉ID},事件名为message - 投诉详情页建议先请求详情接口获取历史消息,再订阅 WebSocket 频道接收新增消息
2.4 商户退款处理
接口地址: /merchantapi/order/complaint/refund
请求方式: POST
请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | int | 是 | 投诉 ID |
响应示例:
json
{
"code": 1,
"msg": "退款成功"
}业务规则:
- 只有源头商户可以处理退款
- 代理商无权操作退款
- 代理订单:只有货源商户可以退款
- 非代理订单:只有直接商户可以退款
- 退款入账并完结投诉后,系统会向买家端“我的消息”写入投诉退款通知
2.5 商户拒绝退款
更新于 2026-02-01:拒绝后买家 24 小时内可申请平台介入
接口地址: /merchantapi/order/complaint/rejectrefund
请求方式: POST
请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | int | 是 | 投诉 ID |
| reason | string | 是 | 拒绝理由 |
响应示例:
json
{
"code": 1,
"msg": "已拒绝退款,买家可在24小时内申请平台介入"
}业务规则:
- 只有源头商户可以拒绝退款
更新于 2026-02-01拒绝后买家 24 小时内可申请平台介入,超时未申请则商家冻结资金正常结算- 权限规则与退款相同
- 拒绝结果会写入买家端“我的消息”,提醒买家在 24 小时内申请平台介入
业务规则总结
1. 订单状态
- 0:未支付
- 1:已支付
- 2:已关闭
- 3:已退款
2. 投诉状态
更新于 2026-02-01:调整状态 1 的含义
- 0:待商户处理
- 1:等待买家申请平台介入
- 2:平台介入中
- 3:已完结
3. 投诉处理流程
更新于 2026-02-01:调整拒绝退款后的流程
买家发起投诉
↓
商户24小时内处理
├─ 同意退款 → 完结
├─ 拒绝退款 → 买家24小时内可申请平台介入
│ ├─ 买家申请 → 平台介入(48小时)
│ └─ 买家未申请 → 商家资金正常结算
└─ 超时未处理 → 平台介入4. 代理订单投诉处理
代理订单投诉
├─ 货源商户(source_user_id):可退款、可拒绝
└─ 代理商户(user_id):只能沟通,不能退款5. 卡密查看权限
- 自己的订单:可以查看
- 代理订单:只有源头商户可以查看
- 其他情况:不能查看
注意事项
- 投诉处理有时间限制(24 小时/48 小时)
- 代理订单的退款权限在货源商户
- 投诉消息实时推送给相关方
- 订单收益会扣除平台手续费
- 查看卡密时会自动触发发货(如果未发货)
- 投诉已结束后不能再发送消息
- 拒绝退款会自动触发平台介入
- 投诉详情中的
messages按时间正序展示,投诉说明按买家消息展示,系统流程消息仍为system