Files
qitongxue-api/internal/controller/member.go
2026-09-29 10:57:01 +08:00

66 lines
2.7 KiB
Go
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.
package controller
import (
"context"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/net/ghttp"
v1 "tool-api/api/user/v1"
"tool-api/internal/logic"
)
// cMember 会员购买相关接口(需用户登录)
type cMember struct{}
var Member = &cMember{}
func (c *cMember) MemberCenter(ctx context.Context, req *v1.MemberCenterReq) (res *v1.MemberCenterRes, err error) {
return logic.MemberCenter(ctx)
}
func (c *cMember) MemberOrderCreate(ctx context.Context, req *v1.MemberOrderCreateReq) (res *v1.MemberOrderCreateRes, err error) {
return logic.MemberOrderCreate(ctx, req.PlanKey)
}
// MemberOrderPay 对已建待支付订单构建支付参数(N1 两步式的第二步)
func (c *cMember) MemberOrderPay(ctx context.Context, req *v1.MemberOrderPayReq) (res *v1.MemberOrderPayRes, err error) {
return logic.MemberOrderPay(ctx, req.OutTradeNo, req.Code)
}
// MemberOrderDetail 订单详情
func (c *cMember) MemberOrderDetail(ctx context.Context, req *v1.MemberOrderDetailReq) (res *v1.MemberOrderDetailRes, err error) {
return logic.MemberOrderDetail(ctx, req.OutTradeNo)
}
// MemberOrderApplyVoucher 应用/更换/清除订单优惠(应用时占用,D3)
func (c *cMember) MemberOrderApplyVoucher(ctx context.Context, req *v1.MemberOrderApplyVoucherReq) (res *v1.MemberOrderApplyVoucherRes, err error) {
return logic.MemberOrderApplyVoucher(ctx, req.OutTradeNo, req.PromoCode, req.UserCouponId)
}
func (c *cMember) MemberOrderCheck(ctx context.Context, req *v1.MemberOrderCheckReq) (res *v1.MemberOrderCheckRes, err error) {
return logic.MemberOrderCheck(ctx, req.OutTradeNo)
}
func (c *cMember) MemberOrders(ctx context.Context, req *v1.MemberOrdersReq) (res *v1.MemberOrdersRes, err error) {
return logic.MemberOrders(ctx, req.Limit)
}
// PayNotify 虚拟支付「发货推送」回调(平台调用,无 token,需在 MP 后台配置该 URL)。
//
// 返回 XML:成功 <ErrCode>0</ErrCode>,失败非 0 触发平台重试(最多 15 次)。
// 这里直接写响应体,Response 中间件检测到已有输出便不再包装成 JSON。
//
// 刻意写成包级函数而不是 cMember 的方法:GoFrame 的 group.Bind 会把控制器上
// 签名为 func(*ghttp.Request) 的方法一并自动注册成路由,那样就会多出一条
// `/pay-notify`(且落在 UserAuth 组里)—— 平台回调不带 token,这条路由纯属多余入口。
func PayNotify(r *ghttp.Request) {
ack, err := logic.PayNotifyHandle(r.Context(), r.GetBody())
if err != nil {
g.Log().Errorf(r.Context(), "[xpay] 发货推送处理异常: %v", err)
ack = logic.XPayNotifyAckFail("internal error")
}
r.Response.Header().Set("Content-Type", "application/xml")
r.Response.Write(ack)
}