From 1d9a8cb26aec632ab07ce702f038d08b1df844cf Mon Sep 17 00:00:00 2001 From: wangjia <809946525@qq.com> Date: Sat, 11 Jul 2026 07:35:01 +0800 Subject: [PATCH] =?UTF-8?q?feat(dev):=20fake=20=E6=B8=A0=E9=81=93=E6=8C=89?= =?UTF-8?q?=20metadata.render=20=E5=87=BA=20redirect/qr/crypto=5Faddress?= =?UTF-8?q?=20=E4=B8=89=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 联调 pangolin /buy 页付款类型选择器:Create 读 req.Metadata["render"] 分支返回三种渲染形态的 payload,method 仍是 fake,不新增渠道名, provider_ref 生成/VerifyCallback/结算逻辑不变。 --- internal/provider/fake/fake.go | 46 ++++++++++++++++++++++++++-------- 1 file changed, 36 insertions(+), 10 deletions(-) diff --git a/internal/provider/fake/fake.go b/internal/provider/fake/fake.go index 05dc37e..da03694 100644 --- a/internal/provider/fake/fake.go +++ b/internal/provider/fake/fake.go @@ -67,16 +67,42 @@ func (p *Provider) Create(_ context.Context, req provider.CreateRequest) (*provi p.mu.Unlock() exp := time.Now().Add(15 * time.Minute) ref := "FAKE-" + req.OutTradeNo + "-" + strconv.FormatInt(time.Now().UnixNano(), 36) - return &provider.Session{ - ProviderRef: ref, - RenderType: provider.RenderCryptoAddress, - Payload: map[string]any{ - "address": "TFake" + req.Account.AccountID + req.OutTradeNo, - "amount_minor": req.AmountMinor, - "currency": req.Currency, - }, - ExpiresAt: &exp, - }, nil + + // render 由 metadata["render"] 驱动(pangolin /buy 联调门控,见 CLAUDE.md 交代); + // 只影响这里的展示形态,不影响 provider_ref 生成/VerifyCallback/结算。 + switch req.Metadata["render"] { + case string(provider.RenderRedirect): + return &provider.Session{ + ProviderRef: ref, + RenderType: provider.RenderRedirect, + Payload: map[string]any{ + "url": "http://localhost:8090/result?out_trade_no=" + req.OutTradeNo, + }, + ExpiresAt: &exp, + }, nil + case string(provider.RenderQR): + return &provider.Session{ + ProviderRef: ref, + RenderType: provider.RenderQR, + Payload: map[string]any{ + "qr_content": "weixin://wxpay/mock/" + req.OutTradeNo, + "display_amount": strconv.FormatInt(req.AmountMinor, 10), + "currency": req.Currency, + }, + ExpiresAt: &exp, + }, nil + default: + return &provider.Session{ + ProviderRef: ref, + RenderType: provider.RenderCryptoAddress, + Payload: map[string]any{ + "address": "TFake" + req.Account.AccountID + req.OutTradeNo, + "amount_minor": req.AmountMinor, + "currency": req.Currency, + }, + ExpiresAt: &exp, + }, nil + } } // VerifyCallback 解析测试注入的 JSON 回调体成归一化 PaidEvent。