fix: support legacy payment method aliases
This commit is contained in:
@@ -231,6 +231,11 @@ func getInstanceChannelLimits(inst *dbent.PaymentProviderInstance, paymentType P
|
|||||||
if cl, ok := limits[lookupKey]; ok {
|
if cl, ok := limits[lookupKey]; ok {
|
||||||
return cl
|
return cl
|
||||||
}
|
}
|
||||||
|
if aliasKey := legacyVisibleMethodAlias(lookupKey); aliasKey != "" {
|
||||||
|
if cl, ok := limits[aliasKey]; ok {
|
||||||
|
return cl
|
||||||
|
}
|
||||||
|
}
|
||||||
return ChannelLimits{}
|
return ChannelLimits{}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -321,14 +326,38 @@ func InstanceSupportsType(supportedTypes string, target PaymentType) bool {
|
|||||||
if supportedTypes == "" {
|
if supportedTypes == "" {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
normalizedTarget := normalizeVisibleMethodSupportType(target)
|
||||||
for _, t := range strings.Split(supportedTypes, ",") {
|
for _, t := range strings.Split(supportedTypes, ",") {
|
||||||
if strings.TrimSpace(t) == target {
|
supported := strings.TrimSpace(t)
|
||||||
|
if supported == target || normalizeVisibleMethodSupportType(supported) == normalizedTarget {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func normalizeVisibleMethodSupportType(paymentType PaymentType) PaymentType {
|
||||||
|
switch strings.TrimSpace(paymentType) {
|
||||||
|
case TypeAlipay, TypeAlipayDirect:
|
||||||
|
return TypeAlipay
|
||||||
|
case TypeWxpay, TypeWxpayDirect:
|
||||||
|
return TypeWxpay
|
||||||
|
default:
|
||||||
|
return strings.TrimSpace(paymentType)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func legacyVisibleMethodAlias(paymentType PaymentType) PaymentType {
|
||||||
|
switch normalizeVisibleMethodSupportType(paymentType) {
|
||||||
|
case TypeAlipay:
|
||||||
|
return TypeAlipayDirect
|
||||||
|
case TypeWxpay:
|
||||||
|
return TypeWxpayDirect
|
||||||
|
default:
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// GetInstanceConfig decrypts and returns the configuration for a provider instance by ID.
|
// GetInstanceConfig decrypts and returns the configuration for a provider instance by ID.
|
||||||
func (lb *DefaultLoadBalancer) GetInstanceConfig(ctx context.Context, instanceID int64) (map[string]string, error) {
|
func (lb *DefaultLoadBalancer) GetInstanceConfig(ctx context.Context, instanceID int64) (map[string]string, error) {
|
||||||
inst, err := lb.db.PaymentProviderInstance.Get(ctx, instanceID)
|
inst, err := lb.db.PaymentProviderInstance.Get(ctx, instanceID)
|
||||||
|
|||||||
@@ -68,10 +68,16 @@ func TestInstanceSupportsType(t *testing.T) {
|
|||||||
expected: true,
|
expected: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "partial match should not succeed",
|
name: "legacy alipay direct supports canonical visible method",
|
||||||
supportedTypes: "alipay_direct",
|
supportedTypes: "alipay_direct",
|
||||||
target: "alipay",
|
target: "alipay",
|
||||||
expected: false,
|
expected: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "legacy wxpay direct supports canonical visible method",
|
||||||
|
supportedTypes: "wxpay_direct",
|
||||||
|
target: "wxpay",
|
||||||
|
expected: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "empty supported types means all supported",
|
name: "empty supported types means all supported",
|
||||||
@@ -92,6 +98,22 @@ func TestInstanceSupportsType(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestGetInstanceChannelLimitsFallsBackToLegacyDirectAliases(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
|
||||||
|
inst := testInstance(1, TypeAlipay, makeLimitsJSON(TypeAlipayDirect, ChannelLimits{SingleMax: 66}))
|
||||||
|
got := getInstanceChannelLimits(inst, TypeAlipay)
|
||||||
|
if got.SingleMax != 66 {
|
||||||
|
t.Fatalf("getInstanceChannelLimits() = %+v, want SingleMax=66", got)
|
||||||
|
}
|
||||||
|
|
||||||
|
wxInst := testInstance(2, TypeWxpay, makeLimitsJSON(TypeWxpayDirect, ChannelLimits{SingleMin: 8}))
|
||||||
|
wxGot := getInstanceChannelLimits(wxInst, TypeWxpay)
|
||||||
|
if wxGot.SingleMin != 8 {
|
||||||
|
t.Fatalf("getInstanceChannelLimits() = %+v, want SingleMin=8", wxGot)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
// Helper to build test PaymentProviderInstance values
|
// Helper to build test PaymentProviderInstance values
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
|
|||||||
Reference in New Issue
Block a user