@
docs: reorganize api docs into categorized subdirectories and fill missing docs - Categorize 77 existing api docs into 16 business-domain subdirectories (auth/ad/wallet/coupon/compare/savings/signin/tasks/invite/user/ device/platform/intent/meituan/other) plus admin/ and internal/ - Split admin/ into 7 sub-resource subdirectories (auth/users/wallet/ withdraws/feedbacks/admins/ad) with 4 single-file docs at root - Create 21 new docs covering 28 previously undocumented endpoints: ad/watch-report, wallet/transfer-auth (3 endpoints), coupon/session+ stats+completed-today+prompt (7), invite/me+invitees+bind+landing-track, user/onboarding (2), platform/flags+ad-config+app-version, intent/step+precoupon/step, analytics/events, order/report, report/submit+records, feedback/config+records, trace/finalize - Add mock request/response JSON examples to all new docs - Create docs/README.md with full category index for LLM navigation - Update docs/api/README.md: fix all links, add new endpoint rows, replace "no doc" markers with actual links - Fix back-navigation links (./README.md -> ../README.md or ../../README.md) in all moved files @
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
# POST /admin/api/withdraws/reconcile — 批量对账(扫超时 pending 单)
|
||||
|
||||
> 所属:Admin·提现 组(前缀 `/admin/api/withdraws`) | 鉴权:Bearer admin_token(角色:`finance`,`super_admin` 恒通过) | [← 返回 API 索引](../../README.md)
|
||||
|
||||
扫描创建时间超过 `older_than_minutes` 分钟、仍为 `pending` 的提现单,逐单调微信查单并归一化(成功落 `success`;失败/已撤销则退款落 `failed`;查到 `WAIT_USER_CONFIRM` 视为用户放弃,撤单+退款)。用于解开"扣了款但转账没发起/没确认"的孤儿单。单笔失败不影响其余(内部 rollback 后继续,下轮再试)。
|
||||
|
||||
> 路由注册顺序上,静态路径 `/reconcile` 必须在路径参数 `/{out_bill_no}/refresh` 之前声明。
|
||||
|
||||
## 入参
|
||||
- 路径:无
|
||||
- query:
|
||||
|
||||
| 字段 | 类型 | 必填 | 默认 | 说明 |
|
||||
|---|---|---|---|---|
|
||||
| `older_than_minutes` | int | ❌ | 15 | 只扫创建时间早于「现在 − N 分钟」的 pending 单;`ge=0` |
|
||||
|
||||
- body:无
|
||||
|
||||
## 出参
|
||||
响应 `200`:`ReconcileResult`
|
||||
|
||||
**ReconcileResult**
|
||||
| 字段 | 类型 | 说明 |
|
||||
|---|---|---|
|
||||
| `checked` | int | 本次扫到的超时 pending 单数量 |
|
||||
| `resolved` | int | 其中被归一化为终态(success/failed)的数量 |
|
||||
|
||||
## 错误码
|
||||
- `401` 未带/无效/过期 admin token、管理员被禁用(响应头带 `WWW-Authenticate: Bearer`)
|
||||
- `403` 角色不足(需 `finance` 或 `super_admin`)
|
||||
- `422` query 参数校验失败(如 `older_than_minutes < 0`)
|
||||
- `503` 微信支付未配置(捕获 `WxPayNotConfiguredError`,`detail="微信支付未配置"`)
|
||||
|
||||
## 说明
|
||||
- 调用底层 `app.repositories.wallet.reconcile_pending_withdraws`(内部逐单调微信查单/撤单/退款,各自 commit)。
|
||||
- 写操作记审计 [admin_audit_log](../database/admin_audit_log.md)(`action="withdraw.reconcile"`,`detail` 为 `{checked, resolved}`,含触发管理员与客户端 IP)。
|
||||
- 关联 [withdraw_order](../database/withdraw_order.md)。
|
||||
@@ -0,0 +1,39 @@
|
||||
# POST /admin/api/withdraws/{out_bill_no}/refresh — 单笔提现重试查单
|
||||
|
||||
> 所属:Admin·提现 组(前缀 `/admin/api/withdraws`) | 鉴权:Bearer admin_token(角色:`finance`,`super_admin` 恒通过) | [← 返回 API 索引](../../README.md)
|
||||
|
||||
对单笔提现单调微信查单并归一化:`SUCCESS`→`success`;`FAIL`/`CANCELLED`/`CLOSED`→退款+`failed`;查到 `WAIT_USER_CONFIRM` 视为用户放弃(`cancel_if_unconfirmed=True`),撤单+退款;`ACCEPTED`/`PROCESSING` 等仍在途则保持 `pending`。已是终态的单直接返回、不再查。
|
||||
|
||||
## 入参
|
||||
- 路径:`out_bill_no`(string) — 商户提现单号
|
||||
- body:无
|
||||
|
||||
## 出参
|
||||
响应 `200`:`WithdrawOrderOut`(归一化后的最新提现单)
|
||||
|
||||
**WithdrawOrderOut**
|
||||
| 字段 | 类型 | 说明 |
|
||||
|---|---|---|
|
||||
| `id` | int | 提现单主键 |
|
||||
| `user_id` | int | 所属用户 |
|
||||
| `out_bill_no` | string | 商户提现单号 |
|
||||
| `amount_cents` | int | 提现金额,单位:**分** |
|
||||
| `status` | string | 单状态(`pending` / `success` / `failed`) |
|
||||
| `wechat_state` | string \| null | 微信侧转账状态 |
|
||||
| `transfer_bill_no` | string \| null | 微信转账单号 |
|
||||
| `fail_reason` | string \| null | 失败/退款原因 |
|
||||
| `created_at` | datetime | 创建时间(ISO 8601 UTC) |
|
||||
| `updated_at` | datetime | 更新时间(ISO 8601 UTC) |
|
||||
|
||||
## 错误码
|
||||
- `401` 未带/无效/过期 admin token、管理员被禁用(响应头带 `WWW-Authenticate: Bearer`)
|
||||
- `403` 角色不足(需 `finance` 或 `super_admin`)
|
||||
- `404` 提现单不存在(`detail="提现单不存在"`)
|
||||
- `503` 微信支付未配置(捕获 `WxPayNotConfiguredError`,`detail="微信支付未配置"`)
|
||||
|
||||
> 注:微信查单本身失败(非未配置)时不抛错、不改状态,单保持 `pending` 等下次重试,故无 `502`。
|
||||
|
||||
## 说明
|
||||
- 调用底层 `app.repositories.wallet.refresh_withdraw_status(..., cancel_if_unconfirmed=True)`(内部调微信查单/撤单/退款并 commit)。
|
||||
- 写操作记审计 [admin_audit_log](../database/admin_audit_log.md)(`action="withdraw.refresh"`,`target_id=out_bill_no`,`detail` 为 `{status, wechat_state}`,含触发管理员与客户端 IP)。
|
||||
- 关联 [withdraw_order](../database/withdraw_order.md)。金额单位为分。
|
||||
@@ -0,0 +1,37 @@
|
||||
# GET /admin/api/withdraws — 提现单列表(游标分页)
|
||||
|
||||
> 所属:Admin·提现 组(前缀 `/admin/api/withdraws`) | 鉴权:Bearer admin_token(角色:任意已登录管理员,列表为只读,仅需 `get_current_admin`,无 `require_role`) | [← 返回 API 索引](../../README.md)
|
||||
|
||||
跨用户查询全量提现单,可按 `user_id` / `status` 过滤。游标分页(`id` 倒序)。
|
||||
|
||||
## 入参(query)
|
||||
| 字段 | 类型 | 必填 | 默认 | 说明 |
|
||||
|---|---|---|---|---|
|
||||
| `user_id` | int | ❌ | null | 按用户过滤;不传则查全量 |
|
||||
| `status` | string | ❌ | null | 按状态过滤(如 `pending` / `success` / `failed`) |
|
||||
| `limit` | int | ❌ | 20 | 1–100 |
|
||||
| `cursor` | int | ❌ | null | 上一页 next_cursor(查 `id < cursor`) |
|
||||
|
||||
## 出参
|
||||
响应 `200`:`{ items: WithdrawOrderOut[], next_cursor: int|null }`(`next_cursor=null` 表示末页)
|
||||
|
||||
**WithdrawOrderOut**
|
||||
| 字段 | 类型 | 说明 |
|
||||
|---|---|---|
|
||||
| `id` | int | 提现单主键 |
|
||||
| `user_id` | int | 所属用户 |
|
||||
| `out_bill_no` | string | 商户提现单号(业务主键,重试/对账以此为准) |
|
||||
| `amount_cents` | int | 提现金额,单位:**分** |
|
||||
| `status` | string | 单状态(`pending` / `success` / `failed`) |
|
||||
| `wechat_state` | string \| null | 微信侧转账状态(如 `ACCEPTED` / `PROCESSING` / `WAIT_USER_CONFIRM` / `SUCCESS`) |
|
||||
| `transfer_bill_no` | string \| null | 微信转账单号 |
|
||||
| `fail_reason` | string \| null | 失败/退款原因 |
|
||||
| `created_at` | datetime | 创建时间(ISO 8601 UTC) |
|
||||
| `updated_at` | datetime | 更新时间(ISO 8601 UTC) |
|
||||
|
||||
## 错误码
|
||||
- `401` 未带/无效/过期 admin token、管理员被禁用(响应头带 `WWW-Authenticate: Bearer`)
|
||||
- `422` query 参数校验失败(如 `limit` 越界、类型错误)
|
||||
|
||||
## 说明
|
||||
关联 [withdraw_order](../database/withdraw_order.md)。金额单位为分。
|
||||
Reference in New Issue
Block a user