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, req.Code) } 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:成功 0,失败非 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) }