# 退款流水（GetRefundPayLogList）

> 自动生成于 2026-02-13 | 数据来源：实时 API

## 基本信息

| 属性 | 值 |
|------|-----|
| 接口路径 | `Order/GetRefundPayLogList` |
| 完整 URL | `https://pc.ficoo.vip/apiprod/admin/v1/Order/GetRefundPayLogList` |
| 请求方法 | `POST` |
| Content-Type | `application/json` |
| 鉴权方式 | Bearer Token（`Authorization` 头） |
| ODS 对应表 | `refund_transactions` |
| 分页方式 | `page` + `limit`（最大 100） |
| 时间范围 | 需要（startTime / endTime） |

## 请求参数

| 参数名 | 类型 | 示例值 | 说明 |
|--------|------|--------|------|
| `startTime` | string | `"2026-02-01 08:00:00"` | 查询起始时间 |
| `endTime` | string | `"2026-02-13 08:00:00"` | 查询结束时间 |
| `siteId` | int | `2790685415443269` | 门店 ID |
| `page` | int | `1` | 页码（从 1 开始） |
| `limit` | int | `100` | 每页条数（最大 100） |

## 响应字段（共 32 个）

| # | 字段名 | 类型 | 示例值 |
|---|--------|------|--------|
| 1 | `tenantName` | string | '朗朗桌球' |
| 2 | `siteProfile` | object | {'id': 2790685415443269, 'org_id': 2790684179467077, 'sho... |
| 3 | `id` | int | 3089577798995141 |
| 4 | `site_id` | int | 2790685415443269 |
| 5 | `tenant_id` | int | 2790683160709957 |
| 6 | `pay_sn` | int | 0 |
| 7 | `pay_amount` | float | -8.0 |
| 8 | `pay_status` | int | 2 |
| 9 | `pay_time` | string | '2026-02-10 23:41:06' |
| 10 | `create_time` | string | '2026-02-10 23:41:06' |
| 11 | `relate_type` | int | 1 |
| 12 | `relate_id` | int | 3089548319804869 |
| 13 | `is_revoke` | int | 0 |
| 14 | `is_delete` | int | 0 |
| 15 | `online_pay_channel` | int | 0 |
| 16 | `payment_method` | int | 4 |
| 17 | `balance_frozen_amount` | float | 0.0 |
| 18 | `card_frozen_amount` | float | 0.0 |
| 19 | `member_id` | int | 0 |
| 20 | `member_card_id` | int | 0 |
| 21 | `round_amount` | float | 0.0 |
| 22 | `online_pay_type` | int | 0 |
| 23 | `action_type` | int | 2 |
| 24 | `refund_amount` | float | 0.0 |
| 25 | `cashier_point_id` | int | 0 |
| 26 | `operator_id` | int | 0 |
| 27 | `pay_terminal` | int | 1 |
| 28 | `pay_config_id` | int | 0 |
| 29 | `channel_payer_id` | string | '' |
| 30 | `channel_pay_no` | string | '' |
| 31 | `check_status` | int | 1 |
| 32 | `channel_fee` | float | 0.0 |

## 详细字段分析

> 以下内容迁移自旧版 `refund_transactions-Analysis.md`，包含字段的业务含义、枚举值、跨表关联等详细说明。

2. 记录内容类型（这份 JSON 实际记录的是什么）

从字段组合和数值特征看，每条记录代表：

“一笔已发生的退款支付流水（资金层面的退款交易）”

特点：

pay_amount 全为负数（例如 -12.0, -44000.0, -3000.0），很明显是“钱从店里流出”的方向。

pay_status 全为 2，结合支付记录推测是“退款/完成状态”（至少表示“已处理完成”）。

action_type 全为 2，极大概率是“退款动作类型”的枚举。

relate_type 只出现 2 与 5，对应两类不同业务：一种是“消费类”，一种是“充值/储值类”（具体含义依赖系统配置，但肯定是区分不同业务来源）。

这份“退款记录”是 资金维度 的退款流水，不是“业务维度”的退款单（比如没记录退款原因、操作备注等）。业务上的退款原因应从对应的订单、充值记录或其他业务表中去追踪。

二、字段逐一说明（含数据类型 & 枚举推断）

下面按功能分组，对每个字段说明其含义、类型，是否枚举，以及这些记录中实际出现的取值。

1. 门店 / 租户维度字段
tenantName

类型：string

示例："朗朗桌球"

含义：租户（商户）名称。

特点：本文件中固定为“朗朗桌球”，完全冗余于 siteProfile.shop_name。

作用：方便直接在流水中看到店名，无需再查门店档案。

tenant_id

类型：int

示例：2790683160709957

含义：租户/品牌 ID，全系统维度标识该商户。

特点：本文件中所有记录相同。

作用：

作为所有门店数据的“租户分区键”；

与其他 JSON 中同名字段一致，用来确认“同一商户”。

site_id

类型：int

示例：2790685415443269

含义：门店 ID。

特点：本文件中所有记录相同（单门店）。

作用：

关联其他数据表中同一门店的数据；

与 siteProfile.id 一致，是 siteProfile 的主键。

siteProfile

类型：object

含义：门店信息快照，结构与其他 JSON 中的 siteProfile 完全一致。包含字段包括但不限于：

id：门店 ID（= site_id）；

shop_name：店名；

full_address / address：地址；

longitude / latitude：经纬度；

business_tel：电话；

一系列门店配置项（灯控、考勤、营业状态等）。

作用：

为每条退款记录附带一份当时的门店元信息；

提供冗余信息，避免联表查询门店档案。

2. 退款流水主键与关联业务字段
id

类型：int

示例：2955202296416389

含义：本条 退款流水 的唯一 ID。

特点：

每条记录一个不同的长整型 ID，疑似雪花 ID 或类似分布式 ID。

作用：作为退款记录表主键，内部检索用。

relate_type

类型：int（枚举）

当前取值：{2, 5}

含义：本退款对应的“业务类型”。

结合支付记录的 relate_type 推测：

1（在支付记录中存在）：某类订单支付（可能是结账单支付）。

2：另一类业务，比如“台费/商品类消费单”或“综合订单”；在退款记录中有多条。

5：通常用来标记“储值/充值类业务”，这里的几条金额很大，形态上很像“退充值款”。

结构作用：

不直接指向某张表，而是先告知“这是哪种业务”，再配合 relate_id 确定具体业务记录。

relate_id

类型：int

示例：2948246513454661

含义：本次退款关联的业务 ID。

对于 relate_type = 2：应该对应某个订单/结算的主键；

对于 relate_type = 5：应该对应某条充值记录或储值业务记录的主键。

特点：

同一个 relate_id 可能对应多条退款流水（例如先退 88.33，又退 0.67，对应两个不同撤销动作，都关联到同一 relate_id）。

与其他 JSON 的关系：

在“支付记录”中也有 relate_type + relate_id 组合，含义一致：指向业务实体；

本文件里的退款流水和“支付记录”是通过“共同指向同一业务实体”来间接关联，而不是直接指向支付记录。

3. 时间字段
create_time

类型：string，格式为 "YYYY-MM-DD HH:MM:SS"

示例："2025-11-03 15:36:19"

含义：本条退款流水在系统内创建时间。

特点：

当前数据中，create_time 与 pay_time 完全相同，说明系统在退款发生时立刻生成流水记录。

如果未来有“申请退款-审核-执行”流程，create_time 有可能偏早。

pay_time

类型：string，格式同上

示例："2025-11-03 15:36:19"

含义：退款在支付渠道层面实际发生的时间。

特点：

当前数据中与 create_time 一致，可以视为“退款完成时间”。

结构提示：

保留 create_time 和 pay_time 两个字段，说明系统设计上区分“记录生成时间”与“渠道交易时间”。如果引入异步处理，二者可能就会出现差异。

4. 金额相关字段
pay_amount

类型：float

示例：-12.0, -44000.0, -3000.0, -0.67 等

含义：本次退款的 资金变动金额。

特征很重要：

全部为负数，绝对值就是退款金额。

表示“从门店账户流出的金额”（相对于支付记录中的正数进账）。

结构意义：

这份“退款记录.json”在设计上没有专门用 refund_amount 存实际退款额，而是直接用 pay_amount < 0 表示退款金额大小。

这点对之后做数据抽取/ETL 很重要：判断退款金额只看 pay_amount 的负数；refund_amount 字段在当前实现中并未使用。

refund_amount

类型：float

当前全部为：0.0

含义（推测）：

设计上本应显示“实际退款金额”（正数），与 pay_amount 配合使用；

但在目前实现里，系统只用了 pay_amount 表示金额，并没有填充这个字段。

在当前数据中的状态：

可以视为“保留字段/未启用”。

balance_frozen_amount

类型：float

当前：全部 0.0

含义（推测）：

涉及会员储值卡退款时，暂时冻结的余额金额；

用于一些“先冻结后解冻/退款”的逻辑。

当前数据状态：

所有退款记录的 member_id / member_card_id 都是 0，对应的冻结金额自然也是 0；

说明这 11 笔退款都不是“退到会员卡余额”，而是对普通支付渠道（例如刷卡）的退款。

card_frozen_amount

类型：float

当前：全部 0.0

含义：与上一个类似，偏向“某张卡的被冻结金额”，也与会员卡/储值账户相关。

状态同上：本数据中未发生“卡冻结退款”。

round_amount

类型：float

当前：全部 0.0

含义（推测）：

舍入金额/抹零金额；

在某些场景下，如果退款金额存在四舍五入等调整，会单独记录到这个字段。

当前未使用。

channel_fee

类型：float

当前：全部 0.0

含义（推测）：

第三方支付渠道对本次退款收取的手续费；

正常应该在“通道成本核算”里用到。

当前数据中没有任何通道手续费记录（可能通道不收手续费，或者手续费隐藏在其他费用内）。

5. 支付方式 / 渠道相关字段

结合“支付记录.json”一起看，更容易理解这些字段的结构设计。

payment_method

类型：int（枚举）

当前取值：仅 4

在“支付记录.json”中出现的取值有：2、4。

含义（推测）：

支付/退款的 方式类型：

2：某种线上支付渠道（很可能是微信）；

4：另一种支付方式（很可能是银行卡 POS 或现金），当前这批退款全是 4，说明都是同一支付方式的退款。

具体枚举值定义要以“非球科技”系统文档为准，但可以确定是“支付方式枚举”。

online_pay_channel

类型：int（枚举）

当前：全部 0

在“支付记录.json”里同样全部为 0。

含义（推测）：

线上支付的 渠道编号，例如：

0：线下/默认渠道；

其他值（如 1,2）可能分别代表微信、支付宝等。

当前门店的退款记录全部为 0，说明这 11 笔退款要么是线下渠道，要么系统没有区分线上子渠道。

online_pay_type

类型：int（枚举）

当前：全部 0

含义（推测）：

在线退款的类型：

0：原路退回；

其他值（如果存在）可能代表“退到余额”、“退到其他银行卡”等。

当前数据中未出现其他值，说明门店的退款都是默认策略（很可能就是原路退回）。

pay_terminal

类型：int（枚举）

当前：全部 1

含义（推测）：

退款所使用的 终端类型：

1：前台收银端；

其他值可能为：小程序、自助机、后台管理系统等。

本文件中所有退款都来自同一种终端类型。

pay_config_id

类型：int

当前：全部 0

含义（推测）：

支付配置 ID，例如商户在“非球科技”内配置的某一条支付通道（某个微信商户号、银联通道）的主键。

当前数据未填（可能全部走默认配置），因此都是 0。

channel_payer_id

类型：string

当前：全部为空字符串 ""

含义（推测）：

支付渠道侧的 payer ID，例如微信 openid、银行卡号掩码等。

当前数据未使用（可能系统没回写或导出时屏蔽了）。

channel_pay_no

类型：string

当前：全部为空字符串 ""

含义（推测）：

第三方支付平台的交易号（如微信支付单号、支付宝交易号等）。

当前为空：要么是通道未返回，要么导出接口没带出这部分数据。

6. 会员关联字段
member_id

类型：int

当前：全部 0

含义：

租户内部的会员 ID（对应会员档案中的某个主键）。

当前状态：

这 11 笔退款中没有任何一笔标记了会员 ID，说明是“非会员退款”或退款没绑定到会员档案。

member_card_id

类型：int

当前：全部 0

含义：

关联的会员卡账户 ID（对应“储值卡列表”或“会员档案”中的某一张卡）。

当前状态：

没有记录任何“退到某张会员卡”的情况；

结合 balance_frozen_amount = 0、card_frozen_amount = 0，可以确定当前导出时间范围的退款全部是对外部支付渠道的退款，没有会员卡内部余额的退款。

7. 状态标志字段
pay_status

类型：int（枚举）

当前：全部 2

在“支付记录.json”中同样只有值 2。

含义（推测）：

支付/退款状态枚举：

1 可能为“待支付/处理中”；

2 为“已完成”（支付成功 / 退款完成）。

鉴于所有支付、退款记录导出时都已经完成，因此本文件中只有 2。

is_revoke

类型：int（枚举）

当前：全部 0

含义（推测）：

是否撤销型退款/撤销原支付：

0：正常退款；

1：撤销类型操作。

当前为 0，说明所有记录按“正常退款”处理，而不是“支付撤销”这类特殊类型。

is_delete

类型：int（枚举）

当前：全部 0

含义：逻辑删除标志。

0：未删除；

1：已删除（逻辑上标记删除，但记录仍存在）。

当前数据中所有退款记录都处于“未删除”状态。

check_status

类型：int（枚举）

当前：全部 1

含义（推测）：

审核状态：

1：已审核/通过；

其他值可能表示“待审核/审核拒绝”等。

结构意义：

说明系统设计上支持“退款需审核”的流程，但当前导出时这些记录已经审过。

action_type

类型：int（枚举）

当前：全部 2

含义（推测）：

行为类型：

1：支付；

2：退款；

或类似的“资金动作类型”。

结合：

支付记录并没有此字段，退款记录有 action_type=2；

再加上 pay_amount<0，基本可以确定这是“退款动作”的枚举标识。

8. 其他操作相关字段
cashier_point_id

类型：int

当前：全部 0

含义（推测）：

收银点 ID，例如前台 1、前台 2、自助机等。

当前数据中未区分具体收银点，统一为 0。

operator_id

类型：int

当前：全部 0

含义：

执行该退款操作的操作员 ID。

当前全部为 0，说明：

要么系统没有记录具体操作员；

要么导出接口未把这个信息带出（但字段已预留）。

三、与其它 JSON 文件的关联关系（结构层面）

从字段角度，退款记录.json 与其它数据之间主要有以下关联：

与门店/租户：

tenant_id ↔ 所有 JSON 中的 tenant_id；

site_id ↔ 所有 JSON 中的 site_id；

siteProfile 内部的 id、tenant_id 与上述字段一致。
→ 说明：退款记录明确挂在“朗朗桌球”这个门店下，与其它消费、库存、助教等记录在同一数据域。

与支付记录（支付记录.json）：

两者都拥有：

relate_type + relate_id：指向同一个业务实体（订单、充值等）；

payment_method、online_pay_channel：同一套支付方式枚举；

pay_amount、pay_status、pay_time：结构一致。

差异：

支付记录的 pay_amount 为正数（进账），退款记录的 pay_amount 为负数（出账）；

退款记录多了一些退款专用字段：refund_amount、balance_frozen_amount、card_frozen_amount、is_revoke、online_pay_type、channel_fee 等。

结构性结论：

支付记录 = 资金正向流入流水；

退款记录 = 资金反向流出流水；

通过 同一个 relate_type + relate_id 指向同一业务主单，从而把“支付”和“退款”绑定在同一个订单/充值实体之上。

与订单/充值等业务表：

relate_type 通知你“这是哪种业务”，relate_id 是那种业务表里的主键。

在已导出的 JSON 中，对应的业务表大致为：

relate_type = 2 → 多数对应“订单类业务”（例如结账记录、小票详情、消费明细）；

relate_type = 5 → 多数对应“充值类业务”（对照余额变更记录、充值记录）。

虽然我们在当前导出中没拿到完整的充值记录明细，但这两字段的存在，已经把退款挂在“业务主单”的坐标上了。

与会员体系：

通过 member_id、member_card_id 理论上可以关联到：

会员档案（会员档案.json）；

储值卡列表（储值卡列表.json）；

余额变更记录（余额变更记录.json）。

当前这批数据里二者均为 0，说明这 11 笔退款完全与会员卡无关，是纯支付渠道层面的退款。

结构意义：

一旦未来有“退到储值卡”的场景，member_id/member_card_id 会出现非 0 值，进而通过上述表串联起“资金退款 → 会员余额变更 → 卡账户状态”。

四、结构层面的额外重要线索（不涉及金额分析）

正/负号决定资金方向：

退款记录并没有用一个单独的“类型字段 + 正数金额”来描述退款，而是直接用 pay_amount 为负，配合 action_type=2 表示“退款”。

对后续数据对接/迁移很关键：判断“是支付还是退款”，不能只看 pay_status，而是要同时看 action_type + pay_amount 的符号。

业务实体与资金流水是一对多关系：

两条记录中 relate_id 相同但 id 不同的情况，意味着同一业务单可以产生多笔退款（例如分批退）。

这也解释了为什么系统用 relate_type + relate_id 来指业务，而“支付 record ID / 退款 record ID”本身只是在资金流水表内唯一。

退款文件是资金维，不含任何“原因类字段”：

没有“退款原因”、“备注”、“操作人姓名”等文本字段；

“是否审核通过”、“是否撤销”等只通过状态位表示；

说明系统将“业务解释”留给业务表（订单/充值），这里只关心钱动了多少、从哪儿来、到哪儿去。

会员退款与普通退款在结构上是统一模型：

即使当前数据里没有会员退款记录，字段已经预留了：

member_id / member_card_id；

balance_frozen_amount / card_frozen_amount；

online_pay_type 等。

一旦发生“退到余额/退到会员卡”的场景，这份结构可以无缝承载，不需要变更表结构。

审核流程是结构预留但未复杂使用：

有 check_status 字段，也有 is_revoke，表明系统支持“审核 + 撤销”这类管理流程。

当前导出数据中全部为 check_status=1、is_revoke=0，说明：

要么店内流程简单，退款都直接通过；

要么导出只包含“已审核通过的记录”。

与支付记录共用枚举体系：

payment_method、online_pay_channel、pay_terminal、relate_type 等枚举字段，与支付记录完全共用。

这一点对于你后续构建统一的资金流水视图很关键：可以把支付记录和退款记录 union 在一起，通过这些枚举和正负金额，就能得到一张统一的资金流水大表。
