feat(dev): fake 渠道按 metadata.render 出 redirect/qr/crypto_address 三态

联调 pangolin /buy 页付款类型选择器:Create 读 req.Metadata["render"]
分支返回三种渲染形态的 payload,method 仍是 fake,不新增渠道名,
provider_ref 生成/VerifyCallback/结算逻辑不变。
This commit is contained in:
wangjia
2026-07-11 07:35:01 +08:00
parent 669774d0f7
commit 1d9a8cb26a
+36 -10
View File
@@ -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。