优化结构

This commit is contained in:
Yvan
2026-08-22 22:34:33 +08:00
parent 0126995090
commit b18baf1547
26 changed files with 501 additions and 80 deletions
+32 -35
View File
@@ -4,6 +4,7 @@ import (
"context"
"fmt"
bizpayment "kra/internal/biz/payment"
"strings"
)
// Adapter is the provider boundary used by the payment repository. Provider
@@ -15,42 +16,38 @@ type Adapter interface {
Callback(context.Context, *bizpayment.PaymentCallback, map[string]any) (*bizpayment.PaymentResult, error)
}
// New constructs the SDK-backed adapter for a configured provider.
type adapterFactory func() Adapter
// adapterFactories is the single payment integration registration point.
// Keep constructors zero-state: provider configuration belongs to each call,
// so an adapter can never accidentally retain secrets or order data.
var adapterFactories = map[string]adapterFactory{
bizpayment.PaymentAlipay: func() Adapter { return &alipayAdapter{} },
bizpayment.PaymentAlipayV3: func() Adapter { return &alipayV3Adapter{} },
bizpayment.PaymentWechatV2: func() Adapter { return &wechatV2Adapter{} },
bizpayment.PaymentWechatV3: func() Adapter { return &wechatV3Adapter{} },
bizpayment.PaymentApple: func() Adapter { return &appleAdapter{} },
bizpayment.PaymentDouyin: func() Adapter { return &douyinAdapter{} },
bizpayment.PaymentQQ: func() Adapter { return &qqAdapter{} },
bizpayment.PaymentAllinPay: func() Adapter { return &allinpayAdapter{} },
bizpayment.PaymentLakala: func() Adapter { return &lakalaAdapter{} },
bizpayment.PaymentPayPal: func() Adapter { return &paypalAdapter{} },
bizpayment.PaymentSaobei: func() Adapter { return &saobeiAdapter{} },
bizpayment.PaymentChinaums: func() Adapter { return newVendorAdapter(bizpayment.PaymentChinaums, vendorChinaums) },
bizpayment.PaymentSFT: func() Adapter { return newVendorAdapter(bizpayment.PaymentSFT, vendorSFT) },
bizpayment.PaymentSuperPay: func() Adapter { return newVendorAdapter(bizpayment.PaymentSuperPay, vendorSupperPay) },
bizpayment.PaymentWechatGame: func() Adapter { return newVendorAdapter(bizpayment.PaymentWechatGame, vendorWechatGame) },
bizpayment.PaymentDouyinGame: func() Adapter { return newVendorAdapter(bizpayment.PaymentDouyinGame, vendorDouyinGame) },
}
// New constructs the SDK-backed adapter for a configured provider. Provider
// identifiers are normalized at this I/O boundary so direct callers get the
// same behavior as the configuration and business layers.
func New(provider string) (Adapter, error) {
switch provider {
case bizpayment.PaymentAlipay:
return &alipayAdapter{}, nil
case bizpayment.PaymentAlipayV3:
return &alipayV3Adapter{}, nil
case bizpayment.PaymentWechatV2:
return &wechatV2Adapter{}, nil
case bizpayment.PaymentWechatV3:
return &wechatV3Adapter{}, nil
case bizpayment.PaymentApple:
return &appleAdapter{}, nil
case bizpayment.PaymentDouyin:
return &douyinAdapter{}, nil
case bizpayment.PaymentQQ:
return &qqAdapter{}, nil
case bizpayment.PaymentAllinPay:
return &allinpayAdapter{}, nil
case bizpayment.PaymentLakala:
return &lakalaAdapter{}, nil
case bizpayment.PaymentPayPal:
return &paypalAdapter{}, nil
case bizpayment.PaymentSaobei:
return &saobeiAdapter{}, nil
case bizpayment.PaymentChinaums:
return newVendorAdapter(provider, vendorChinaums), nil
case bizpayment.PaymentSFT:
return newVendorAdapter(provider, vendorSFT), nil
case bizpayment.PaymentSuperPay:
return newVendorAdapter(provider, vendorSupperPay), nil
case bizpayment.PaymentWechatGame:
return newVendorAdapter(provider, vendorWechatGame), nil
case bizpayment.PaymentDouyinGame:
return newVendorAdapter(provider, vendorDouyinGame), nil
default:
provider = strings.ToLower(strings.TrimSpace(provider))
factory, ok := adapterFactories[provider]
if !ok {
return nil, fmt.Errorf("支付渠道 %s 没有适配器", provider)
}
return factory(), nil
}