> ## Documentation Index
> Fetch the complete documentation index at: https://docs.profy.cn/llms.txt
> Use this file to discover all available pages before exploring further.

# 申请提现

> 提现功能当前未开放——本页写清已实现的规则、冻结逻辑与状态机，供开放后参照

<Warning>
  **提现功能当前未开放，无法提交申请。**

  服务端把创建提现申请这一步硬关闭了，任何提交都会立即返回：

  ```
  WITHDRAWAL_NOT_OPEN: 提现功能即将开放，敬请期待
  ```

  这不是运营开关也不是灰度，是写死在代码里的常量，原因是**尚无自动打款通道**——审核链路里的「完成」只是把数据库状态改成 `completed`，不会真的转账。

  ```ts theme={null}
  // services/core/src/db/service/withdrawal.ts
  // WHY: completeWithdrawal only flips DB status — there is no automated remittance.
  // Keep create hard-blocked until a real payout path ships. Not a runtime config.
  const WITHDRAWAL_CREATE_ENABLED = false;
  ```

  你的钻石收益不受影响，会一直保留在账户里。下面的规则是已经实现好的，开放后即按此执行。
</Warning>

<Note>
  本页数值核对日期 2026-08-11，来源见页尾「真值来源」。
</Note>

***

## 已实现的规则

### 门槛与限制

| 规则       | 默认值         | 可调性  |
| -------- | ----------- | ---- |
| 最低提现金额   | 10,000 钻石   | 运营可配 |
| 提现频率上限   | 3 次 / 24 小时 | 代码常量 |
| 买断收益冻结期  | 30 天        | 运营可配 |
| 按量收益冻结期  | 30 天        | 运营可配 |
| 钻石兑人民币汇率 | 100 钻 : 1 元 | 运营可配 |

到手金额按向下取整计算，不足 1 元的零头留在钻石余额里：

```ts theme={null}
const amountCny = Math.floor(opts.amount / rules.exchangeRate);
```

举例：提 10,050 钻，汇率 100，到手 100 元，剩余 50 钻仍留在账户。

### 提交时的校验顺序

服务端按固定顺序逐条校验，任一不过直接拒绝：

1. 功能是否开放 → `WITHDRAWAL_NOT_OPEN`（当前恒在此拦下）
2. 金额是否为正数 → `Amount must be positive`
3. 24 小时内是否已申请满 3 次 → `WITHDRAWAL_RATE_LIMIT: Maximum 3 withdrawal requests per 24 hours`
4. 金额是否达到最低门槛 → `Minimum withdrawal amount is 10000`
5. 可提现余额是否充足 → `Insufficient balance`

注意频率检查排在金额检查**之前**：24 小时内已提交 3 次时，即使第 4 次金额不合法，你看到的也是频率错误。

***

## 状态机

```mermaid theme={null}
stateDiagram-v2
    [*] --> pending: 提交申请（同时扣减余额）
    pending --> processing: 管理员通过
    pending --> rejected: 管理员驳回（退款）
    processing --> completed: 打款完成
    processing --> failed: 打款失败（退款）
```

| 状态           | 含义         | 钻石去向       |
| ------------ | ---------- | ---------- |
| `pending`    | 已提交，等待审核   | 已从可提现余额扣除  |
| `processing` | 审核通过，处理打款中 | 保持扣除       |
| `completed`  | 已完成        | 不退回        |
| `rejected`   | 审核驳回       | **自动全额退回** |
| `failed`     | 打款失败       | **自动全额退回** |

三条关键性质：

* **先记录后扣款**：先插入一条 `pending` 记录，再扣余额。扣款失败会把该记录标成 `failed`，不会出现「钱扣了但没记录」。
* **状态转换是条件更新**：每次流转都带 `WHERE status = <前置状态>`，所以重复审批、驳回后再通过这类并发操作会失败而不是覆盖。
* **退款是双向反转**：驳回和打款失败都会同时回滚余额与累计提现额两个字段，不会让统计数字虚高。

***

## 冻结期为什么存在

收益从产生到可提现要经过冻结期：

1. 用户付费使用你的专家
2. 平台按你的等级分成比例计算，钻石以**冻结状态**入账
3. 冻结期内不可提现（默认 30 天）
4. 冻结期满自动转为可提现
5. 提交提现申请

冻结期是给退款和纠纷处理留的时间窗口。**成就奖励的钻石没有冻结期**，入账即可提现——它写入时状态直接就是已解冻，与销售收益不同。

***

## 余额状态

| 状态  | 含义                              |
| --- | ------------------------------- |
| 冻结中 | 新产生的收益，尚在冻结期内                   |
| 可提现 | 冻结期已过                           |
| 提现中 | 已提交申请（`pending` 或 `processing`） |
| 已提现 | 已完成打款（`completed`）              |

***

## 常见问题

<AccordionGroup>
  <Accordion title="为什么点提现没反应 / 报错">
    提现功能当前未开放，服务端硬拦截。见页首警告。
  </Accordion>

  <Accordion title="为什么我的余额全是「冻结中」？">
    新产生的销售收益要过冻结期（默认 30 天）才转为可提现，这是给退款和纠纷留的窗口。冻结期满自动转换，不需要你操作。
  </Accordion>

  <Accordion title="「首次提现」成就还能拿到吗？">
    当前拿不到。提现无法提交，且后台成就 worker 也没有给 `first_withdrawal` 写进度的代码路径。等提现开放后会一并接上。详见[悬赏任务与成就](/zh/creators/bounties-and-achievements)。
  </Accordion>

  <Accordion title="申请被驳回，钻石会丢吗？">
    不会。驳回和打款失败都会自动全额退回到可提现余额，并附带原因说明。你可以按反馈修正后重新申请。
  </Accordion>

  <Accordion title="提现有手续费吗？">
    当前代码里没有手续费扣减逻辑，到手金额就是按汇率向下取整的结果。若开放时引入手续费，会在此页更新。
  </Accordion>
</AccordionGroup>

***

## 税务提醒

<Warning>
  创作者收益属于个人所得，可能需要依法纳税。请根据你所在地区的税务要求自行申报。平台可能会按规定代扣代缴。
</Warning>

***

## 真值来源

<Note>
  核对日期 2026-08-11。数值来源：

  * 硬关闭常量、频率上限 3 次/24h、校验顺序、状态机与退款逻辑：`services/core/src/db/service/withdrawal.ts`
  * 门槛 10,000 钻、冻结期 30 天、汇率 100:1 的默认值：`services/core/src/db/service/platform-config.ts`（`DEFAULT_WITHDRAWAL_RULES`）

  标注「运营可配」的项存于系统配置表，实际生效值可能与默认值不同，以你的提现页面显示为准；标注「代码常量」的项改动需要发版。
</Note>

***

## 下一步

<CardGroup cols={2}>
  <Card title="收益体系" icon="diamond" href="/zh/creators/revenue-system">
    分成比例与等级门槛
  </Card>

  <Card title="数据分析" icon="chart-line" href="/zh/creators/analytics">
    数据驱动的收益优化
  </Card>
</CardGroup>
