95 lines
4.5 KiB
Go
95 lines
4.5 KiB
Go
package v1
|
||
|
||
import "github.com/gogf/gf/v2/frame/g"
|
||
|
||
// ============================================================================
|
||
// 用户端 · 会员 / 次数包订单(N1 两步式:建单 / 建签名 / 详情 / 应用优惠)
|
||
//
|
||
// 铁律 S1:响应一律 snake_case。请求沿用 member / quota 组既有字段名(snake_case)。
|
||
//
|
||
// 正当例外(非豁免):微信虚拟支付规定字段 signData / paySig / signature / env 由客户端
|
||
// 原样交给 wx.requestVirtualPayment,**必须原样透传、禁止改名**(改名会导致收银台直接失败)。
|
||
// 此类「外部平台规定」的命名不受 S1 约束(见 MemberOrderPayRes)。
|
||
// ============================================================================
|
||
|
||
// MemberOrderPayReq 对已建订单构建支付参数(O2)
|
||
type MemberOrderPayReq struct {
|
||
g.Meta `path:"/member/order/pay" method:"post" tags:"member" summary:"对已建订单构建支付参数"`
|
||
OutTradeNo string `v:"required#订单号不能为空" json:"out_trade_no"`
|
||
Code string `v:"required#缺少微信登录凭证" json:"code"`
|
||
}
|
||
|
||
// MemberOrderPayRes 虚拟支付参数(O2 / O6)。
|
||
//
|
||
// ⚠️ SignData / PaySig / Signature / Env 的字段名由微信 wx.requestVirtualPayment 规定,
|
||
// 必须原样透传、禁止改动(改名会导致收银台直接失败)。
|
||
type MemberOrderPayRes struct {
|
||
OutTradeNo string `json:"out_trade_no"`
|
||
Mode string `json:"mode"` // 固定 short_series_goods
|
||
SignData string `json:"signData"`
|
||
PaySig string `json:"paySig"`
|
||
Signature string `json:"signature"`
|
||
Env int `json:"env"`
|
||
}
|
||
|
||
// QuotaOrderPayReq 次数包订单构建支付参数(O6,与会员完全同构)
|
||
type QuotaOrderPayReq struct {
|
||
g.Meta `path:"/quota/order/pay" method:"post" tags:"quota" summary:"次数包订单构建支付参数"`
|
||
OutTradeNo string `v:"required#订单号不能为空" json:"out_trade_no"`
|
||
Code string `v:"required#缺少微信登录凭证" json:"code"`
|
||
}
|
||
|
||
// QuotaOrderPayRes 次数包支付参数(与会员完全同构)
|
||
type QuotaOrderPayRes = MemberOrderPayRes
|
||
|
||
// MemberOrderDetailReq 订单详情(O3)
|
||
type MemberOrderDetailReq struct {
|
||
g.Meta `path:"/member/order/detail" method:"get" tags:"member" summary:"订单详情"`
|
||
OutTradeNo string `v:"required#订单号不能为空" json:"out_trade_no"`
|
||
}
|
||
|
||
// MemberOrderDetailRes 订单详情(O3,响应 snake_case)。
|
||
type MemberOrderDetailRes struct {
|
||
OutTradeNo string `json:"out_trade_no"`
|
||
OrderType int `json:"order_type"` // 1 套餐 2 次数包
|
||
Title string `json:"title"` // 套餐名 / 次数包名
|
||
PlanKey string `json:"plan_key"`
|
||
PlanName string `json:"plan_name"`
|
||
PackKey string `json:"pack_key"` // 次数包 key(order_type=2 时用于查询可选免单券)
|
||
ToolKey string `json:"tool_key"`
|
||
ToolName string `json:"tool_name"`
|
||
Times int `json:"times"`
|
||
OriginPriceCents int64 `json:"origin_price_cents"`
|
||
PaidPriceCents int64 `json:"paid_price_cents"`
|
||
DiscountCents int64 `json:"discount_cents"`
|
||
PromoKind int `json:"promo_kind"` // 0 无 1 优惠码 2 免单券
|
||
PromoCode string `json:"promo_code"`
|
||
UserCouponId int64 `json:"user_coupon_id"`
|
||
Status int `json:"status"` // 0 待支付 1 已发货 2 已退款 3 已关闭
|
||
StatusText string `json:"status_text"`
|
||
CreatedAt string `json:"created_at"`
|
||
DeliveredAt string `json:"delivered_at"`
|
||
}
|
||
|
||
// MemberOrderApplyVoucherReq 应用 / 更换 / 清除优惠(O4)。
|
||
//
|
||
// PromoCode 与 UserCouponId **互斥**:同时传 → 4010(后端校验,不靠前端隐藏);两者皆空 = 清除优惠。
|
||
type MemberOrderApplyVoucherReq struct {
|
||
g.Meta `path:"/member/order/apply-voucher" method:"post" tags:"member" summary:"应用/更换/清除优惠"`
|
||
OutTradeNo string `v:"required#订单号不能为空" json:"out_trade_no"`
|
||
PromoCode string `json:"promo_code"`
|
||
UserCouponId int64 `json:"user_coupon_id"`
|
||
}
|
||
|
||
// MemberOrderApplyVoucherRes 应用优惠结果(O4,响应 snake_case)。
|
||
type MemberOrderApplyVoucherRes struct {
|
||
Valid bool `json:"valid"`
|
||
OriginPriceCents int64 `json:"origin_price_cents"`
|
||
PaidPriceCents int64 `json:"paid_price_cents"`
|
||
DiscountCents int64 `json:"discount_cents"`
|
||
PromoKind int `json:"promo_kind"`
|
||
PromoCode string `json:"promo_code"`
|
||
UserCouponId int64 `json:"user_coupon_id"`
|
||
Message string `json:"message"`
|
||
}
|