有效天数问题,充值单回调问题
This commit is contained in:
@@ -260,18 +260,25 @@ func (h *PaymentHandler) AlipayCallback(c *fiber.Ctx) error {
|
||||
// FuiouPayCallback 富友支付回调(带签名验证)
|
||||
// POST /api/callback/fuiou-pay
|
||||
func (h *PaymentHandler) FuiouPayCallback(c *fiber.Ctx) error {
|
||||
body := c.Body()
|
||||
if len(body) == 0 {
|
||||
body, bodySource := fuiouCallbackPayload(c)
|
||||
if strings.TrimSpace(string(body)) == "" {
|
||||
return errors.New(errors.CodeFuiouCallbackInvalid, "回调请求体为空")
|
||||
}
|
||||
|
||||
ctx := c.UserContext()
|
||||
c.Set("Content-Type", "text/xml; charset=gbk")
|
||||
c.Set("Content-Type", "text/plain; charset=utf-8")
|
||||
|
||||
// 预解析订单号(不验签),用于按 payment_config_id 加载创建订单时所用的配置
|
||||
preNotify, err := fuiou.ParseNotify(body)
|
||||
if err != nil {
|
||||
h.logger.Error("富友回调:预解析失败", zap.Error(err))
|
||||
h.logger.Error("富友回调:预解析失败",
|
||||
zap.Error(err),
|
||||
zap.String("payload_source", bodySource),
|
||||
zap.Int("raw_body_len", len(c.Body())),
|
||||
zap.Int("payload_len", len(body)),
|
||||
zap.String("content_type", c.Get("Content-Type")),
|
||||
zap.String("query", string(c.Request().URI().QueryString())),
|
||||
)
|
||||
return c.Send(fuiou.BuildNotifyFailResponse("parse failed"))
|
||||
}
|
||||
|
||||
@@ -283,6 +290,21 @@ func (h *PaymentHandler) FuiouPayCallback(c *fiber.Ctx) error {
|
||||
)
|
||||
return c.Send(fuiou.BuildNotifyFailResponse("payment config unavailable"))
|
||||
}
|
||||
if cfg.ProviderType != model.ProviderTypeFuiou ||
|
||||
strings.TrimSpace(preNotify.InsCd) != strings.TrimSpace(cfg.FyInsCd) ||
|
||||
strings.TrimSpace(preNotify.MchntCd) != strings.TrimSpace(cfg.FyMchntCd) {
|
||||
h.logger.Error("富友回调:支付配置与回调商户不匹配",
|
||||
zap.String("order_no", preNotify.MchntOrderNo),
|
||||
zap.Uint("config_id", cfg.ID),
|
||||
zap.String("config_name", cfg.Name),
|
||||
zap.String("callback_ins_cd", preNotify.InsCd),
|
||||
zap.String("config_ins_cd", cfg.FyInsCd),
|
||||
zap.String("callback_mchnt_cd", preNotify.MchntCd),
|
||||
zap.String("config_mchnt_cd", cfg.FyMchntCd),
|
||||
zap.String("provider_type", cfg.ProviderType),
|
||||
)
|
||||
return c.Send(fuiou.BuildNotifyFailResponse("payment config mismatch"))
|
||||
}
|
||||
|
||||
client, err := fuiou.NewClient(
|
||||
cfg.FyInsCd,
|
||||
@@ -307,7 +329,16 @@ func (h *PaymentHandler) FuiouPayCallback(c *fiber.Ctx) error {
|
||||
zap.String("result_msg", notify.ResultMsg))
|
||||
return c.Send(fuiou.BuildNotifySuccessResponse())
|
||||
}
|
||||
h.logger.Error("富友回调:验签或解析失败", zap.Error(err))
|
||||
h.logger.Error("富友回调:验签或解析失败",
|
||||
zap.Error(err),
|
||||
zap.String("order_no", preNotify.MchntOrderNo),
|
||||
zap.Uint("config_id", cfg.ID),
|
||||
zap.String("config_name", cfg.Name),
|
||||
zap.String("callback_ins_cd", preNotify.InsCd),
|
||||
zap.String("config_ins_cd", cfg.FyInsCd),
|
||||
zap.String("callback_mchnt_cd", preNotify.MchntCd),
|
||||
zap.String("config_mchnt_cd", cfg.FyMchntCd),
|
||||
)
|
||||
return c.Send(fuiou.BuildNotifyFailResponse(err.Error()))
|
||||
}
|
||||
|
||||
@@ -345,3 +376,14 @@ func (h *PaymentHandler) FuiouPayCallback(c *fiber.Ctx) error {
|
||||
|
||||
return c.Send(fuiou.BuildNotifySuccessResponse())
|
||||
}
|
||||
|
||||
// fuiouCallbackPayload 提取富友回调载荷,兼容 body、form req 和 query req 三种来源。
|
||||
func fuiouCallbackPayload(c *fiber.Ctx) ([]byte, string) {
|
||||
if req := strings.TrimSpace(c.FormValue("req")); req != "" {
|
||||
return []byte(req), "form:req"
|
||||
}
|
||||
if req := strings.TrimSpace(c.Query("req")); req != "" {
|
||||
return []byte(req), "query:req"
|
||||
}
|
||||
return c.Body(), "body"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user