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。