package payment import ( "context" "fmt" bizpayment "kra/internal/biz/payment" ) // Adapter is the provider boundary used by the payment repository. Provider // SDK types stay in this package and are normalized to biz/payment results. type Adapter interface { Create(context.Context, *bizpayment.PaymentRequest, map[string]any) (*bizpayment.PaymentResult, error) Query(context.Context, string, map[string]any) (*bizpayment.PaymentResult, error) Refund(context.Context, *bizpayment.PaymentRefundRequest, map[string]any) (*bizpayment.PaymentResult, error) Callback(context.Context, *bizpayment.PaymentCallback, map[string]any) (*bizpayment.PaymentResult, error) } // New constructs the SDK-backed adapter for a configured provider. 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: return nil, fmt.Errorf("支付渠道 %s 没有适配器", provider) } }