Files
platform/docs/api.yaml

5943 lines
141 KiB
YAML
Raw Normal View History

2025-05-10 12:48:43 +08:00
openapi: 3.1.0
info:
2026-06-01 17:58:55 +08:00
title: 蓝狐后端接口
version: 2026-06-01
description: |
基于 `web/routes.go`、当前 handler 和 service 实现整理。
约定说明:
- 正式文档仅覆盖 `/api/*` 与 `/callback/*` 路由
- `/debug/*` 为开发调试接口,不纳入正式对外规范
- 除 `/api/auth/token` 外,错误响应默认由全局错误处理中间件以 `text/plain` 返回
- 分页请求统一使用 `page` / `size`,默认页码 `1`,默认大小 `10`,最大 `100`
2025-05-10 12:48:43 +08:00
servers:
2026-06-01 17:58:55 +08:00
- url: /
description: relative server root
tags:
- name: public/auth
description: 公开认证接口
- name: public/resource
description: 公开套餐接口
- name: public/trade
description: 公开交易接口
- name: public/inquiry
description: 公开咨询接口
- name: public/product
description: 公开产品接口
- name: client/verify
description: 客户端验证接口
- name: client/proxy
description: 客户端代理接口
- name: client/channel
description: 客户端通道接口
- name: client/article
description: 客户端文章接口
- name: user/user
description: 用户资料接口
- name: user/whitelist
description: 用户白名单接口
- name: user/resource
description: 用户套餐接口
- name: user/batch
description: 用户批次接口
- name: user/channel
description: 用户通道接口
- name: user/trade
description: 用户交易接口
- name: user/bill
description: 用户账单接口
- name: user/balance
description: 用户余额变动接口
- name: user/coupon-user
description: 用户已发放优惠券接口
- name: user/announcement
description: 用户公告接口
- name: user/verify
description: 用户验证接口
- name: admin/admin
description: 管理员管理接口
- name: admin/admin-role
description: 管理员角色接口
- name: admin/permission
description: 权限接口
- name: admin/user
description: 后台用户接口
- name: admin/resource
description: 后台套餐接口
- name: admin/batch
description: 后台批次接口
- name: admin/channel
description: 后台通道接口
- name: admin/proxy
description: 后台代理接口
- name: admin/trade
description: 后台交易接口
- name: admin/bill
description: 后台账单接口
- name: admin/balance-activity
description: 后台余额变动接口
- name: admin/product
description: 后台产品接口
- name: admin/discount
description: 后台折扣接口
- name: admin/coupon
description: 后台优惠券接口
- name: admin/coupon-user
description: 后台已发放优惠券接口
- name: admin/article
description: 后台文章接口
- name: admin/article-group
description: 后台文章分组接口
- name: callback/identify
description: 实名认证回调接口
2025-05-10 12:48:43 +08:00
components:
2026-06-01 17:58:55 +08:00
securitySchemes:
bearerAuth:
type: http
scheme: bearer
bearerFormat: UUID
description: |
使用 `Authorization: Bearer <access_token>`。
用户、管理员、客户端访问令牌均通过 `/api/auth/token` 获取。
basicAuth:
type: http
scheme: basic
description: |
官方客户端可使用 `Authorization: Basic <base64(client_id:client_secret)>`。
responses:
PlainTextError:
description: 业务错误或系统错误
content:
text/plain:
schema:
type: string
OAuthError:
description: OAuth2 错误响应
content:
application/json:
schema:
$ref: "#/components/schemas/TokenErrorResponse"
NoContent:
description: 成功,无响应体
2025-05-10 12:48:43 +08:00
schemas:
2026-06-01 17:58:55 +08:00
BaseModel:
type: object
properties:
id:
type: integer
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
required:
- id
- created_at
- updated_at
2025-05-10 12:48:43 +08:00
PageRequest:
type: object
properties:
page:
type: integer
2026-06-01 17:58:55 +08:00
minimum: 1
2025-05-10 12:48:43 +08:00
default: 1
size:
type: integer
2026-06-01 17:58:55 +08:00
minimum: 1
2025-05-10 12:48:43 +08:00
maximum: 100
2026-06-01 17:58:55 +08:00
default: 10
2025-05-10 12:48:43 +08:00
2026-06-01 17:58:55 +08:00
PageMeta:
2025-05-10 12:48:43 +08:00
type: object
properties:
total:
type: integer
page:
type: integer
size:
type: integer
required:
- total
- page
- size
2026-06-01 17:58:55 +08:00
IdRequest:
type: object
properties:
id:
type: integer
required:
- id
AuthorizePostRequest:
type: object
properties:
2026-06-01 17:58:55 +08:00
accept:
type: boolean
scope:
type: string
2026-06-01 17:58:55 +08:00
TokenRequest:
type: object
properties:
grant_type:
type: string
enum:
- authorization_code
- client_credentials
- refresh_token
- password
client_id:
type: string
client_secret:
type: string
scope:
type: string
code:
type: string
redirect_uri:
type: string
code_verifier:
type: string
refresh_token:
type: string
login_type:
type: string
enum:
- password
- phone_code
- email_code
login_pool:
type: string
enum:
- user
- admin
username:
type: string
password:
type: string
remember:
type: boolean
required:
- grant_type
2026-06-01 17:58:55 +08:00
TokenResponse:
type: object
properties:
access_token:
type: string
refresh_token:
type: string
expires_in:
type: integer
token_type:
type: string
example: Bearer
scope:
type: string
required:
- access_token
- expires_in
- token_type
TokenErrorResponse:
type: object
properties:
error:
type: string
error_description:
type: string
required:
- error
RevokeRequest:
type: object
properties:
access_token:
type: string
refresh_token:
type: string
IntrospectUserResponse:
type: object
description: 当前实现返回用户资料,并额外包含 `has_password`
properties:
id:
type: integer
phone:
type: string
username:
type: string
email:
type: string
name:
type: string
avatar:
type: string
status:
type: integer
balance:
type: string
id_type:
type: integer
id_no:
type: string
contact_qq:
type: string
contact_wechat:
type: string
has_password:
type: boolean
additionalProperties: true
IntrospectAdminResponse:
type: object
description: 当前实现返回管理员资料,并额外包含 `scopes`
properties:
id:
type: integer
username:
type: string
name:
type: string
avatar:
type: string
phone:
type: string
email:
type: string
status:
type: integer
lock:
type: boolean
scopes:
type: array
items:
type: string
additionalProperties: true
VerifierRequest:
type: object
properties:
purpose:
type: integer
description: 0=登录1=修改密码
enum: [0, 1]
phone:
type: string
required:
- purpose
- phone
CreateInquiryRequest:
type: object
properties:
company:
type: string
maxLength: 200
name:
type: string
maxLength: 100
phone:
type: string
maxLength: 20
email:
type: string
format: email
maxLength: 100
content:
type: string
maxLength: 1000
required:
- name
- phone
- content
UpdateUserRequest:
type: object
properties:
username:
type: string
email:
type: string
format: email
contact_qq:
type: string
contact_wechat:
type: string
UpdateAccountRequest:
type: object
properties:
username:
type: string
password:
type: string
UpdatePasswordRequest:
type: object
properties:
code:
type: string
password:
type: string
required:
- code
- password
IdentifyRequest:
type: object
properties:
type:
type: integer
enum: [1, 2]
description: 1=个人认证2=企业认证
name:
type: string
iden_no:
type: string
required:
- type
- name
- iden_no
IdentifyResponse:
type: object
properties:
identified:
type: boolean
target:
type: string
required:
- identified
ListWhitelistRequest:
allOf:
- $ref: "#/components/schemas/PageRequest"
CreateWhitelistRequest:
type: object
properties:
host:
type: string
remark:
type: string
required:
- host
UpdateWhitelistRequest:
type: object
properties:
id:
type: integer
host:
type: string
remark:
type: string
required:
- id
RemoveWhitelistItem:
type: object
properties:
id:
type: integer
required:
- id
CreateResourceData:
type: object
properties:
type:
type: integer
enum: [1, 2]
description: 1=短效动态2=长效动态
short:
$ref: "#/components/schemas/CreateShortResourceData"
long:
$ref: "#/components/schemas/CreateLongResourceData"
coupon:
type: integer
description: 已发放优惠券 ID
required:
- type
CreateShortResourceData:
type: object
properties:
live:
type: integer
mode:
type: integer
enum: [1, 2]
description: 1=包时2=包量
quota:
type: integer
expire:
type: integer
description: 包时模式下的过期天数
required:
- live
- mode
- quota
CreateLongResourceData:
type: object
properties:
live:
type: integer
mode:
type: integer
enum: [1, 2]
quota:
type: integer
expire:
type: integer
required:
- live
- mode
- quota
PageResourceShortRequest:
allOf:
- $ref: "#/components/schemas/PageRequest"
- type: object
properties:
resource_no:
type: string
active:
type: boolean
type:
type: integer
create_after:
type: string
format: date-time
create_before:
type: string
format: date-time
expire_after:
type: string
format: date-time
expire_before:
type: string
format: date-time
status:
type: integer
description: 0=全部1=有效2=过期
PageResourceLongRequest:
allOf:
- $ref: "#/components/schemas/PageRequest"
- type: object
properties:
resource_no:
type: string
active:
type: boolean
type:
type: integer
create_after:
type: string
format: date-time
create_before:
type: string
format: date-time
expire_after:
type: string
format: date-time
expire_before:
type: string
format: date-time
status:
type: integer
description: 0=全部1=有效2=过期
UpdateResourceCheckIpRequest:
type: object
properties:
id:
type: integer
checkip:
type: boolean
required:
- id
- checkip
UpdateResourceByAdminRequest:
type: object
properties:
id:
type: integer
active:
type: boolean
checkip:
type: boolean
required:
- id
ResourcePriceResponse:
type: object
properties:
price:
type: string
discounted:
type: string
actual:
type: string
required:
- price
- discounted
- actual
StatisticPersonalResponse:
type: object
properties:
short:
type: object
properties:
resource_count:
type: integer
resource_quota_sum:
type: integer
resource_daily_free_sum:
type: integer
long:
type: object
properties:
resource_count:
type: integer
resource_quota_sum:
type: integer
resource_daily_free_sum:
type: integer
StatisticResourceUsageRequest:
type: object
properties:
time_start:
type: string
format: date-time
time_end:
type: string
format: date-time
StatisticResourceUsageItem:
type: object
properties:
date:
type: string
format: date-time
count:
type: integer
required:
- date
- count
PageBatchRequest:
allOf:
- $ref: "#/components/schemas/PageRequest"
- type: object
properties:
resource_no:
type: string
time_start:
type: string
format: date-time
time_end:
type: string
format: date-time
PageBatchByAdminRequest:
allOf:
- $ref: "#/components/schemas/PageRequest"
- type: object
properties:
user_phone:
type: string
resource_no:
type: string
batch_no:
type: string
prov:
type: string
city:
type: string
isp:
type: string
created_at_start:
type: string
format: date-time
created_at_end:
type: string
format: date-time
PageBatchOfUserByAdminRequest:
allOf:
- $ref: "#/components/schemas/PageRequest"
- type: object
properties:
user_id:
type: integer
resource_no:
type: string
batch_no:
type: string
prov:
type: string
city:
type: string
isp:
type: string
created_at_start:
type: string
format: date-time
created_at_end:
type: string
format: date-time
required:
- user_id
ListChannelsRequest:
allOf:
- $ref: "#/components/schemas/PageRequest"
- type: object
properties:
auth_type:
type: integer
enum: [1, 2]
description: 1=白名单鉴权2=账号密码鉴权0 或缺省=全部
expire_after:
type: string
format: date-time
expire_before:
type: string
format: date-time
CreateChannelRequest:
type: object
properties:
resource_id:
type: integer
auth_type:
type: integer
enum: [1, 2]
protocol:
type: integer
count:
type: integer
prov:
type: string
city:
type: string
isp:
type: integer
required:
- resource_id
- auth_type
- protocol
- count
CreateChannelRequestV2:
type: object
properties:
resource_no:
type: string
auth_type:
type: integer
enum: [1, 2]
protocol:
type: integer
count:
type: integer
prov:
type: string
city:
type: string
isp:
type: integer
required:
- resource_no
- auth_type
- protocol
- count
CreateChannelResponseItem:
type: object
properties:
host:
type: string
ip:
type: string
port:
type: integer
username:
type: string
password:
type: string
required:
- host
- ip
- port
RemoveChannelsRequest:
type: object
properties:
batch:
type: string
required:
- batch
PageChannelsByAdminRequest:
allOf:
- $ref: "#/components/schemas/PageRequest"
- type: object
properties:
user_phone:
type: string
resource_no:
type: string
batch_no:
type: string
proxy_host:
type: string
proxy_port:
type: integer
node_ip:
type: string
expired_at_start:
type: string
format: date-time
expired_at_end:
type: string
format: date-time
expired:
type: boolean
PageChannelOfUserByAdminRequest:
allOf:
- $ref: "#/components/schemas/PageRequest"
- type: object
properties:
user_id:
type: integer
resource_no:
type: string
batch_no:
type: string
proxy_host:
type: string
proxy_port:
type: integer
expired_at_start:
type: string
format: date-time
expired_at_end:
type: string
format: date-time
required:
- user_id
SyncChannelClearExpiredRequest:
type: object
properties:
proxy_id:
type: integer
required:
- proxy_id
SyncChannelClearExpiredResponse:
type: object
properties:
count:
type: integer
required:
- count
CreateTradeData:
type: object
properties:
platform:
type: integer
enum: [1, 2]
description: 1=电脑网站2=手机网站
method:
type: integer
enum: [1, 2, 3, 4, 5]
description: 1=支付宝2=微信3=商福通4=商福通支付宝5=商福通微信
required:
- platform
- method
UpdateBalanceData:
type: object
properties:
amount:
type: integer
description: 充值金额,单位分
required:
- amount
TradeCreateRequest:
allOf:
- $ref: "#/components/schemas/CreateTradeData"
- type: object
properties:
type:
type: integer
enum: [1, 2]
description: 1=购买产品2=充值余额
resource:
$ref: "#/components/schemas/CreateResourceData"
recharge:
$ref: "#/components/schemas/UpdateBalanceData"
required:
- type
TradeRef:
type: object
properties:
trade_no:
type: string
method:
type: integer
enum: [1, 2, 3, 4, 5]
required:
- trade_no
- method
TradeCompleteByAdminRequest:
allOf:
- $ref: "#/components/schemas/TradeRef"
- type: object
properties:
user_id:
type: integer
required:
- user_id
CreateTradeResult:
type: object
properties:
pay_url:
type: string
trade_no:
type: string
required:
- pay_url
- trade_no
PageTradeByAdminRequest:
allOf:
- $ref: "#/components/schemas/PageRequest"
- type: object
properties:
user_phone:
type: string
inner_no:
type: string
outer_no:
type: string
method:
type: integer
platform:
type: integer
status:
type: integer
created_at_start:
type: string
format: date-time
created_at_end:
type: string
format: date-time
PageTradeOfUserByAdminRequest:
allOf:
- $ref: "#/components/schemas/PageRequest"
- type: object
properties:
user_id:
type: integer
inner_no:
type: string
outer_no:
type: string
method:
type: integer
platform:
type: integer
status:
type: integer
created_at_start:
type: string
format: date-time
created_at_end:
type: string
format: date-time
required:
- user_id
ListBillRequest:
allOf:
- $ref: "#/components/schemas/PageRequest"
- type: object
properties:
bill_no:
type: string
type:
type: integer
description: 1=消费2=退款3=充值
create_after:
type: string
format: date-time
create_before:
type: string
format: date-time
PageBillByAdminRequest:
allOf:
- $ref: "#/components/schemas/PageRequest"
- type: object
properties:
user_phone:
type: string
trade_inner_no:
type: string
resource_no:
type: string
bill_no:
type: string
created_at_start:
type: string
format: date-time
created_at_end:
type: string
format: date-time
product_code:
type: string
sku_code:
type: string
PageBillOfUserByAdminRequest:
allOf:
- $ref: "#/components/schemas/PageRequest"
- type: object
properties:
user_id:
type: integer
trade_inner_no:
type: string
resource_no:
type: string
bill_no:
type: string
created_at_start:
type: string
format: date-time
created_at_end:
type: string
format: date-time
product_code:
type: string
sku_code:
type: string
required:
- user_id
PageBalanceActivityByUserRequest:
allOf:
- $ref: "#/components/schemas/PageRequest"
- type: object
properties:
bill_no:
type: string
created_at_start:
type: string
format: date-time
created_at_end:
type: string
format: date-time
PageBalanceActivityByAdminRequest:
allOf:
- $ref: "#/components/schemas/PageRequest"
- type: object
properties:
user_phone:
type: string
bill_no:
type: string
created_at_start:
type: string
format: date-time
created_at_end:
type: string
format: date-time
PageBalanceActivityOfUserByAdminRequest:
allOf:
- $ref: "#/components/schemas/PageRequest"
- type: object
properties:
user_id:
type: integer
bill_no:
type: string
created_at_start:
type: string
format: date-time
created_at_end:
type: string
format: date-time
required:
- user_id
CouponUserPageFilter:
type: object
properties:
coupon_id:
type: integer
coupon_name:
type: string
status:
type: integer
enum: [0, 1, 2]
description: 0=未使用1=已使用2=已禁用
expired:
type: boolean
created_at_start:
type: string
format: date-time
created_at_end:
type: string
format: date-time
expire_at_start:
type: string
format: date-time
expire_at_end:
type: string
format: date-time
used_at_start:
type: string
format: date-time
used_at_end:
type: string
format: date-time
PageCouponUserRequest:
allOf:
- $ref: "#/components/schemas/PageRequest"
- $ref: "#/components/schemas/CouponUserPageFilter"
PageCouponUserByAdminRequest:
allOf:
- $ref: "#/components/schemas/PageRequest"
- $ref: "#/components/schemas/CouponUserPageFilter"
- type: object
properties:
user_id:
type: integer
user_phone:
type: string
PageCouponUserOfUserByAdminRequest:
allOf:
- $ref: "#/components/schemas/PageRequest"
- $ref: "#/components/schemas/CouponUserPageFilter"
- type: object
properties:
user_id:
type: integer
required:
- user_id
CreateCouponUserRequest:
type: object
properties:
coupon_id:
type: integer
user_id:
type: integer
status:
type: integer
enum: [0, 1, 2]
expire_at:
type: string
format: date-time
used_at:
type: string
format: date-time
required:
- coupon_id
- user_id
UpdateCouponUserRequest:
type: object
properties:
id:
type: integer
status:
type: integer
enum: [0, 1, 2]
expire_at:
type: string
format: date-time
expire_at_clear:
type: boolean
used_at:
type: string
format: date-time
used_at_clear:
type: boolean
required:
- id
AssignCouponRequest:
type: object
properties:
coupon_id:
type: integer
user_id:
type: integer
required:
- coupon_id
- user_id
ListAnnouncementsRequest:
allOf:
- $ref: "#/components/schemas/PageRequest"
PageUserByAdminRequest:
allOf:
- $ref: "#/components/schemas/PageRequest"
- type: object
properties:
account:
type: string
name:
type: string
identified:
type: boolean
enabled:
type: boolean
assigned:
type: boolean
created_at_start:
type: string
format: date-time
created_at_end:
type: string
format: date-time
GetUserByAdminRequest:
type: object
properties:
account:
type: string
name:
type: string
CreateUserByAdminRequest:
type: object
properties:
phone:
type: string
admin_id:
type: integer
discount_id:
type: integer
username:
type: string
email:
type: string
format: email
password:
type: string
avatar:
type: string
status:
type: integer
enum: [0, 1]
contact_qq:
type: string
contact_wechat:
type: string
required:
- phone
UpdateUserByAdminRequest:
type: object
properties:
id:
type: integer
phone:
type: string
admin_id:
type: integer
discount_id:
type: integer
username:
type: string
email:
type: string
format: email
password:
type: string
name:
type: string
avatar:
type: string
status:
type: integer
enum: [0, 1]
id_type:
type: integer
enum: [0, 1, 2]
id_no:
type: string
id_token:
type: string
contact_qq:
type: string
contact_wechat:
type: string
required:
- id
UpdateUserBalanceRequest:
type: object
properties:
user_id:
type: integer
balance:
type: string
required:
- user_id
- balance
UpdateUserBalanceChangeRequest:
type: object
properties:
user_id:
type: integer
amount:
type: string
required:
- user_id
- amount
BindAdminRequest:
type: object
properties:
user_id:
type: integer
required:
- user_id
PageUserNotBindByAdminRequest:
allOf:
- $ref: "#/components/schemas/PageRequest"
- type: object
properties:
phone:
type: string
CreateAdminRequest:
type: object
properties:
username:
type: string
password:
type: string
name:
type: string
avatar:
type: string
phone:
type: string
email:
type: string
format: email
status:
type: integer
enum: [0, 1]
roles:
type: array
items:
type: integer
required:
- username
- password
UpdateAdminRequest:
type: object
properties:
id:
type: integer
password:
type: string
name:
type: string
avatar:
type: string
phone:
type: string
email:
type: string
format: email
status:
type: integer
enum: [0, 1]
roles:
type: array
items:
type: integer
required:
- id
CreateAdminRoleRequest:
type: object
properties:
name:
type: string
description:
type: string
active:
type: boolean
sort:
type: integer
permissions:
type: array
items:
type: integer
required:
- name
UpdateAdminRoleRequest:
type: object
properties:
id:
type: integer
name:
type: string
description:
type: string
active:
type: boolean
sort:
type: integer
permissions:
type: array
items:
type: integer
required:
- id
PageResourceShortByAdminRequest:
allOf:
- $ref: "#/components/schemas/PageRequest"
- type: object
properties:
user_phone:
type: string
resource_no:
type: string
active:
type: boolean
mode:
type: integer
created_at_start:
type: string
format: date-time
created_at_end:
type: string
format: date-time
expired:
type: boolean
PageResourceLongByAdminRequest:
allOf:
- $ref: "#/components/schemas/PageRequest"
- type: object
properties:
user_phone:
type: string
resource_no:
type: string
active:
type: boolean
mode:
type: integer
created_at_start:
type: string
format: date-time
created_at_end:
type: string
format: date-time
expired:
type: boolean
PageResourceShortOfUserByAdminRequest:
allOf:
- $ref: "#/components/schemas/PageRequest"
- type: object
properties:
user_id:
type: integer
resource_no:
type: string
active:
type: boolean
mode:
type: integer
created_at_start:
type: string
format: date-time
created_at_end:
type: string
format: date-time
required:
- user_id
PageResourceLongOfUserByAdminRequest:
allOf:
- $ref: "#/components/schemas/PageRequest"
- type: object
properties:
user_id:
type: integer
resource_no:
type: string
active:
type: boolean
mode:
type: integer
created_at_start:
type: string
format: date-time
created_at_end:
type: string
format: date-time
required:
- user_id
CreateProxyRequest:
type: object
properties:
mac:
type: string
ip:
type: string
host:
type: string
secret:
type: string
type:
type: integer
enum: [1, 2]
status:
type: integer
enum: [0, 1]
required:
- mac
- ip
UpdateProxyRequest:
type: object
properties:
id:
type: integer
mac:
type: string
ip:
type: string
host:
type: string
secret:
type: string
required:
- id
UpdateProxyStatusRequest:
type: object
properties:
id:
type: integer
status:
type: integer
enum: [0, 1]
required:
- id
- status
ProxyEdge:
type: object
properties:
id:
type: integer
host:
type: string
port:
type: integer
prov:
type: string
city:
type: string
isp:
type: string
status:
type: integer
loss:
type: integer
latency:
type: integer
ProxyPermit:
type: object
properties:
id:
type: integer
expire:
type: string
format: date-time
whitelists:
type: array
items:
type: string
username:
type: string
password:
type: string
ProxyReportOnlineRequest:
type: object
properties:
name:
type: string
version:
type: integer
required:
- name
- version
ProxyReportOfflineRequest:
type: object
properties:
id:
type: integer
required:
- id
ProxyReportUpdateRequest:
type: object
properties:
id:
type: integer
edges:
type: array
items:
$ref: "#/components/schemas/ProxyEdge"
required:
- id
- edges
ProxyUnavailableResponse:
type: object
properties:
error:
type: string
required:
- error
CreateProductRequest:
type: object
properties:
code:
type: string
name:
type: string
description:
type: string
sort:
type: integer
status:
type: integer
UpdateProductRequest:
type: object
properties:
id:
type: integer
code:
type: string
name:
type: string
description:
type: string
sort:
type: integer
status:
type: integer
required:
- id
AllProductSkuByAdminRequest:
type: object
properties:
product_code:
type: string
PageProductSkuByAdminRequest:
allOf:
- $ref: "#/components/schemas/PageRequest"
- type: object
properties:
product_id:
type: integer
CreateProductSkuRequest:
type: object
properties:
product_id:
type: integer
discount_id:
type: integer
code:
type: string
name:
type: string
price:
type: string
price_min:
type: string
sort:
type: integer
count_min:
type: integer
required:
- product_id
- discount_id
- code
- name
- price
- price_min
- sort
UpdateProductSkuRequest:
type: object
properties:
id:
type: integer
discount_id:
type: integer
code:
type: string
name:
type: string
price:
type: string
price_min:
type: string
status:
type: integer
sort:
type: integer
count_min:
type: integer
required:
- id
UpdateProductSkuStatusRequest:
type: object
properties:
id:
type: integer
status:
type: integer
required:
- id
- status
BatchUpdateSkuDiscountRequest:
type: object
properties:
product_id:
type: integer
discount_id:
type: integer
required:
- product_id
- discount_id
CreateDiscountRequest:
type: object
properties:
name:
type: string
discount:
type: integer
required:
- name
- discount
UpdateDiscountRequest:
type: object
properties:
id:
type: integer
name:
type: string
discount:
type: integer
required:
- id
CreateCouponRequest:
type: object
properties:
name:
type: string
amount:
type: string
min_amount:
type: string
count:
type: integer
status:
type: integer
enum: [0, 1]
expire_type:
type: integer
enum: [0, 1, 2]
expire_at:
type: string
format: date-time
expire_in:
type: integer
required:
- name
- amount
UpdateCouponRequest:
type: object
properties:
id:
type: integer
name:
type: string
amount:
type: string
min_amount:
type: string
count:
type: integer
status:
type: integer
enum: [0, 1]
expire_type:
type: integer
enum: [0, 1, 2]
expire_at:
type: string
format: date-time
expire_in:
type: integer
required:
- id
PageArticleRequest:
allOf:
- $ref: "#/components/schemas/PageRequest"
- type: object
properties:
keyword:
type: string
group_id:
type: integer
status:
type: integer
enum: [0, 1]
CreateArticleRequest:
type: object
properties:
group_id:
type: integer
title:
type: string
content:
type: string
sort:
type: integer
status:
type: integer
enum: [0, 1]
required:
- group_id
- title
UpdateArticleRequest:
type: object
properties:
id:
type: integer
group_id:
type: integer
title:
type: string
content:
type: string
sort:
type: integer
status:
type: integer
enum: [0, 1]
required:
- id
2026-06-06 17:22:01 +08:00
ArticleUploadResponse:
type: object
properties:
url:
type: string
path:
type: string
original_name:
type: string
size:
type: integer
format: int64
mime_type:
type: string
required:
- url
- path
- original_name
- size
- mime_type
2026-06-01 17:58:55 +08:00
PageArticleGroupRequest:
allOf:
- $ref: "#/components/schemas/PageRequest"
- type: object
properties:
keyword:
type: string
status:
type: integer
enum: [0, 1]
CreateArticleGroupRequest:
type: object
properties:
name:
type: string
code:
type: string
sort:
type: integer
status:
type: integer
enum: [0, 1]
required:
- name
- code
UpdateArticleGroupRequest:
type: object
properties:
id:
type: integer
name:
type: string
code:
type: string
sort:
type: integer
status:
type: integer
enum: [0, 1]
required:
- id
ArticleNavArticle:
type: object
properties:
id:
type: integer
title:
type: string
updated_at:
type: string
format: date-time
required:
- id
- title
- updated_at
ArticleNavGroup:
type: object
properties:
id:
type: integer
name:
type: string
code:
type: string
articles:
type: array
items:
$ref: "#/components/schemas/ArticleNavArticle"
required:
- id
- name
- code
- articles
ArticlePublicGroup:
type: object
properties:
id:
type: integer
name:
type: string
code:
type: string
required:
- id
- name
- code
ArticlePublicDetail:
type: object
properties:
id:
type: integer
title:
type: string
content:
type: string
updated_at:
type: string
format: date-time
group:
$ref: "#/components/schemas/ArticlePublicGroup"
required:
- id
- title
- updated_at
- group
AdminNameOnly:
type: object
properties:
name:
type: string
UserSummary:
type: object
properties:
id:
type: integer
phone:
type: string
name:
type: string
required:
- id
- phone
DiscountItem:
allOf:
- $ref: "#/components/schemas/BaseModel"
- type: object
properties:
name:
type: string
discount:
type: integer
required:
- name
- discount
PermissionItem:
allOf:
- $ref: "#/components/schemas/BaseModel"
- type: object
properties:
parent_id:
type: integer
name:
type: string
description:
type: string
sort:
type: integer
required:
- name
- sort
AdminRoleListItem:
allOf:
- $ref: "#/components/schemas/BaseModel"
- type: object
properties:
name:
type: string
description:
type: string
active:
type: boolean
sort:
type: integer
required:
- name
- active
- sort
AdminRolePageItem:
allOf:
- $ref: "#/components/schemas/AdminRoleListItem"
- type: object
properties:
permissions:
type: array
items:
$ref: "#/components/schemas/PermissionItem"
AdminListItem:
allOf:
- $ref: "#/components/schemas/BaseModel"
- type: object
properties:
username:
type: string
name:
type: string
avatar:
type: string
phone:
type: string
email:
type: string
status:
type: integer
last_login:
type: string
format: date-time
last_login_ip:
type: string
last_login_ua:
type: string
lock:
type: boolean
required:
- username
- status
- lock
AdminPageItem:
allOf:
- $ref: "#/components/schemas/AdminListItem"
- type: object
properties:
roles:
type: array
items:
$ref: "#/components/schemas/AdminRoleListItem"
ProxyItem:
allOf:
- $ref: "#/components/schemas/BaseModel"
- type: object
properties:
mac:
type: string
ip:
type: string
host:
type: string
secret:
type: string
type:
type: integer
status:
type: integer
required:
- mac
- ip
- type
- status
ProductAdminItem:
allOf:
- $ref: "#/components/schemas/BaseModel"
- type: object
properties:
code:
type: string
name:
type: string
description:
type: string
sort:
type: integer
status:
type: integer
required:
- code
- name
- sort
- status
ProductSaleSkuItem:
type: object
properties:
id:
type: integer
product_id:
type: integer
name:
type: string
code:
type: string
price:
type: string
count_min:
type: integer
required:
- id
- product_id
- name
- code
- price
- count_min
ProductSaleItem:
type: object
properties:
id:
type: integer
code:
type: string
name:
type: string
description:
type: string
sort:
type: integer
skus:
type: array
items:
$ref: "#/components/schemas/ProductSaleSkuItem"
required:
- id
- code
- name
- sort
- skus
ProductSkuListItem:
allOf:
- $ref: "#/components/schemas/BaseModel"
- type: object
properties:
product_id:
type: integer
discount_id:
type: integer
code:
type: string
name:
type: string
price:
type: string
price_min:
type: string
status:
type: integer
sort:
type: integer
count_min:
type: integer
required:
- product_id
- discount_id
- code
- name
- price
- price_min
- status
- sort
- count_min
ProductSkuPageItem:
allOf:
- $ref: "#/components/schemas/ProductSkuListItem"
- type: object
properties:
product:
$ref: "#/components/schemas/ProductAdminItem"
discount:
$ref: "#/components/schemas/DiscountItem"
CouponItem:
allOf:
- $ref: "#/components/schemas/BaseModel"
- type: object
properties:
name:
type: string
amount:
type: string
min_amount:
type: string
count:
type: integer
status:
type: integer
expire_type:
type: integer
expire_at:
type: string
format: date-time
expire_in:
type: integer
required:
- name
- amount
- min_amount
- count
- status
- expire_type
Whitelist:
allOf:
- $ref: "#/components/schemas/BaseModel"
- type: object
properties:
user_id:
type: integer
ip:
type: string
remark:
type: string
required:
- user_id
- ip
Announcement:
allOf:
- $ref: "#/components/schemas/BaseModel"
- type: object
properties:
title:
type: string
content:
type: string
type:
type: integer
pin:
type: boolean
status:
type: integer
sort:
type: integer
required:
- title
- type
- pin
- status
- sort
ArticleGroupItem:
allOf:
- $ref: "#/components/schemas/BaseModel"
- type: object
properties:
name:
type: string
code:
type: string
sort:
type: integer
status:
type: integer
required:
- name
- code
- sort
- status
ArticlePageItem:
allOf:
- $ref: "#/components/schemas/BaseModel"
- type: object
properties:
group_id:
type: integer
title:
type: string
sort:
type: integer
status:
type: integer
group:
$ref: "#/components/schemas/ArticleGroupItem"
required:
- group_id
- title
- sort
- status
ArticleDetail:
allOf:
- $ref: "#/components/schemas/ArticlePageItem"
- type: object
properties:
content:
type: string
DiscountSummary:
$ref: "#/components/schemas/DiscountItem"
ResourceSummary:
type: object
properties:
resource_no:
type: string
type:
type: integer
BillSummary:
type: object
properties:
id:
type: integer
bill_no:
type: string
TradeSummary:
type: object
properties:
inner_no:
type: string
acquirer:
type: integer
SkuNameOnly:
type: object
properties:
name:
type: string
ResourceBase:
allOf:
- $ref: "#/components/schemas/BaseModel"
- type: object
properties:
user_id:
type: integer
resource_no:
type: string
active:
type: boolean
type:
type: integer
code:
type: string
checkip:
type: boolean
required:
- user_id
- active
- type
- code
- checkip
ResourceShortInfo:
type: object
properties:
id:
type: integer
resource_id:
type: integer
code:
type: string
live:
type: integer
type:
type: integer
quota:
type: integer
expire_at:
type: string
format: date-time
used:
type: integer
daily:
type: integer
last_at:
type: string
format: date-time
required:
- id
- resource_id
- code
- live
- type
- quota
- used
- daily
ResourceLongInfo:
type: object
properties:
id:
type: integer
resource_id:
type: integer
code:
type: string
live:
type: integer
type:
type: integer
quota:
type: integer
expire_at:
type: string
format: date-time
used:
type: integer
daily:
type: integer
last_at:
type: string
format: date-time
required:
- id
- resource_id
- code
- live
- type
- quota
- used
- daily
ResourceShortAdminInfo:
allOf:
- $ref: "#/components/schemas/ResourceShortInfo"
- type: object
properties:
sku:
$ref: "#/components/schemas/SkuNameOnly"
ResourceLongAdminInfo:
allOf:
- $ref: "#/components/schemas/ResourceLongInfo"
- type: object
properties:
sku:
$ref: "#/components/schemas/SkuNameOnly"
ResourceShortListItem:
allOf:
- $ref: "#/components/schemas/ResourceBase"
- type: object
properties:
short:
$ref: "#/components/schemas/ResourceShortInfo"
ResourceLongListItem:
allOf:
- $ref: "#/components/schemas/ResourceBase"
- type: object
properties:
long:
$ref: "#/components/schemas/ResourceLongInfo"
ResourceAllItem:
oneOf:
- $ref: "#/components/schemas/ResourceShortListItem"
- $ref: "#/components/schemas/ResourceLongListItem"
ResourceShortAdminItem:
allOf:
- $ref: "#/components/schemas/ResourceBase"
- type: object
properties:
user:
$ref: "#/components/schemas/UserSummary"
short:
$ref: "#/components/schemas/ResourceShortAdminInfo"
ResourceLongAdminItem:
allOf:
- $ref: "#/components/schemas/ResourceBase"
- type: object
properties:
user:
$ref: "#/components/schemas/UserSummary"
long:
$ref: "#/components/schemas/ResourceLongAdminInfo"
ChannelUserItem:
allOf:
- $ref: "#/components/schemas/BaseModel"
- type: object
properties:
user_id:
type: integer
resource_id:
type: integer
batch_no:
type: string
proxy_id:
type: integer
host:
type: string
port:
type: integer
edge_id:
type: integer
edge_ref:
type: string
filter_isp:
type: string
filter_prov:
type: string
filter_city:
type: string
ip:
type: string
whitelists:
type: string
username:
type: string
password:
type: string
expired_at:
type: string
format: date-time
required:
- user_id
- resource_id
- batch_no
- proxy_id
- host
- port
- expired_at
ChannelAdminItem:
allOf:
- $ref: "#/components/schemas/ChannelUserItem"
- type: object
properties:
user:
$ref: "#/components/schemas/UserSummary"
resource:
$ref: "#/components/schemas/ResourceSummary"
TradeAdminItem:
allOf:
- $ref: "#/components/schemas/BaseModel"
- type: object
properties:
user_id:
type: integer
inner_no:
type: string
outer_no:
type: string
type:
type: integer
subject:
type: string
remark:
type: string
amount:
type: string
payment:
type: string
method:
type: integer
platform:
type: integer
acquirer:
type: integer
status:
type: integer
refunded:
type: boolean
payment_url:
type: string
completed_at:
type: string
format: date-time
canceled_at:
type: string
format: date-time
user:
$ref: "#/components/schemas/UserSummary"
required:
- user_id
- inner_no
- type
- subject
- amount
- payment
- method
- platform
- status
- refunded
BillUserItem:
allOf:
- $ref: "#/components/schemas/BaseModel"
- type: object
properties:
user_id:
type: integer
trade_id:
type: integer
resource_id:
type: integer
refund_id:
type: integer
coupon_user_id:
type: integer
bill_no:
type: string
info:
type: string
type:
type: integer
amount:
type: string
actual:
type: string
trade:
$ref: "#/components/schemas/TradeSummary"
resource:
$ref: "#/components/schemas/ResourceSummary"
required:
- user_id
- bill_no
- type
- amount
- actual
BillAdminItem:
allOf:
- $ref: "#/components/schemas/BillUserItem"
- type: object
properties:
user:
$ref: "#/components/schemas/UserSummary"
BalanceActivityUserItem:
type: object
properties:
id:
type: integer
user_id:
type: integer
bill_id:
type: integer
admin_id:
type: integer
amount:
type: string
balance_prev:
type: string
balance_curr:
type: string
remark:
type: string
created_at:
type: string
format: date-time
bill:
$ref: "#/components/schemas/BillSummary"
required:
- id
- user_id
- amount
- balance_prev
- balance_curr
- created_at
BalanceActivityAdminItem:
allOf:
- $ref: "#/components/schemas/BalanceActivityUserItem"
- type: object
properties:
user:
$ref: "#/components/schemas/UserSummary"
admin:
$ref: "#/components/schemas/AdminNameOnly"
BatchBaseItem:
type: object
properties:
id:
type: integer
user_id:
type: integer
resource_id:
type: integer
batch_no:
type: string
count:
type: integer
prov:
type: string
city:
type: string
isp:
type: string
ip:
type: string
time:
type: string
format: date-time
required:
- id
- user_id
- resource_id
- batch_no
- count
- ip
- time
BatchUserItem:
allOf:
- $ref: "#/components/schemas/BatchBaseItem"
- type: object
properties:
resource:
$ref: "#/components/schemas/ResourceSummary"
BatchAdminItem:
allOf:
- $ref: "#/components/schemas/BatchBaseItem"
- type: object
properties:
user:
$ref: "#/components/schemas/UserSummary"
resource:
$ref: "#/components/schemas/ResourceSummary"
CouponUserUserItem:
type: object
properties:
id:
type: integer
coupon_id:
type: integer
user_id:
type: integer
status:
type: integer
expire_at:
type: string
format: date-time
used_at:
type: string
format: date-time
created_at:
type: string
format: date-time
coupon:
$ref: "#/components/schemas/CouponItem"
required:
- id
- coupon_id
- user_id
- status
- created_at
CouponUserAdminItem:
allOf:
- $ref: "#/components/schemas/CouponUserUserItem"
- type: object
properties:
user:
$ref: "#/components/schemas/UserSummary"
AdminUserPageItem:
type: object
properties:
id:
type: integer
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
admin_id:
type: integer
discount_id:
type: integer
phone:
type: string
username:
type: string
email:
type: string
source:
type: integer
name:
type: string
avatar:
type: string
status:
type: integer
balance:
type: string
id_type:
type: integer
id_no:
type: string
description: 脱敏后的证件号
id_token:
type: string
contact_qq:
type: string
contact_wechat:
type: string
last_login:
type: string
format: date-time
last_login_ip:
type: string
last_login_ua:
type: string
admin:
$ref: "#/components/schemas/AdminNameOnly"
discount:
$ref: "#/components/schemas/DiscountSummary"
required:
- id
- created_at
- updated_at
- phone
- status
- balance
- id_type
AdminUserNotBindPageItem:
type: object
properties:
id:
type: integer
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
admin_id:
type: integer
discount_id:
type: integer
phone:
type: string
username:
type: string
email:
type: string
source:
type: integer
name:
type: string
avatar:
type: string
status:
type: integer
balance:
type: string
id_type:
type: integer
id_token:
type: string
contact_qq:
type: string
contact_wechat:
type: string
last_login:
type: string
format: date-time
last_login_ip:
type: string
last_login_ua:
type: string
required:
- id
- created_at
- updated_at
- phone
- status
- balance
- id_type
AdminUserDetail:
type: object
properties:
id:
type: integer
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
admin_id:
type: integer
discount_id:
type: integer
phone:
type: string
username:
type: string
email:
type: string
source:
type: integer
name:
type: string
avatar:
type: string
status:
type: integer
balance:
type: string
id_type:
type: integer
id_no:
type: string
description: 原始证件号
id_token:
type: string
contact_qq:
type: string
contact_wechat:
type: string
last_login:
type: string
format: date-time
last_login_ip:
type: string
last_login_ua:
type: string
admin:
$ref: "#/components/schemas/AdminNameOnly"
discount:
$ref: "#/components/schemas/DiscountSummary"
required:
- id
- created_at
- updated_at
- phone
- status
- balance
- id_type
PageWhitelistResponse:
allOf:
- $ref: "#/components/schemas/PageMeta"
- type: object
properties:
list:
type: array
items:
$ref: "#/components/schemas/Whitelist"
required:
- list
PageResourceShortResponse:
allOf:
- $ref: "#/components/schemas/PageMeta"
- type: object
properties:
list:
type: array
items:
$ref: "#/components/schemas/ResourceShortListItem"
required:
- list
PageResourceLongResponse:
allOf:
- $ref: "#/components/schemas/PageMeta"
- type: object
properties:
list:
type: array
items:
$ref: "#/components/schemas/ResourceLongListItem"
required:
- list
PageBatchUserResponse:
allOf:
- $ref: "#/components/schemas/PageMeta"
- type: object
properties:
list:
type: array
items:
$ref: "#/components/schemas/BatchUserItem"
required:
- list
PageChannelUserResponse:
allOf:
- $ref: "#/components/schemas/PageMeta"
- type: object
properties:
list:
type: array
items:
$ref: "#/components/schemas/ChannelUserItem"
required:
- list
PageBillUserResponse:
allOf:
- $ref: "#/components/schemas/PageMeta"
- type: object
properties:
list:
type: array
items:
$ref: "#/components/schemas/BillUserItem"
required:
- list
PageBalanceActivityUserResponse:
allOf:
- $ref: "#/components/schemas/PageMeta"
- type: object
properties:
list:
type: array
items:
$ref: "#/components/schemas/BalanceActivityUserItem"
required:
- list
PageCouponUserUserResponse:
allOf:
- $ref: "#/components/schemas/PageMeta"
- type: object
properties:
list:
type: array
items:
$ref: "#/components/schemas/CouponUserUserItem"
required:
- list
PageAnnouncementResponse:
allOf:
- $ref: "#/components/schemas/PageMeta"
- type: object
properties:
list:
type: array
items:
$ref: "#/components/schemas/Announcement"
required:
- list
PageAdminResponse:
allOf:
- $ref: "#/components/schemas/PageMeta"
- type: object
properties:
list:
type: array
items:
$ref: "#/components/schemas/AdminPageItem"
required:
- list
PageAdminRoleResponse:
allOf:
- $ref: "#/components/schemas/PageMeta"
- type: object
properties:
list:
type: array
items:
$ref: "#/components/schemas/AdminRolePageItem"
required:
- list
PagePermissionResponse:
allOf:
- $ref: "#/components/schemas/PageMeta"
- type: object
properties:
list:
type: array
items:
$ref: "#/components/schemas/PermissionItem"
required:
- list
PageAdminUserResponse:
allOf:
- $ref: "#/components/schemas/PageMeta"
- type: object
properties:
list:
type: array
items:
$ref: "#/components/schemas/AdminUserPageItem"
required:
- list
PageAdminUserNotBindResponse:
allOf:
- $ref: "#/components/schemas/PageMeta"
- type: object
properties:
list:
type: array
items:
$ref: "#/components/schemas/AdminUserNotBindPageItem"
required:
- list
PageResourceShortAdminResponse:
allOf:
- $ref: "#/components/schemas/PageMeta"
- type: object
properties:
list:
type: array
items:
$ref: "#/components/schemas/ResourceShortAdminItem"
required:
- list
PageResourceLongAdminResponse:
allOf:
- $ref: "#/components/schemas/PageMeta"
- type: object
properties:
list:
type: array
items:
$ref: "#/components/schemas/ResourceLongAdminItem"
required:
- list
PageBatchAdminResponse:
allOf:
- $ref: "#/components/schemas/PageMeta"
- type: object
properties:
list:
type: array
items:
$ref: "#/components/schemas/BatchAdminItem"
required:
- list
PageChannelAdminResponse:
allOf:
- $ref: "#/components/schemas/PageMeta"
- type: object
properties:
list:
type: array
items:
$ref: "#/components/schemas/ChannelAdminItem"
required:
- list
PageProxyResponse:
allOf:
- $ref: "#/components/schemas/PageMeta"
- type: object
properties:
list:
type: array
items:
$ref: "#/components/schemas/ProxyItem"
required:
- list
PageTradeAdminResponse:
allOf:
- $ref: "#/components/schemas/PageMeta"
- type: object
properties:
list:
type: array
items:
$ref: "#/components/schemas/TradeAdminItem"
required:
- list
PageBillAdminResponse:
allOf:
- $ref: "#/components/schemas/PageMeta"
- type: object
properties:
list:
type: array
items:
$ref: "#/components/schemas/BillAdminItem"
required:
- list
PageBalanceActivityAdminResponse:
allOf:
- $ref: "#/components/schemas/PageMeta"
- type: object
properties:
list:
type: array
items:
$ref: "#/components/schemas/BalanceActivityAdminItem"
required:
- list
PageProductSkuAdminResponse:
allOf:
- $ref: "#/components/schemas/PageMeta"
- type: object
properties:
list:
type: array
items:
$ref: "#/components/schemas/ProductSkuPageItem"
required:
- list
PageDiscountResponse:
allOf:
- $ref: "#/components/schemas/PageMeta"
- type: object
properties:
list:
type: array
items:
$ref: "#/components/schemas/DiscountItem"
required:
- list
PageCouponResponse:
allOf:
- $ref: "#/components/schemas/PageMeta"
- type: object
properties:
list:
type: array
items:
$ref: "#/components/schemas/CouponItem"
required:
- list
PageCouponUserAdminResponse:
allOf:
- $ref: "#/components/schemas/PageMeta"
- type: object
properties:
list:
type: array
items:
$ref: "#/components/schemas/CouponUserAdminItem"
required:
- list
PageArticleResponse:
allOf:
- $ref: "#/components/schemas/PageMeta"
- type: object
properties:
list:
type: array
items:
$ref: "#/components/schemas/ArticlePageItem"
required:
- list
PageArticleGroupResponse:
allOf:
- $ref: "#/components/schemas/PageMeta"
- type: object
properties:
list:
type: array
items:
$ref: "#/components/schemas/ArticleGroupItem"
required:
- list
paths:
/api/auth/authorize:
get:
tags: [public/auth]
summary: 授权确认页占位接口
description: 当前实现只校验参数与客户端,不返回确认页面内容。
parameters:
- name: response_type
in: query
required: true
schema:
type: string
enum: [code]
- name: client_id
in: query
required: true
schema:
type: string
- name: redirect_uri
in: query
required: true
schema:
type: string
- name: scope
in: query
schema:
type: string
- name: state
in: query
schema:
type: string
responses:
"200":
description: 当前实现无响应体
default:
$ref: "#/components/responses/PlainTextError"
post:
tags: [public/auth]
summary: 提交授权确认占位接口
description: 当前实现为占位逻辑。
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/AuthorizePostRequest"
responses:
"200":
description: 当前实现无响应体
default:
$ref: "#/components/responses/PlainTextError"
/api/auth/token:
post:
tags: [public/auth]
summary: 获取访问令牌
description: 支持 `authorization_code`、`client_credentials`、`refresh_token`、`password` 四种授权方式。
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/TokenRequest"
application/x-www-form-urlencoded:
schema:
$ref: "#/components/schemas/TokenRequest"
responses:
"200":
description: 获取成功
content:
application/json:
schema:
$ref: "#/components/schemas/TokenResponse"
"400":
$ref: "#/components/responses/OAuthError"
"401":
$ref: "#/components/responses/OAuthError"
default:
$ref: "#/components/responses/PlainTextError"
/api/auth/revoke:
post:
tags: [public/auth]
summary: 撤销令牌
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/RevokeRequest"
responses:
"200":
description: 成功,无响应体
default:
$ref: "#/components/responses/PlainTextError"
/api/auth/introspect:
post:
tags: [public/auth]
summary: 获取当前登录态信息
security:
- bearerAuth: []
responses:
"200":
description: 返回当前用户或管理员资料
content:
application/json:
schema:
oneOf:
- $ref: "#/components/schemas/IntrospectUserResponse"
- $ref: "#/components/schemas/IntrospectAdminResponse"
default:
$ref: "#/components/responses/PlainTextError"
/api/resource/price:
post:
tags: [public/resource]
summary: 计算套餐价格
description: 可匿名调用;如果携带用户 Bearer Token则价格计算会带入用户折扣/优惠券上下文。
security:
- {}
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/CreateResourceData"
responses:
"200":
description: 价格明细
content:
application/json:
schema:
$ref: "#/components/schemas/ResourcePriceResponse"
default:
$ref: "#/components/responses/PlainTextError"
/api/trade/check:
get:
tags: [public/trade]
summary: SSE 检查订单状态
parameters:
- name: trade_no
in: query
required: true
schema:
type: string
- name: method
in: query
required: true
schema:
type: integer
enum: [1, 2, 3, 4, 5]
responses:
"200":
description: SSE 状态流
content:
text/event-stream:
schema:
type: string
example: |
data: 0
default:
$ref: "#/components/responses/PlainTextError"
/api/inquiry/create:
post:
tags: [public/inquiry]
summary: 提交咨询
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/CreateInquiryRequest"
responses:
"204":
$ref: "#/components/responses/NoContent"
default:
$ref: "#/components/responses/PlainTextError"
/api/product/list:
post:
tags: [public/product]
summary: 获取在售产品列表
responses:
"200":
description: 产品与在售 SKU 列表
content:
application/json:
schema:
type: array
items:
$ref: "#/components/schemas/ProductSaleItem"
default:
$ref: "#/components/responses/PlainTextError"
/api/verify/sms:
post:
tags: [client/verify]
summary: 发送短信验证码
description: 仅官方客户端可调用,可使用客户端 Basic 鉴权或客户端 Bearer 鉴权。
security:
- basicAuth: []
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/VerifierRequest"
responses:
"200":
description: 成功,无响应体
"429":
$ref: "#/components/responses/PlainTextError"
default:
$ref: "#/components/responses/PlainTextError"
/api/proxy/online:
post:
tags: [client/proxy]
summary: 代理上线报告
description: 当前实现固定返回“接口暂不可用”。
security:
- basicAuth: []
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/ProxyReportOnlineRequest"
responses:
"200":
description: 当前实现返回不可用提示
content:
application/json:
schema:
$ref: "#/components/schemas/ProxyUnavailableResponse"
/api/proxy/offline:
post:
tags: [client/proxy]
summary: 代理下线报告
description: 当前实现固定返回“接口暂不可用”。
security:
- basicAuth: []
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/ProxyReportOfflineRequest"
responses:
"200":
description: 当前实现返回不可用提示
content:
application/json:
schema:
$ref: "#/components/schemas/ProxyUnavailableResponse"
/api/proxy/update:
post:
tags: [client/proxy]
summary: 代理状态更新
description: 当前实现固定返回“接口暂不可用”。
security:
- basicAuth: []
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/ProxyReportUpdateRequest"
responses:
"200":
description: 当前实现返回不可用提示
content:
application/json:
schema:
$ref: "#/components/schemas/ProxyUnavailableResponse"
/api/channel/remove:
post:
tags: [client/channel]
summary: 删除通道批次
description: 仅官方客户端可调用。
security:
- basicAuth: []
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/RemoveChannelsRequest"
responses:
"200":
description: 成功,无响应体
default:
$ref: "#/components/responses/PlainTextError"
/api/article/nav:
post:
tags: [client/article]
summary: 获取文档导航
description: 仅官方客户端可调用。
security:
- basicAuth: []
- bearerAuth: []
responses:
"200":
description: 文档导航树
content:
application/json:
schema:
type: array
items:
$ref: "#/components/schemas/ArticleNavGroup"
default:
$ref: "#/components/responses/PlainTextError"
/api/article/get:
post:
tags: [client/article]
summary: 获取文档详情
description: 仅官方客户端可调用。
security:
- basicAuth: []
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/IdRequest"
responses:
"200":
description: 文档详情
content:
application/json:
schema:
$ref: "#/components/schemas/ArticlePublicDetail"
default:
$ref: "#/components/responses/PlainTextError"
/api/user/update:
post:
tags: [user/user]
summary: 更新用户资料
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/UpdateUserRequest"
responses:
"204":
$ref: "#/components/responses/NoContent"
default:
$ref: "#/components/responses/PlainTextError"
/api/user/update/account:
post:
tags: [user/user]
summary: 更新用户名或密码
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/UpdateAccountRequest"
responses:
"204":
$ref: "#/components/responses/NoContent"
default:
$ref: "#/components/responses/PlainTextError"
/api/user/update/password:
post:
tags: [user/user]
summary: 通过短信验证码修改密码
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/UpdatePasswordRequest"
responses:
"204":
$ref: "#/components/responses/NoContent"
default:
$ref: "#/components/responses/PlainTextError"
/api/user/identify:
post:
tags: [user/user]
summary: 发起实名认证
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/IdentifyRequest"
responses:
"200":
description: 返回认证跳转目标或已认证状态
content:
application/json:
schema:
$ref: "#/components/schemas/IdentifyResponse"
default:
$ref: "#/components/responses/PlainTextError"
/api/whitelist/list:
post:
tags: [user/whitelist]
summary: 获取当前用户白名单
security:
- bearerAuth: []
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/ListWhitelistRequest"
responses:
"200":
description: 分页结果
content:
application/json:
schema:
$ref: "#/components/schemas/PageWhitelistResponse"
default:
$ref: "#/components/responses/PlainTextError"
/api/whitelist/create:
post:
tags: [user/whitelist]
summary: 新建白名单
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/CreateWhitelistRequest"
responses:
"200":
description: 成功,无响应体
default:
$ref: "#/components/responses/PlainTextError"
/api/whitelist/update:
post:
tags: [user/whitelist]
summary: 更新白名单
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/UpdateWhitelistRequest"
responses:
"200":
description: 成功,无响应体
default:
$ref: "#/components/responses/PlainTextError"
/api/whitelist/remove:
post:
tags: [user/whitelist]
summary: 批量删除白名单
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
type: array
items:
$ref: "#/components/schemas/RemoveWhitelistItem"
responses:
"200":
description: 成功,无响应体
default:
$ref: "#/components/responses/PlainTextError"
/api/resource/all:
post:
tags: [user/resource]
summary: 获取当前用户全部可用套餐
security:
- bearerAuth: []
responses:
"200":
description: 套餐列表
content:
application/json:
schema:
type: array
items:
$ref: "#/components/schemas/ResourceAllItem"
default:
$ref: "#/components/responses/PlainTextError"
/api/resource/list/short:
post:
tags: [user/resource]
summary: 分页查询当前用户短效套餐
security:
- bearerAuth: []
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/PageResourceShortRequest"
responses:
"200":
description: 分页结果
content:
application/json:
schema:
$ref: "#/components/schemas/PageResourceShortResponse"
default:
$ref: "#/components/responses/PlainTextError"
/api/resource/list/long:
post:
tags: [user/resource]
summary: 分页查询当前用户长效套餐
security:
- bearerAuth: []
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/PageResourceLongRequest"
responses:
"200":
description: 分页结果
content:
application/json:
schema:
$ref: "#/components/schemas/PageResourceLongResponse"
default:
$ref: "#/components/responses/PlainTextError"
/api/resource/create:
post:
tags: [user/resource]
summary: 使用余额购买套餐
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/CreateResourceData"
responses:
"200":
description: 成功,无响应体
default:
$ref: "#/components/responses/PlainTextError"
/api/resource/update/checkip:
post:
tags: [user/resource]
summary: 修改套餐 IP 校验开关
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/UpdateResourceCheckIpRequest"
responses:
"200":
description: 成功,无响应体
default:
$ref: "#/components/responses/PlainTextError"
/api/resource/statistics/free:
post:
tags: [user/resource]
summary: 统计当前用户每日可用额度
security:
- bearerAuth: []
responses:
"200":
description: 可用额度统计
content:
application/json:
schema:
$ref: "#/components/schemas/StatisticPersonalResponse"
default:
$ref: "#/components/responses/PlainTextError"
/api/resource/statistics/usage:
post:
tags: [user/resource]
summary: 统计当前用户使用量
security:
- bearerAuth: []
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/StatisticResourceUsageRequest"
responses:
"200":
description: 按天聚合的用量
content:
application/json:
schema:
type: array
items:
$ref: "#/components/schemas/StatisticResourceUsageItem"
default:
$ref: "#/components/responses/PlainTextError"
/api/batch/page:
post:
tags: [user/batch]
summary: 分页查询当前用户提取记录
security:
- bearerAuth: []
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/PageBatchRequest"
responses:
"200":
description: 分页结果
content:
application/json:
schema:
$ref: "#/components/schemas/PageBatchUserResponse"
default:
$ref: "#/components/responses/PlainTextError"
/api/channel/list:
post:
tags: [user/channel]
summary: 分页查询当前用户通道
security:
- bearerAuth: []
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/ListChannelsRequest"
responses:
"200":
description: 分页结果
content:
application/json:
schema:
$ref: "#/components/schemas/PageChannelUserResponse"
default:
$ref: "#/components/responses/PlainTextError"
/api/channel/create:
post:
tags: [user/channel]
summary: 创建通道
description: 当前实现不要求登录,但会校验套餐、实名认证和白名单条件。
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/CreateChannelRequest"
responses:
"200":
description: 通道列表
content:
application/json:
schema:
type: array
items:
$ref: "#/components/schemas/CreateChannelResponseItem"
default:
$ref: "#/components/responses/PlainTextError"
/api/channel/create/v2:
post:
tags: [user/channel]
summary: 创建通道 v2
description: 使用 `resource_no` 替代 `resource_id`。
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/CreateChannelRequestV2"
responses:
"200":
description: 通道列表
content:
application/json:
schema:
type: array
items:
$ref: "#/components/schemas/CreateChannelResponseItem"
default:
$ref: "#/components/responses/PlainTextError"
/api/trade/create:
post:
tags: [user/trade]
summary: 创建订单
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/TradeCreateRequest"
responses:
"200":
description: 支付跳转结果
content:
application/json:
schema:
$ref: "#/components/schemas/CreateTradeResult"
default:
$ref: "#/components/responses/PlainTextError"
/api/trade/complete:
post:
tags: [user/trade]
summary: 完成订单
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/TradeRef"
responses:
"204":
$ref: "#/components/responses/NoContent"
default:
$ref: "#/components/responses/PlainTextError"
/api/trade/cancel:
post:
tags: [user/trade]
summary: 取消订单
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/TradeRef"
responses:
"204":
$ref: "#/components/responses/NoContent"
default:
$ref: "#/components/responses/PlainTextError"
/api/bill/list:
post:
tags: [user/bill]
summary: 分页查询当前用户账单
security:
- bearerAuth: []
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/ListBillRequest"
responses:
"200":
description: 分页结果
content:
application/json:
schema:
$ref: "#/components/schemas/PageBillUserResponse"
default:
$ref: "#/components/responses/PlainTextError"
/api/balance/page:
post:
tags: [user/balance]
summary: 分页查询当前用户余额变动
security:
- bearerAuth: []
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/PageBalanceActivityByUserRequest"
responses:
"200":
description: 分页结果
content:
application/json:
schema:
$ref: "#/components/schemas/PageBalanceActivityUserResponse"
default:
$ref: "#/components/responses/PlainTextError"
/api/coupon-user/page:
post:
tags: [user/coupon-user]
summary: 分页查询当前用户已发放优惠券
security:
- bearerAuth: []
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/PageCouponUserRequest"
responses:
"200":
description: 分页结果
content:
application/json:
schema:
$ref: "#/components/schemas/PageCouponUserUserResponse"
default:
$ref: "#/components/responses/PlainTextError"
/api/coupon-user/get:
post:
tags: [user/coupon-user]
summary: 获取当前用户优惠券详情
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/IdRequest"
responses:
"200":
description: 优惠券详情
content:
application/json:
schema:
$ref: "#/components/schemas/CouponUserUserItem"
default:
$ref: "#/components/responses/PlainTextError"
/api/announcement/list:
post:
tags: [user/announcement]
summary: 分页查询公告
security:
- bearerAuth: []
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/ListAnnouncementsRequest"
responses:
"200":
description: 分页结果
content:
application/json:
schema:
$ref: "#/components/schemas/PageAnnouncementResponse"
default:
$ref: "#/components/responses/PlainTextError"
/api/verify/sms/password:
post:
tags: [user/verify]
summary: 发送修改密码短信验证码
security:
- bearerAuth: []
responses:
"200":
description: 成功,无响应体
"429":
$ref: "#/components/responses/PlainTextError"
default:
$ref: "#/components/responses/PlainTextError"
/api/admin/admin/all:
post:
tags: [admin/admin]
summary: 获取管理员列表
security:
- bearerAuth: []
responses:
"200":
description: 管理员数组
content:
application/json:
schema:
type: array
items:
$ref: "#/components/schemas/AdminListItem"
default:
$ref: "#/components/responses/PlainTextError"
/api/admin/admin/page:
post:
tags: [admin/admin]
summary: 分页获取管理员
security:
- bearerAuth: []
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/PageRequest"
responses:
"200":
description: 分页结果
content:
application/json:
schema:
$ref: "#/components/schemas/PageAdminResponse"
default:
$ref: "#/components/responses/PlainTextError"
/api/admin/admin/create:
post:
tags: [admin/admin]
summary: 创建管理员
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/CreateAdminRequest"
responses:
"200":
description: 成功,无响应体
default:
$ref: "#/components/responses/PlainTextError"
/api/admin/admin/update:
post:
tags: [admin/admin]
summary: 更新管理员
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/UpdateAdminRequest"
responses:
"200":
description: 成功,无响应体
default:
$ref: "#/components/responses/PlainTextError"
/api/admin/admin/remove:
post:
tags: [admin/admin]
summary: 删除管理员
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/IdRequest"
responses:
"200":
description: 成功,无响应体
default:
$ref: "#/components/responses/PlainTextError"
/api/admin/admin-role/list:
post:
tags: [admin/admin-role]
summary: 获取管理员角色列表
security:
- bearerAuth: []
responses:
"200":
description: 角色数组
content:
application/json:
schema:
type: array
items:
$ref: "#/components/schemas/AdminRoleListItem"
default:
$ref: "#/components/responses/PlainTextError"
/api/admin/admin-role/page:
post:
tags: [admin/admin-role]
summary: 分页获取管理员角色
security:
- bearerAuth: []
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/PageRequest"
responses:
"200":
description: 分页结果
content:
application/json:
schema:
$ref: "#/components/schemas/PageAdminRoleResponse"
default:
$ref: "#/components/responses/PlainTextError"
/api/admin/admin-role/create:
post:
tags: [admin/admin-role]
summary: 创建管理员角色
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/CreateAdminRoleRequest"
responses:
"200":
description: 成功,无响应体
default:
$ref: "#/components/responses/PlainTextError"
/api/admin/admin-role/update:
post:
tags: [admin/admin-role]
summary: 更新管理员角色
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/UpdateAdminRoleRequest"
responses:
"200":
description: 成功,无响应体
default:
$ref: "#/components/responses/PlainTextError"
/api/admin/admin-role/remove:
post:
tags: [admin/admin-role]
summary: 删除管理员角色
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/IdRequest"
responses:
"200":
description: 成功,无响应体
default:
$ref: "#/components/responses/PlainTextError"
/api/admin/permission/list:
post:
tags: [admin/permission]
summary: 获取权限列表
security:
- bearerAuth: []
responses:
"200":
description: 权限数组
content:
application/json:
schema:
type: array
items:
$ref: "#/components/schemas/PermissionItem"
default:
$ref: "#/components/responses/PlainTextError"
/api/admin/permission/page:
post:
tags: [admin/permission]
summary: 分页获取权限
security:
- bearerAuth: []
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/PageRequest"
responses:
"200":
description: 分页结果
content:
application/json:
schema:
$ref: "#/components/schemas/PagePermissionResponse"
default:
$ref: "#/components/responses/PlainTextError"
/api/admin/user/page:
post:
tags: [admin/user]
summary: 分页获取用户
security:
- bearerAuth: []
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/PageUserByAdminRequest"
responses:
"200":
description: 分页结果
content:
application/json:
schema:
$ref: "#/components/schemas/PageAdminUserResponse"
default:
$ref: "#/components/responses/PlainTextError"
/api/admin/user/page/not-bind:
post:
tags: [admin/user]
summary: 分页获取未绑定管理员的用户
security:
- bearerAuth: []
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/PageUserNotBindByAdminRequest"
responses:
"200":
description: 分页结果
content:
application/json:
schema:
$ref: "#/components/schemas/PageAdminUserNotBindResponse"
default:
$ref: "#/components/responses/PlainTextError"
/api/admin/user/get:
post:
tags: [admin/user]
summary: 获取单个用户
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/GetUserByAdminRequest"
responses:
"200":
description: 用户详情
content:
application/json:
schema:
$ref: "#/components/schemas/AdminUserDetail"
default:
$ref: "#/components/responses/PlainTextError"
/api/admin/user/create:
post:
tags: [admin/user]
summary: 创建用户
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/CreateUserByAdminRequest"
responses:
"200":
description: 成功,无响应体
default:
$ref: "#/components/responses/PlainTextError"
/api/admin/user/update:
post:
tags: [admin/user]
summary: 更新用户
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/UpdateUserByAdminRequest"
responses:
"200":
description: 成功,无响应体
default:
$ref: "#/components/responses/PlainTextError"
/api/admin/user/remove:
post:
tags: [admin/user]
summary: 删除用户
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/IdRequest"
responses:
"200":
description: 成功,无响应体
default:
$ref: "#/components/responses/PlainTextError"
/api/admin/user/update/bind:
post:
tags: [admin/user]
summary: 认领用户
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/BindAdminRequest"
responses:
"204":
$ref: "#/components/responses/NoContent"
default:
$ref: "#/components/responses/PlainTextError"
/api/admin/user/update/balance:
post:
tags: [admin/user]
summary: 直接设置用户余额
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/UpdateUserBalanceRequest"
responses:
"200":
description: 成功,无响应体
default:
$ref: "#/components/responses/PlainTextError"
/api/admin/user/update/balance-inc:
post:
tags: [admin/user]
summary: 增加用户余额
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/UpdateUserBalanceChangeRequest"
responses:
"200":
description: 成功,无响应体
default:
$ref: "#/components/responses/PlainTextError"
/api/admin/user/update/balance-dec:
post:
tags: [admin/user]
summary: 减少用户余额
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/UpdateUserBalanceChangeRequest"
responses:
"200":
description: 成功,无响应体
default:
$ref: "#/components/responses/PlainTextError"
/api/admin/resource/short/page:
post:
tags: [admin/resource]
summary: 分页查询全部短效套餐
security:
- bearerAuth: []
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/PageResourceShortByAdminRequest"
responses:
"200":
description: 分页结果
content:
application/json:
schema:
$ref: "#/components/schemas/PageResourceShortAdminResponse"
default:
$ref: "#/components/responses/PlainTextError"
/api/admin/resource/short/page/of-user:
post:
tags: [admin/resource]
summary: 分页查询指定用户短效套餐
security:
- bearerAuth: []
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/PageResourceShortOfUserByAdminRequest"
responses:
"200":
description: 分页结果
content:
application/json:
schema:
$ref: "#/components/schemas/PageResourceShortAdminResponse"
default:
$ref: "#/components/responses/PlainTextError"
/api/admin/resource/long/page:
post:
tags: [admin/resource]
summary: 分页查询全部长效套餐
security:
- bearerAuth: []
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/PageResourceLongByAdminRequest"
responses:
"200":
description: 分页结果
content:
application/json:
schema:
$ref: "#/components/schemas/PageResourceLongAdminResponse"
default:
$ref: "#/components/responses/PlainTextError"
/api/admin/resource/long/page/of-user:
post:
tags: [admin/resource]
summary: 分页查询指定用户长效套餐
security:
- bearerAuth: []
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/PageResourceLongOfUserByAdminRequest"
responses:
"200":
description: 分页结果
content:
application/json:
schema:
$ref: "#/components/schemas/PageResourceLongAdminResponse"
default:
$ref: "#/components/responses/PlainTextError"
/api/admin/resource/update:
post:
tags: [admin/resource]
summary: 更新套餐状态
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/UpdateResourceByAdminRequest"
responses:
"200":
description: 成功,无响应体
default:
$ref: "#/components/responses/PlainTextError"
/api/admin/batch/page:
post:
tags: [admin/batch]
summary: 分页查询全部提取记录
security:
- bearerAuth: []
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/PageBatchByAdminRequest"
responses:
"200":
description: 分页结果
content:
application/json:
schema:
$ref: "#/components/schemas/PageBatchAdminResponse"
default:
$ref: "#/components/responses/PlainTextError"
/api/admin/batch/page/of-user:
post:
tags: [admin/batch]
summary: 分页查询指定用户提取记录
security:
- bearerAuth: []
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/PageBatchOfUserByAdminRequest"
responses:
"200":
description: 分页结果
content:
application/json:
schema:
$ref: "#/components/schemas/PageBatchAdminResponse"
default:
$ref: "#/components/responses/PlainTextError"
/api/admin/channel/page:
post:
tags: [admin/channel]
summary: 分页查询全部通道
security:
- bearerAuth: []
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/PageChannelsByAdminRequest"
responses:
"200":
description: 分页结果
content:
application/json:
schema:
$ref: "#/components/schemas/PageChannelAdminResponse"
default:
$ref: "#/components/responses/PlainTextError"
/api/admin/channel/page/of-user:
post:
tags: [admin/channel]
summary: 分页查询指定用户通道
security:
- bearerAuth: []
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/PageChannelOfUserByAdminRequest"
responses:
"200":
description: 分页结果
content:
application/json:
schema:
$ref: "#/components/schemas/PageChannelAdminResponse"
default:
$ref: "#/components/responses/PlainTextError"
/api/admin/channel/sync/clear-expired:
post:
tags: [admin/channel]
summary: 清理指定代理的过期通道
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/SyncChannelClearExpiredRequest"
responses:
"200":
description: 清理结果
content:
application/json:
schema:
$ref: "#/components/schemas/SyncChannelClearExpiredResponse"
default:
$ref: "#/components/responses/PlainTextError"
/api/admin/proxy/all:
post:
tags: [admin/proxy]
summary: 获取代理列表
security:
- bearerAuth: []
responses:
"200":
description: 代理数组
content:
application/json:
schema:
type: array
items:
$ref: "#/components/schemas/ProxyItem"
default:
$ref: "#/components/responses/PlainTextError"
/api/admin/proxy/page:
post:
tags: [admin/proxy]
summary: 分页获取代理
security:
- bearerAuth: []
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/PageRequest"
responses:
"200":
description: 分页结果
content:
application/json:
schema:
$ref: "#/components/schemas/PageProxyResponse"
default:
$ref: "#/components/responses/PlainTextError"
/api/admin/proxy/create:
post:
tags: [admin/proxy]
summary: 创建代理
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/CreateProxyRequest"
responses:
"200":
description: 成功,无响应体
default:
$ref: "#/components/responses/PlainTextError"
/api/admin/proxy/update:
post:
tags: [admin/proxy]
summary: 更新代理
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/UpdateProxyRequest"
responses:
"200":
description: 成功,无响应体
default:
$ref: "#/components/responses/PlainTextError"
/api/admin/proxy/update/status:
post:
tags: [admin/proxy]
summary: 更新代理在线状态
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/UpdateProxyStatusRequest"
responses:
"200":
description: 成功,无响应体
default:
$ref: "#/components/responses/PlainTextError"
/api/admin/proxy/remove:
post:
tags: [admin/proxy]
summary: 删除代理
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/IdRequest"
responses:
"200":
description: 成功,无响应体
default:
$ref: "#/components/responses/PlainTextError"
/api/admin/trade/page:
post:
tags: [admin/trade]
summary: 分页查询全部订单
security:
- bearerAuth: []
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/PageTradeByAdminRequest"
responses:
"200":
description: 分页结果
content:
application/json:
schema:
$ref: "#/components/schemas/PageTradeAdminResponse"
default:
$ref: "#/components/responses/PlainTextError"
/api/admin/trade/page/of-user:
post:
tags: [admin/trade]
summary: 分页查询指定用户订单
security:
- bearerAuth: []
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/PageTradeOfUserByAdminRequest"
responses:
"200":
description: 分页结果
content:
application/json:
schema:
$ref: "#/components/schemas/PageTradeAdminResponse"
default:
$ref: "#/components/responses/PlainTextError"
/api/admin/trade/complete:
post:
tags: [admin/trade]
summary: 管理员完成订单
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/TradeCompleteByAdminRequest"
responses:
"204":
$ref: "#/components/responses/NoContent"
default:
$ref: "#/components/responses/PlainTextError"
/api/admin/bill/page:
post:
tags: [admin/bill]
summary: 分页查询全部账单
security:
- bearerAuth: []
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/PageBillByAdminRequest"
responses:
"200":
description: 分页结果
content:
application/json:
schema:
$ref: "#/components/schemas/PageBillAdminResponse"
default:
$ref: "#/components/responses/PlainTextError"
/api/admin/bill/page/of-user:
post:
tags: [admin/bill]
summary: 分页查询指定用户账单
security:
- bearerAuth: []
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/PageBillOfUserByAdminRequest"
responses:
"200":
description: 分页结果
content:
application/json:
schema:
$ref: "#/components/schemas/PageBillAdminResponse"
default:
$ref: "#/components/responses/PlainTextError"
/api/admin/balance-activity/page:
post:
tags: [admin/balance-activity]
summary: 分页查询全部余额变动
security:
- bearerAuth: []
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/PageBalanceActivityByAdminRequest"
responses:
"200":
description: 分页结果
content:
application/json:
schema:
$ref: "#/components/schemas/PageBalanceActivityAdminResponse"
default:
$ref: "#/components/responses/PlainTextError"
/api/admin/balance-activity/page/of-user:
post:
tags: [admin/balance-activity]
summary: 分页查询指定用户余额变动
security:
- bearerAuth: []
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/PageBalanceActivityOfUserByAdminRequest"
responses:
"200":
description: 分页结果
content:
application/json:
schema:
$ref: "#/components/schemas/PageBalanceActivityAdminResponse"
default:
$ref: "#/components/responses/PlainTextError"
/api/admin/product/all:
post:
tags: [admin/product]
summary: 获取全部产品
security:
- bearerAuth: []
responses:
"200":
description: 产品数组
content:
application/json:
schema:
type: array
items:
$ref: "#/components/schemas/ProductAdminItem"
default:
$ref: "#/components/responses/PlainTextError"
2025-05-10 12:48:43 +08:00
2026-06-01 17:58:55 +08:00
/api/admin/product/create:
post:
tags: [admin/product]
summary: 创建产品
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/CreateProductRequest"
responses:
"200":
description: 成功,无响应体
default:
$ref: "#/components/responses/PlainTextError"
2025-05-10 12:48:43 +08:00
2026-06-01 17:58:55 +08:00
/api/admin/product/update:
2025-05-10 12:48:43 +08:00
post:
2026-06-01 17:58:55 +08:00
tags: [admin/product]
summary: 更新产品
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/UpdateProductRequest"
responses:
"200":
description: 成功,无响应体
default:
$ref: "#/components/responses/PlainTextError"
2025-05-10 12:48:43 +08:00
2026-06-01 17:58:55 +08:00
/api/admin/product/remove:
2025-05-10 12:48:43 +08:00
post:
2026-06-01 17:58:55 +08:00
tags: [admin/product]
summary: 删除产品
security:
- bearerAuth: []
2025-05-10 12:48:43 +08:00
requestBody:
required: true
content:
application/json:
schema:
2026-06-01 17:58:55 +08:00
$ref: "#/components/schemas/IdRequest"
responses:
"200":
description: 成功,无响应体
default:
$ref: "#/components/responses/PlainTextError"
/api/admin/product/sku/all:
post:
tags: [admin/product]
summary: 获取产品 SKU 列表
security:
- bearerAuth: []
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/AllProductSkuByAdminRequest"
2025-05-10 12:48:43 +08:00
responses:
2026-06-01 17:58:55 +08:00
"200":
description: SKU 数组
2025-05-10 12:48:43 +08:00
content:
2026-06-01 17:58:55 +08:00
application/json:
schema:
type: array
items:
$ref: "#/components/schemas/ProductSkuListItem"
default:
$ref: "#/components/responses/PlainTextError"
2025-05-10 12:48:43 +08:00
2026-06-01 17:58:55 +08:00
/api/admin/product/sku/page:
2025-05-10 12:48:43 +08:00
post:
2026-06-01 17:58:55 +08:00
tags: [admin/product]
summary: 分页获取产品 SKU
security:
- bearerAuth: []
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/PageProductSkuByAdminRequest"
2025-05-10 12:48:43 +08:00
responses:
2026-06-01 17:58:55 +08:00
"200":
description: 分页结果
2025-05-10 12:48:43 +08:00
content:
application/json:
schema:
2026-06-01 17:58:55 +08:00
$ref: "#/components/schemas/PageProductSkuAdminResponse"
default:
$ref: "#/components/responses/PlainTextError"
2025-05-10 12:48:43 +08:00
2026-06-01 17:58:55 +08:00
/api/admin/product/sku/create:
2025-05-10 12:48:43 +08:00
post:
2026-06-01 17:58:55 +08:00
tags: [admin/product]
summary: 创建产品 SKU
security:
- bearerAuth: []
2025-05-10 12:48:43 +08:00
requestBody:
required: true
content:
application/json:
schema:
2026-06-01 17:58:55 +08:00
$ref: "#/components/schemas/CreateProductSkuRequest"
2025-05-10 12:48:43 +08:00
responses:
2026-06-01 17:58:55 +08:00
"200":
description: 成功,无响应体
default:
$ref: "#/components/responses/PlainTextError"
2025-05-10 12:48:43 +08:00
2026-06-01 17:58:55 +08:00
/api/admin/product/sku/update:
2025-05-10 12:48:43 +08:00
post:
2026-06-01 17:58:55 +08:00
tags: [admin/product]
summary: 更新产品 SKU
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/UpdateProductSkuRequest"
responses:
"200":
description: 成功,无响应体
default:
$ref: "#/components/responses/PlainTextError"
2025-05-10 12:48:43 +08:00
2026-06-01 17:58:55 +08:00
/api/admin/product/sku/update/status:
2025-05-10 12:48:43 +08:00
post:
2026-06-01 17:58:55 +08:00
tags: [admin/product]
summary: 更新产品 SKU 状态
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/UpdateProductSkuStatusRequest"
responses:
"200":
description: 成功,无响应体
default:
$ref: "#/components/responses/PlainTextError"
2025-05-10 12:48:43 +08:00
2026-06-01 17:58:55 +08:00
/api/admin/product/sku/remove:
2025-05-10 12:48:43 +08:00
post:
2026-06-01 17:58:55 +08:00
tags: [admin/product]
summary: 删除产品 SKU
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/IdRequest"
responses:
"200":
description: 成功,无响应体
default:
$ref: "#/components/responses/PlainTextError"
2025-05-10 12:48:43 +08:00
2026-06-01 17:58:55 +08:00
/api/admin/product/sku/update/discount/batch:
post:
tags: [admin/product]
summary: 批量更新产品 SKU 折扣
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/BatchUpdateSkuDiscountRequest"
responses:
"200":
description: 成功,无响应体
default:
$ref: "#/components/responses/PlainTextError"
/api/admin/discount/all:
2025-05-10 12:48:43 +08:00
post:
2026-06-01 17:58:55 +08:00
tags: [admin/discount]
summary: 获取折扣列表
security:
- bearerAuth: []
responses:
"200":
description: 折扣数组
content:
application/json:
schema:
type: array
items:
$ref: "#/components/schemas/DiscountItem"
default:
$ref: "#/components/responses/PlainTextError"
2025-05-10 12:48:43 +08:00
2026-06-01 17:58:55 +08:00
/api/admin/discount/page:
2025-05-10 12:48:43 +08:00
post:
2026-06-01 17:58:55 +08:00
tags: [admin/discount]
summary: 分页获取折扣
security:
- bearerAuth: []
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/PageRequest"
responses:
"200":
description: 分页结果
content:
application/json:
schema:
$ref: "#/components/schemas/PageDiscountResponse"
default:
$ref: "#/components/responses/PlainTextError"
2025-05-10 12:48:43 +08:00
2026-06-01 17:58:55 +08:00
/api/admin/discount/create:
2025-05-10 12:48:43 +08:00
post:
2026-06-01 17:58:55 +08:00
tags: [admin/discount]
summary: 创建折扣
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/CreateDiscountRequest"
responses:
"200":
description: 成功,无响应体
default:
$ref: "#/components/responses/PlainTextError"
2025-05-10 12:48:43 +08:00
2026-06-01 17:58:55 +08:00
/api/admin/discount/update:
2025-05-10 12:48:43 +08:00
post:
2026-06-01 17:58:55 +08:00
tags: [admin/discount]
summary: 更新折扣
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/UpdateDiscountRequest"
responses:
"200":
description: 成功,无响应体
default:
$ref: "#/components/responses/PlainTextError"
2025-05-10 12:48:43 +08:00
2026-06-01 17:58:55 +08:00
/api/admin/discount/remove:
2025-05-10 12:48:43 +08:00
post:
2026-06-01 17:58:55 +08:00
tags: [admin/discount]
summary: 删除折扣
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/IdRequest"
responses:
"200":
description: 成功,无响应体
default:
$ref: "#/components/responses/PlainTextError"
2025-05-10 12:48:43 +08:00
2026-06-01 17:58:55 +08:00
/api/admin/coupon/all:
2025-05-10 12:48:43 +08:00
post:
2026-06-01 17:58:55 +08:00
tags: [admin/coupon]
summary: 获取优惠券列表
security:
- bearerAuth: []
responses:
"200":
description: 优惠券数组
content:
application/json:
schema:
type: array
items:
$ref: "#/components/schemas/CouponItem"
default:
$ref: "#/components/responses/PlainTextError"
2025-05-10 12:48:43 +08:00
2026-06-01 17:58:55 +08:00
/api/admin/coupon/page:
2025-05-10 12:48:43 +08:00
post:
2026-06-01 17:58:55 +08:00
tags: [admin/coupon]
summary: 分页获取优惠券
security:
- bearerAuth: []
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/PageRequest"
responses:
"200":
description: 分页结果
content:
application/json:
schema:
$ref: "#/components/schemas/PageCouponResponse"
default:
$ref: "#/components/responses/PlainTextError"
2025-05-10 12:48:43 +08:00
2026-06-01 17:58:55 +08:00
/api/admin/coupon/create:
2025-05-10 12:48:43 +08:00
post:
2026-06-01 17:58:55 +08:00
tags: [admin/coupon]
summary: 创建优惠券
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/CreateCouponRequest"
responses:
"200":
description: 成功,无响应体
default:
$ref: "#/components/responses/PlainTextError"
2025-05-10 12:48:43 +08:00
2026-06-01 17:58:55 +08:00
/api/admin/coupon/update:
2025-05-10 12:48:43 +08:00
post:
2026-06-01 17:58:55 +08:00
tags: [admin/coupon]
summary: 更新优惠券
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/UpdateCouponRequest"
responses:
"200":
description: 成功,无响应体
default:
$ref: "#/components/responses/PlainTextError"
2025-05-10 12:48:43 +08:00
2026-06-01 17:58:55 +08:00
/api/admin/coupon/remove:
2025-05-10 12:48:43 +08:00
post:
2026-06-01 17:58:55 +08:00
tags: [admin/coupon]
summary: 删除优惠券
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/IdRequest"
responses:
"200":
description: 成功,无响应体
default:
$ref: "#/components/responses/PlainTextError"
/api/admin/coupon/update/assign:
2025-05-10 12:48:43 +08:00
post:
2026-06-01 17:58:55 +08:00
tags: [admin/coupon]
summary: 发放优惠券给用户
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/AssignCouponRequest"
responses:
"200":
description: 成功,无响应体
default:
$ref: "#/components/responses/PlainTextError"
2025-05-10 12:48:43 +08:00
2026-06-01 17:58:55 +08:00
/api/admin/coupon-user/page:
2025-05-10 12:48:43 +08:00
post:
2026-06-01 17:58:55 +08:00
tags: [admin/coupon-user]
summary: 分页查询全部已发放优惠券
security:
- bearerAuth: []
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/PageCouponUserByAdminRequest"
responses:
"200":
description: 分页结果
content:
application/json:
schema:
$ref: "#/components/schemas/PageCouponUserAdminResponse"
default:
$ref: "#/components/responses/PlainTextError"
2025-05-10 12:48:43 +08:00
2026-06-01 17:58:55 +08:00
/api/admin/coupon-user/page/of-user:
post:
tags: [admin/coupon-user]
summary: 分页查询指定用户已发放优惠券
security:
- bearerAuth: []
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/PageCouponUserOfUserByAdminRequest"
responses:
"200":
description: 分页结果
content:
application/json:
schema:
$ref: "#/components/schemas/PageCouponUserAdminResponse"
default:
$ref: "#/components/responses/PlainTextError"
/api/admin/coupon-user/get:
2025-05-10 12:48:43 +08:00
post:
2026-06-01 17:58:55 +08:00
tags: [admin/coupon-user]
summary: 获取已发放优惠券详情
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/IdRequest"
responses:
"200":
description: 详情对象
content:
application/json:
schema:
$ref: "#/components/schemas/CouponUserAdminItem"
default:
$ref: "#/components/responses/PlainTextError"
2025-05-10 12:48:43 +08:00
2026-06-01 17:58:55 +08:00
/api/admin/coupon-user/create:
2025-05-10 12:48:43 +08:00
post:
2026-06-01 17:58:55 +08:00
tags: [admin/coupon-user]
summary: 手动创建已发放优惠券
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/CreateCouponUserRequest"
responses:
"200":
description: 成功,无响应体
default:
$ref: "#/components/responses/PlainTextError"
2025-05-10 12:48:43 +08:00
2026-06-01 17:58:55 +08:00
/api/admin/coupon-user/update:
2025-05-10 12:48:43 +08:00
post:
2026-06-01 17:58:55 +08:00
tags: [admin/coupon-user]
summary: 更新已发放优惠券
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/UpdateCouponUserRequest"
responses:
"200":
description: 成功,无响应体
default:
$ref: "#/components/responses/PlainTextError"
2025-05-10 12:48:43 +08:00
2026-06-01 17:58:55 +08:00
/api/admin/coupon-user/remove:
2025-05-10 12:48:43 +08:00
post:
2026-06-01 17:58:55 +08:00
tags: [admin/coupon-user]
summary: 删除已发放优惠券
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/IdRequest"
responses:
"200":
description: 成功,无响应体
default:
$ref: "#/components/responses/PlainTextError"
2025-05-10 12:48:43 +08:00
2026-06-01 17:58:55 +08:00
/api/admin/article/page:
post:
tags: [admin/article]
summary: 分页查询文章
security:
- bearerAuth: []
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/PageArticleRequest"
responses:
"200":
description: 分页结果
content:
application/json:
schema:
$ref: "#/components/schemas/PageArticleResponse"
default:
$ref: "#/components/responses/PlainTextError"
2025-05-10 12:48:43 +08:00
2026-06-01 17:58:55 +08:00
/api/admin/article/get:
2025-05-10 12:48:43 +08:00
post:
2026-06-01 17:58:55 +08:00
tags: [admin/article]
summary: 获取文章详情
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/IdRequest"
responses:
"200":
description: 文章详情
content:
application/json:
schema:
$ref: "#/components/schemas/ArticleDetail"
default:
$ref: "#/components/responses/PlainTextError"
2025-05-10 12:48:43 +08:00
2026-06-01 17:58:55 +08:00
/api/admin/article/create:
2025-05-10 12:48:43 +08:00
post:
2026-06-01 17:58:55 +08:00
tags: [admin/article]
summary: 创建文章
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/CreateArticleRequest"
responses:
"200":
description: 成功,无响应体
default:
$ref: "#/components/responses/PlainTextError"
2025-05-10 12:48:43 +08:00
2026-06-01 17:58:55 +08:00
/api/admin/article/update:
2025-05-10 12:48:43 +08:00
post:
2026-06-01 17:58:55 +08:00
tags: [admin/article]
summary: 更新文章
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/UpdateArticleRequest"
responses:
"200":
description: 成功,无响应体
default:
$ref: "#/components/responses/PlainTextError"
2025-05-10 12:48:43 +08:00
2026-06-01 17:58:55 +08:00
/api/admin/article/remove:
2025-05-10 12:48:43 +08:00
post:
2026-06-01 17:58:55 +08:00
tags: [admin/article]
summary: 删除文章
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/IdRequest"
responses:
"200":
description: 成功,无响应体
default:
2026-06-06 17:22:01 +08:00
$ref: "#/components/responses/PlainTextError"
/api/admin/article/upload:
post:
tags: [admin/article]
summary: 上传文章图片
security:
- bearerAuth: []
requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
properties:
file:
type: string
format: binary
required:
- file
responses:
"200":
description: 上传结果
content:
application/json:
schema:
$ref: "#/components/schemas/ArticleUploadResponse"
default:
2026-06-01 17:58:55 +08:00
$ref: "#/components/responses/PlainTextError"
2025-05-10 12:48:43 +08:00
2026-06-01 17:58:55 +08:00
/api/admin/article-group/page:
2025-05-10 12:48:43 +08:00
post:
2026-06-01 17:58:55 +08:00
tags: [admin/article-group]
summary: 分页查询文章分组
security:
- bearerAuth: []
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/PageArticleGroupRequest"
responses:
"200":
description: 分页结果
content:
application/json:
schema:
$ref: "#/components/schemas/PageArticleGroupResponse"
default:
$ref: "#/components/responses/PlainTextError"
2025-05-10 12:48:43 +08:00
2026-06-01 17:58:55 +08:00
/api/admin/article-group/list:
2025-05-10 12:48:43 +08:00
post:
2026-06-01 17:58:55 +08:00
tags: [admin/article-group]
summary: 获取文章分组列表
security:
- bearerAuth: []
responses:
"200":
description: 分组数组
content:
application/json:
schema:
type: array
items:
$ref: "#/components/schemas/ArticleGroupItem"
default:
$ref: "#/components/responses/PlainTextError"
2025-05-10 12:48:43 +08:00
2026-06-01 17:58:55 +08:00
/api/admin/article-group/create:
2025-05-10 12:48:43 +08:00
post:
2026-06-01 17:58:55 +08:00
tags: [admin/article-group]
summary: 创建文章分组
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/CreateArticleGroupRequest"
responses:
"200":
description: 成功,无响应体
default:
$ref: "#/components/responses/PlainTextError"
2025-05-10 12:48:43 +08:00
2026-06-01 17:58:55 +08:00
/api/admin/article-group/update:
post:
2026-06-01 17:58:55 +08:00
tags: [admin/article-group]
summary: 更新文章分组
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
2026-06-01 17:58:55 +08:00
$ref: "#/components/schemas/UpdateArticleGroupRequest"
responses:
"200":
description: 成功,无响应体
default:
$ref: "#/components/responses/PlainTextError"
2026-06-01 17:58:55 +08:00
/api/admin/article-group/remove:
post:
tags: [admin/article-group]
summary: 删除文章分组
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/IdRequest"
responses:
"200":
description: 成功,无响应体
default:
$ref: "#/components/responses/PlainTextError"
2025-05-10 12:48:43 +08:00
2026-06-01 17:58:55 +08:00
/callback/identify:
get:
tags: [callback/identify]
summary: 实名认证回调
parameters:
- name: id
in: query
required: true
schema:
type: string
- name: success
in: query
required: true
schema:
type: boolean
responses:
"200":
description: 返回 HTML 结果页
content:
text/html:
schema:
type: string