复制项目
This commit is contained in:
439
docs/API_WITHDRAW_APPLICATION.md
Normal file
439
docs/API_WITHDRAW_APPLICATION.md
Normal file
@@ -0,0 +1,439 @@
|
||||
# 提现申请接口文档
|
||||
|
||||
## 基础信息
|
||||
|
||||
- **基础路径**: `/wallet`
|
||||
- **认证方式**: 所有接口都需要在请求头中携带 `token`(通过 `mw.CheckToken` 中间件验证)
|
||||
- **请求方法**: 所有接口均为 `POST`
|
||||
- **Content-Type**: `application/json`
|
||||
|
||||
## 响应格式说明
|
||||
|
||||
所有接口的响应格式统一为:
|
||||
|
||||
```json
|
||||
{
|
||||
"errCode": 0, // 错误码,0 表示成功
|
||||
"errMsg": "", // 错误消息
|
||||
"errDlt": "", // 错误详情
|
||||
"data": {} // 响应数据
|
||||
}
|
||||
```
|
||||
|
||||
## 公共数据结构
|
||||
|
||||
### RequestPagination(分页信息)
|
||||
|
||||
```json
|
||||
{
|
||||
"pageNumber": 1, // 页码(从1开始)
|
||||
"showNumber": 10 // 每页显示数量
|
||||
}
|
||||
```
|
||||
|
||||
### WithdrawApplicationInfo(提现申请信息)
|
||||
|
||||
```json
|
||||
{
|
||||
"id": "string", // 申请ID
|
||||
"userID": "string", // 用户ID
|
||||
"amount": 10000, // 提现金额(单位:分)
|
||||
"withdrawAccount": "string", // 提现账号
|
||||
"withdrawAccountType": 1, // 提现账号类型:1-支付宝,2-微信,3-银行卡
|
||||
"status": 1, // 申请状态:1-待审核,2-已通过,3-已拒绝,4-处理中,5-已完成
|
||||
"auditorID": "string", // 审核人ID(管理员ID)
|
||||
"auditTime": 1234567890123, // 审核时间(毫秒时间戳,未审核时为0)
|
||||
"auditRemark": "string", // 审核备注
|
||||
"ip": "string", // 申请IP
|
||||
"deviceID": "string", // 设备ID
|
||||
"platform": "string", // 平台(iOS、Android、Web等)
|
||||
"deviceModel": "string", // 设备型号
|
||||
"deviceBrand": "string", // 设备品牌
|
||||
"osVersion": "string", // 操作系统版本
|
||||
"appVersion": "string", // 应用版本
|
||||
"remark": "string", // 申请备注
|
||||
"createTime": 1234567890123, // 创建时间(毫秒时间戳)
|
||||
"updateTime": 1234567890123 // 更新时间(毫秒时间戳)
|
||||
}
|
||||
```
|
||||
|
||||
### 提现申请状态说明
|
||||
|
||||
| 状态值 | 状态名称 | 说明 |
|
||||
|--------|---------|------|
|
||||
| 1 | 待审核 | 用户已提交申请,等待管理员审核 |
|
||||
| 2 | 已通过 | 管理员审核通过 |
|
||||
| 3 | 已拒绝 | 管理员审核拒绝 |
|
||||
| 4 | 处理中 | 审核通过后,正在处理提现 |
|
||||
| 5 | 已完成 | 提现已完成 |
|
||||
|
||||
---
|
||||
|
||||
## 接口列表
|
||||
|
||||
### 1. 设置支付密码
|
||||
|
||||
**接口地址**: `/wallet/payment_password/set`
|
||||
|
||||
**请求参数**:
|
||||
|
||||
```json
|
||||
{
|
||||
"newPassword": "string", // 新支付密码(必填)
|
||||
"oldPassword": "string" // 旧支付密码(修改时必填,首次设置时不需要)
|
||||
}
|
||||
```
|
||||
|
||||
**响应参数**:
|
||||
|
||||
```json
|
||||
{
|
||||
"errCode": 0,
|
||||
"errMsg": "",
|
||||
"errDlt": "",
|
||||
"data": {}
|
||||
}
|
||||
```
|
||||
|
||||
**业务逻辑**:
|
||||
|
||||
1. **首次设置支付密码**(钱包不存在或未设置支付密码):
|
||||
- 不需要提供 `oldPassword`
|
||||
- 如果提供了 `oldPassword`,会返回错误
|
||||
- 如果钱包不存在,会自动创建钱包并设置支付密码
|
||||
|
||||
2. **修改支付密码**(已设置支付密码):
|
||||
- 必须提供 `oldPassword`
|
||||
- 验证旧密码是否正确
|
||||
- 验证新密码不能与旧密码相同
|
||||
- 更新支付密码
|
||||
|
||||
**错误码说明**:
|
||||
|
||||
| 错误码 | 错误信息 | 说明 |
|
||||
|--------|---------|------|
|
||||
| 400 | 新支付密码不能为空 | newPassword 为空 |
|
||||
| 400 | 修改支付密码需要提供旧密码 | 已设置密码但未提供 oldPassword |
|
||||
| 400 | 首次设置支付密码不需要提供旧密码 | 未设置密码但提供了 oldPassword |
|
||||
| 400 | 旧支付密码错误 | oldPassword 验证失败 |
|
||||
| 400 | 新密码不能与旧密码相同 | newPassword == oldPassword |
|
||||
|
||||
**请求示例**:
|
||||
|
||||
首次设置:
|
||||
```json
|
||||
{
|
||||
"newPassword": "123456"
|
||||
}
|
||||
```
|
||||
|
||||
修改密码:
|
||||
```json
|
||||
{
|
||||
"newPassword": "654321",
|
||||
"oldPassword": "123456"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 2. 设置提现账号
|
||||
|
||||
**接口地址**: `/wallet/withdraw_account/set`
|
||||
|
||||
**请求参数**:
|
||||
|
||||
```json
|
||||
{
|
||||
"account": "string", // 提现账号(必填)
|
||||
"accountType": 1 // 账号类型(必填):1-支付宝,2-微信,3-银行卡
|
||||
}
|
||||
```
|
||||
|
||||
**响应参数**:
|
||||
|
||||
```json
|
||||
{
|
||||
"errCode": 0,
|
||||
"errMsg": "",
|
||||
"errDlt": "",
|
||||
"data": {}
|
||||
}
|
||||
```
|
||||
|
||||
**账号类型说明**:
|
||||
|
||||
| 类型值 | 类型名称 | 说明 |
|
||||
|--------|---------|------|
|
||||
| 1 | 支付宝 | 支付宝账号 |
|
||||
| 2 | 微信 | 微信账号 |
|
||||
| 3 | 银行卡 | 银行卡号 |
|
||||
|
||||
**错误码说明**:
|
||||
|
||||
| 错误码 | 错误信息 | 说明 |
|
||||
|--------|---------|------|
|
||||
| 400 | 提现账号不能为空 | account 为空 |
|
||||
| 400 | 账号类型无效,必须是1-支付宝,2-微信,3-银行卡 | accountType 不在有效范围内 |
|
||||
|
||||
**业务逻辑**:
|
||||
|
||||
1. 验证必填字段(账号、账号类型)
|
||||
2. 验证账号类型是否有效(1-3)
|
||||
3. 更新钱包中的提现账号和账号类型
|
||||
|
||||
---
|
||||
|
||||
### 3. 申请提现
|
||||
|
||||
**接口地址**: `/wallet/withdraw/apply`
|
||||
|
||||
**请求参数**:
|
||||
|
||||
```json
|
||||
{
|
||||
"amount": 10000, // 提现金额(单位:分,必填,必须大于0)
|
||||
"paymentPassword": "string", // 支付密码(必填)
|
||||
"ip": "string", // 申请IP(可选)
|
||||
"deviceID": "string", // 设备ID(可选)
|
||||
"platform": "string", // 平台(可选,如:iOS、Android、Web)
|
||||
"deviceModel": "string", // 设备型号(可选,如:iPhone 14 Pro)
|
||||
"deviceBrand": "string", // 设备品牌(可选,如:Apple)
|
||||
"osVersion": "string", // 操作系统版本(可选,如:iOS 17.0)
|
||||
"appVersion": "string" // 应用版本(可选)
|
||||
}
|
||||
```
|
||||
|
||||
**注意**:
|
||||
- 提现账号从用户钱包中自动获取,不需要在请求中提供
|
||||
- 如果钱包中未设置提现账号,会返回错误提示
|
||||
- 备注(remark)由后台管理员在审核时填写,用户申请时不需要提供
|
||||
|
||||
**响应参数**:
|
||||
|
||||
```json
|
||||
{
|
||||
"errCode": 0,
|
||||
"errMsg": "",
|
||||
"errDlt": "",
|
||||
"data": {
|
||||
"applicationID": "uuid-string" // 申请ID
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**错误码说明**:
|
||||
|
||||
| 错误码 | 错误信息 | 说明 |
|
||||
|--------|---------|------|
|
||||
| 400 | 提现金额必须大于0 | amount <= 0 |
|
||||
| 400 | 支付密码不能为空 | paymentPassword 为空 |
|
||||
| 400 | 钱包不存在,无法申请提现 | 用户钱包不存在 |
|
||||
| 400 | 请先设置支付密码 | 用户未设置支付密码 |
|
||||
| 400 | 支付密码错误 | 支付密码验证失败 |
|
||||
| 400 | 余额不足,无法申请提现 | 钱包余额 < 提现金额 |
|
||||
| 400 | 请先在钱包中设置提现账号 | 钱包中未设置提现账号 |
|
||||
|
||||
**业务逻辑**:
|
||||
|
||||
1. 验证必填字段(金额、支付密码)
|
||||
2. 获取用户钱包信息
|
||||
3. 验证支付密码
|
||||
4. 检查余额是否足够
|
||||
5. 检查钱包中是否设置了提现账号(从钱包中获取)
|
||||
6. 创建提现申请记录(状态:待审核,提现账号从钱包中获取)
|
||||
|
||||
---
|
||||
|
||||
### 4. 获取提现申请列表
|
||||
|
||||
**接口地址**: `/wallet/withdraw/list`
|
||||
|
||||
**请求参数**:
|
||||
|
||||
```json
|
||||
{
|
||||
"pagination": {
|
||||
"pageNumber": 1, // 页码(从1开始)
|
||||
"showNumber": 10 // 每页显示数量
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**响应参数**:
|
||||
|
||||
```json
|
||||
{
|
||||
"errCode": 0,
|
||||
"errMsg": "",
|
||||
"errDlt": "",
|
||||
"data": {
|
||||
"total": 100, // 总数
|
||||
"applications": [ // 申请列表
|
||||
{
|
||||
"id": "string",
|
||||
"userID": "string",
|
||||
"amount": 10000,
|
||||
"withdrawAccount": "string",
|
||||
"status": 1,
|
||||
"auditorID": "string",
|
||||
"auditTime": 1234567890123,
|
||||
"auditRemark": "string",
|
||||
"ip": "string",
|
||||
"deviceID": "string",
|
||||
"platform": "string",
|
||||
"deviceModel": "string",
|
||||
"deviceBrand": "string",
|
||||
"osVersion": "string",
|
||||
"appVersion": "string",
|
||||
"remark": "string",
|
||||
"createTime": 1234567890123,
|
||||
"updateTime": 1234567890123
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**业务逻辑**:
|
||||
|
||||
1. 从 token 中获取当前用户ID
|
||||
2. 根据用户ID查询提现申请列表
|
||||
3. 按创建时间倒序排列
|
||||
4. 支持分页查询
|
||||
|
||||
---
|
||||
|
||||
## 请求示例
|
||||
|
||||
### 申请提现
|
||||
|
||||
```bash
|
||||
curl -X POST http://your-domain/wallet/withdraw/apply \
|
||||
-H "Content-Type: application/json" \
|
||||
-H "token: your-token" \
|
||||
-d '{
|
||||
"amount": 10000,
|
||||
"paymentPassword": "123456",
|
||||
"ip": "192.168.1.1",
|
||||
"deviceID": "device-uuid",
|
||||
"platform": "iOS",
|
||||
"deviceModel": "iPhone 14 Pro",
|
||||
"deviceBrand": "Apple",
|
||||
"osVersion": "iOS 17.0",
|
||||
"appVersion": "1.0.0"
|
||||
}'
|
||||
```
|
||||
|
||||
**响应示例**:
|
||||
|
||||
```json
|
||||
{
|
||||
"errCode": 0,
|
||||
"errMsg": "",
|
||||
"errDlt": "",
|
||||
"data": {
|
||||
"applicationID": "550e8400-e29b-41d4-a716-446655440000"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 获取提现申请列表
|
||||
|
||||
```bash
|
||||
curl -X POST http://your-domain/wallet/withdraw/list \
|
||||
-H "Content-Type: application/json" \
|
||||
-H "token: your-token" \
|
||||
-d '{
|
||||
"pagination": {
|
||||
"pageNumber": 1,
|
||||
"showNumber": 10
|
||||
}
|
||||
}'
|
||||
```
|
||||
|
||||
**响应示例**:
|
||||
|
||||
```json
|
||||
{
|
||||
"errCode": 0,
|
||||
"errMsg": "",
|
||||
"errDlt": "",
|
||||
"data": {
|
||||
"total": 5,
|
||||
"applications": [
|
||||
{
|
||||
"id": "550e8400-e29b-41d4-a716-446655440000",
|
||||
"userID": "user123",
|
||||
"amount": 10000,
|
||||
"withdrawAccount": "6222021234567890123",
|
||||
"status": 1,
|
||||
"auditorID": "",
|
||||
"auditTime": 0,
|
||||
"auditRemark": "",
|
||||
"ip": "192.168.1.1",
|
||||
"deviceID": "device-uuid",
|
||||
"platform": "iOS",
|
||||
"deviceModel": "iPhone 14 Pro",
|
||||
"deviceBrand": "Apple",
|
||||
"osVersion": "iOS 17.0",
|
||||
"appVersion": "1.0.0",
|
||||
"remark": "提现备注",
|
||||
"createTime": 1704067200000,
|
||||
"updateTime": 1704067200000
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## RPC 接口说明
|
||||
|
||||
### gRPC 服务
|
||||
|
||||
**服务名**: `openim.chat.Chat`
|
||||
|
||||
### 1. CreateWithdrawApplication
|
||||
|
||||
**RPC 方法**: `CreateWithdrawApplication`
|
||||
|
||||
**请求消息**: `CreateWithdrawApplicationReq`
|
||||
|
||||
**响应消息**: `CreateWithdrawApplicationResp`
|
||||
|
||||
### 2. SetPaymentPassword
|
||||
|
||||
**RPC 方法**: `SetPaymentPassword`
|
||||
|
||||
**请求消息**: `SetPaymentPasswordReq`
|
||||
|
||||
**响应消息**: `SetPaymentPasswordResp`
|
||||
|
||||
### 3. GetWithdrawApplications
|
||||
|
||||
**RPC 方法**: `GetWithdrawApplications`
|
||||
|
||||
**请求消息**: `GetWithdrawApplicationsReq`
|
||||
|
||||
**响应消息**: `GetWithdrawApplicationsResp`
|
||||
|
||||
---
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. **支付密码验证**: 申请提现时必须提供正确的支付密码
|
||||
2. **余额检查**: 系统会检查钱包余额是否足够,余额不足时无法申请
|
||||
3. **提现账号**: 如果钱包中已设置提现账号,可以不传 `withdrawAccount`,系统会使用钱包中的账号
|
||||
4. **申请状态**: 新创建的申请状态为"待审核"(status=1),需要管理员审核
|
||||
5. **分页查询**: 列表接口支持分页,默认按创建时间倒序排列
|
||||
6. **权限控制**: 用户只能查看自己的提现申请列表
|
||||
|
||||
---
|
||||
|
||||
## 相关接口
|
||||
|
||||
- [钱包余额查询](./API_WALLET.md#获取钱包余额)
|
||||
- [钱包信息查询](./API_WALLET.md#获取钱包详细信息)
|
||||
- [设置支付密码](#设置支付密码)
|
||||
Reference in New Issue
Block a user