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
+26
View File
@@ -67,6 +67,31 @@ func (p *Provider) Create(_ context.Context, req provider.CreateRequest) (*provi
p.mu.Unlock() p.mu.Unlock()
exp := time.Now().Add(15 * time.Minute) exp := time.Now().Add(15 * time.Minute)
ref := "FAKE-" + req.OutTradeNo + "-" + strconv.FormatInt(time.Now().UnixNano(), 36) ref := "FAKE-" + req.OutTradeNo + "-" + strconv.FormatInt(time.Now().UnixNano(), 36)
// 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{ return &provider.Session{
ProviderRef: ref, ProviderRef: ref,
RenderType: provider.RenderCryptoAddress, RenderType: provider.RenderCryptoAddress,
@@ -78,6 +103,7 @@ func (p *Provider) Create(_ context.Context, req provider.CreateRequest) (*provi
ExpiresAt: &exp, ExpiresAt: &exp,
}, nil }, nil
} }
}
// VerifyCallback 解析测试注入的 JSON 回调体成归一化 PaidEvent。 // VerifyCallback 解析测试注入的 JSON 回调体成归一化 PaidEvent。
func (p *Provider) VerifyCallback(_ context.Context, in provider.CallbackInput) (*provider.PaidEvent, error) { func (p *Provider) VerifyCallback(_ context.Context, in provider.CallbackInput) (*provider.PaidEvent, error) {