Files
qitongxue-api/api/user/v1/member.go
2026-09-17 17:38:45 +08:00

108 lines
4.2 KiB
Go
Raw Permalink 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.
package v1
import "github.com/gogf/gf/v2/frame/g"
// ============================================================================
// 会员购买(微信小程序虚拟支付 · 道具直购)
// ============================================================================
// MemberPlanOut 可购买的会员套餐
type MemberPlanOut struct {
PlanKey string `json:"plan_key"`
Name string `json:"name"`
Subtitle string `json:"subtitle"`
LevelKey string `json:"level_key"`
DurationDays int `json:"duration_days"`
PriceCents int64 `json:"price_cents"` // 单位:分
ProductId string `json:"product_id"`
Badge string `json:"badge"`
}
// MemberLevelOut 等级权益(用于前端渲染权益对比)
type MemberLevelOut struct {
LevelKey string `json:"level_key"`
Name string `json:"name"`
Modules []string `json:"modules"`
ModuleNames []string `json:"module_names"`
IsCurrent bool `json:"is_current"`
}
// MemberStateOut 我的会员状态
type MemberStateOut struct {
IsMember bool `json:"is_member"`
LevelKey string `json:"level_key"`
LevelName string `json:"level_name"`
ExpireAt string `json:"expire_at"` // 空串表示永久或未开通
DaysLeft int `json:"days_left"`
Modules []string `json:"modules"`
}
// MemberCenterReq 会员中心
type MemberCenterReq struct {
g.Meta `path:"/member/center" method:"get" tags:"member" summary:"会员中心(套餐 + 会员状态 + 权益)"`
}
type MemberCenterRes struct {
Plans []MemberPlanOut `json:"plans"`
Levels []MemberLevelOut `json:"levels"`
State MemberStateOut `json:"state"`
Notices []string `json:"notices"`
XpayReady bool `json:"xpay_ready"` // 服务端虚拟支付参数是否已配置
Quotas []QuotaToolOut `json:"quotas"` // 各工具额度(会员权益页据此展示提升幅度)
Packs []QuotaPackOut `json:"packs"` // 次数包通用档位
PeriodDays int `json:"period_days"` // 当前生效的额度重置周期
}
// MemberOrderCreateReq 创建会员订单
//
// Code 为 wx.login 获取的临时登录凭证 —— 服务端用它换 session_key,
// session_key 是「用户态签名 signature」的密钥;同时校验支付人与登录人一致。
type MemberOrderCreateReq struct {
g.Meta `path:"/member/order" method:"post" tags:"member" summary:"创建会员订单(返回支付参数)"`
PlanKey string `v:"required#请选择会员套餐" json:"plan_key"`
Code string `json:"code"`
}
type MemberOrderCreateRes struct {
OutTradeNo string `json:"out_trade_no"`
Mode string `json:"mode"` // 固定 short_series_goods
SignData string `json:"signData"` // JSON 字符串,必须原样传给 wx.requestVirtualPayment
PaySig string `json:"paySig"`
Signature string `json:"signature"`
Env int `json:"env"`
}
// MemberOrderCheckReq 查询订单状态(前端支付成功回调后轮询;同时承担兜底发货)
type MemberOrderCheckReq struct {
g.Meta `path:"/member/order/check" method:"post" tags:"member" summary:"查询会员订单状态"`
OutTradeNo string `v:"required#订单号不能为空" json:"out_trade_no"`
}
type MemberOrderCheckRes struct {
Status int `json:"status"`
Delivered bool `json:"delivered"`
State MemberStateOut `json:"state"`
}
// MemberOrdersReq 我的会员订单
type MemberOrdersReq struct {
g.Meta `path:"/member/orders" method:"get" tags:"member" summary:"我的会员订单"`
Limit int `json:"limit"`
}
type MemberOrderOut struct {
OutTradeNo string `json:"out_trade_no"`
OrderType int `json:"order_type"` // 1=会员套餐 2=次数包
PlanKey string `json:"plan_key"`
PlanName string `json:"plan_name"`
Title string `json:"title"` // 统一展示标题(套餐名 / 次数包名)
ToolKey string `json:"tool_key"`
ToolName string `json:"tool_name"`
Times int `json:"times"`
PriceCents int64 `json:"price_cents"`
Status int `json:"status"`
StatusText string `json:"status_text"`
PayChannel string `json:"pay_channel"`
CreatedAt string `json:"created_at"`
DeliveredAt string `json:"delivered_at"`
}
type MemberOrdersRes struct {
List []MemberOrderOut `json:"list"`
}