From e1060f1f6e2568c9ebd87f1c6c911c7cbc96377e Mon Sep 17 00:00:00 2001 From: wangjia <809946525@qq.com> Date: Sat, 11 Jul 2026 16:00:05 +0800 Subject: [PATCH] =?UTF-8?q?fix(nezha):=20return=5Furl=20=E4=B8=BA=E7=A9=BA?= =?UTF-8?q?=E6=97=B6=E5=85=9C=E5=BA=95=E4=B8=BA=20notify=5Furl=20=E7=9A=84?= =?UTF-8?q?=20origin(=E5=93=AA=E5=90=92=E5=BF=85=E5=A1=AB)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 哪吒 pay/create 要求 return_url 必填;业务方未显式传时下单被拒(缺少参数 return_url)。 兜底用 notify_url 的 origin(pay 对外基址)保证合法非空。 --- internal/provider/nezha/nezha.go | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/internal/provider/nezha/nezha.go b/internal/provider/nezha/nezha.go index 4844a51..4becc3a 100644 --- a/internal/provider/nezha/nezha.go +++ b/internal/provider/nezha/nezha.go @@ -108,12 +108,21 @@ func (p *Provider) Create(ctx context.Context, req provider.CreateRequest) (*pro payType = "alipay" // 未指定聚合渠道类型时的默认值(alipay 是最常见通道) } + // 哪吒协议要求 return_url 必填(支付后浏览器跳回地址);业务方(pangolin)未显式传时, + // 兜底用 notify_url 的 origin(即 pay 对外基址,如 https://pay.yanmeiai.com),保证合法非空。 + returnURL := req.ReturnURL + if returnURL == "" { + if u, e := url.Parse(p.notifyURL); e == nil && u.Host != "" { + returnURL = u.Scheme + "://" + u.Host + } + } + params := map[string]string{ "pid": p.pid, "type": payType, "out_trade_no": req.OutTradeNo, "notify_url": p.notifyURL, - "return_url": req.ReturnURL, + "return_url": returnURL, "name": req.Subject, "money": amount, "timestamp": strconv.FormatInt(time.Now().Unix(), 10),