Files
platform/docs/api.yaml
2026-06-01 18:37:13 +08:00

5894 lines
140 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
openapi: 3.1.0
info:
title: 蓝狐后端接口
version: 2026-06-01
description: |
基于 `web/routes.go`、当前 handler 和 service 实现整理。
约定说明:
- 正式文档仅覆盖 `/api/*` 与 `/callback/*` 路由
- `/debug/*` 为开发调试接口,不纳入正式对外规范
- 除 `/api/auth/token` 外,错误响应默认由全局错误处理中间件以 `text/plain` 返回
- 分页请求统一使用 `page` / `size`,默认页码 `1`,默认大小 `10`,最大 `100`
servers:
- 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: 实名认证回调接口
components:
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: 成功,无响应体
schemas:
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
PageRequest:
type: object
properties:
page:
type: integer
minimum: 1
default: 1
size:
type: integer
minimum: 1
maximum: 100
default: 10
PageMeta:
type: object
properties:
total:
type: integer
page:
type: integer
size:
type: integer
required:
- total
- page
- size
IdRequest:
type: object
properties:
id:
type: integer
required:
- id
AuthorizePostRequest:
type: object
properties:
accept:
type: boolean
scope:
type: string
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
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
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"
/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"
/api/admin/product/update:
post:
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"
/api/admin/product/remove:
post:
tags: [admin/product]
summary: 删除产品
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$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"
responses:
"200":
description: SKU 数组
content:
application/json:
schema:
type: array
items:
$ref: "#/components/schemas/ProductSkuListItem"
default:
$ref: "#/components/responses/PlainTextError"
/api/admin/product/sku/page:
post:
tags: [admin/product]
summary: 分页获取产品 SKU
security:
- bearerAuth: []
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/PageProductSkuByAdminRequest"
responses:
"200":
description: 分页结果
content:
application/json:
schema:
$ref: "#/components/schemas/PageProductSkuAdminResponse"
default:
$ref: "#/components/responses/PlainTextError"
/api/admin/product/sku/create:
post:
tags: [admin/product]
summary: 创建产品 SKU
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/CreateProductSkuRequest"
responses:
"200":
description: 成功,无响应体
default:
$ref: "#/components/responses/PlainTextError"
/api/admin/product/sku/update:
post:
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"
/api/admin/product/sku/update/status:
post:
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"
/api/admin/product/sku/remove:
post:
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"
/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:
post:
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"
/api/admin/discount/page:
post:
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"
/api/admin/discount/create:
post:
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"
/api/admin/discount/update:
post:
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"
/api/admin/discount/remove:
post:
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"
/api/admin/coupon/all:
post:
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"
/api/admin/coupon/page:
post:
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"
/api/admin/coupon/create:
post:
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"
/api/admin/coupon/update:
post:
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"
/api/admin/coupon/remove:
post:
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:
post:
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"
/api/admin/coupon-user/page:
post:
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"
/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:
post:
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"
/api/admin/coupon-user/create:
post:
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"
/api/admin/coupon-user/update:
post:
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"
/api/admin/coupon-user/remove:
post:
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"
/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"
/api/admin/article/get:
post:
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"
/api/admin/article/create:
post:
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"
/api/admin/article/update:
post:
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"
/api/admin/article/remove:
post:
tags: [admin/article]
summary: 删除文章
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/IdRequest"
responses:
"200":
description: 成功,无响应体
default:
$ref: "#/components/responses/PlainTextError"
/api/admin/article-group/page:
post:
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"
/api/admin/article-group/list:
post:
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"
/api/admin/article-group/create:
post:
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"
/api/admin/article-group/update:
post:
tags: [admin/article-group]
summary: 更新文章分组
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/UpdateArticleGroupRequest"
responses:
"200":
description: 成功,无响应体
default:
$ref: "#/components/responses/PlainTextError"
/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"
/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