51 lines
1.9 KiB
Go
51 lines
1.9 KiB
Go
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:成功 <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)
|
||
}
|