Skip to content

feat(router): add debit routing support for saved card flow #7923

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 4 commits into
base: debit-routing/add-core-logic
Choose a base branch
from

Conversation

ShankarSinghC
Copy link
Contributor

@ShankarSinghC ShankarSinghC commented Apr 29, 2025

Type of Change

  • Bugfix
  • New feature
  • Enhancement
  • Refactoring
  • Dependency updates
  • Documentation
  • CI/CD

Description

Once debit routing is performed for a card and the card is saved in the payment, we can also store the debit routing output. This allows us to reuse the saved data in future saved card flows instead of re-running the debit routing process.

Changes:

In this PR, support for co-badged card data has been introduced. This data will be stored in the payment_method_data column of the payment_methods table and will contain the debit routing output.

In the saved card flow, we check if the co-badged card data is present in the payment_method_data of the payment method. If it is present, the same data will be sent to the open router for debit routing.

If the co-badged card data is not available, then the card_isin, which contains the card BIN, will be used to call the open router.

Additional Changes

  • This PR modifies the API contract
  • This PR modifies the database schema
  • This PR modifies application configuration/environment variables

add debit routing support for saved card flow

Motivation and Context

How did you test it?

Tested locally by creating dummy co-badged card bin dump
-> Create a merchant account and business profile
-> Enable debit routing and provide merchant business country for the business profile

curl --location 'http://localhost:8080/account/merchant_1745690754/business_profile/pro_OiJkBiFuCYbYAkCG9X02' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'api-key: ' \
--data '{
    "is_debit_routing_enabled": true,
    "merchant_business_country": "US"

}'

-> Create a payment

curl --location 'http://localhost:8080/payments' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'x-tenant-id: hyperswitch' \
--header 'api-key: dev_t6MGc7fYh7s9QLODlx0Pvl5QaGQtKhHFq0eUOJm6hNBfrWK2FqqWZ4tDXpqMUzfZ' \
--data-raw '{
    "amount": 100,
    "amount_to_capture": 100,
    "currency": "USD",
    "confirm": true,
    "capture_method": "automatic",
    "setup_future_usage": "on_session",
    "capture_on": "2022-09-10T10:11:12Z",
    "email": "[email protected]",
    "name": "John Doe",
    "phone": "999999999",
    "phone_country_code": "+1",
    "description": "Its my first payment request",
    "authentication_type": "no_three_ds",
    "customer_id": "cu_1745917372",
    "return_url": "http://127.0.0.1:4040",
    "payment_method": "card",
    "payment_method_type": "debit",
    "payment_method_data": {
        "card": {
            "card_number": "4400002000000004",
            "card_exp_month": "03",
            "card_exp_year": "2030",
            "card_holder_name": "joseph Doe",
            "card_cvc": "737"
        }
    },
    "customer_acceptance": {
        "acceptance_type": "offline",
        "accepted_at": "1963-05-03T04:07:52.723Z",
        "online": {
            "ip_address": "in sit",
            "user_agent": "amet irure esse"
        }
    },
    "billing": {
        "address": {
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "city": "San",
            "state": "California",
            "zip": "94122",
            "country": "US",
            "first_name": "PiX",
            "last_name": "ss"
        },
        "email": "[email protected]"
    },
    "shipping": {
        "address": {
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "city": "San Fransico",
            "state": "California",
            "zip": "94122",
            "country": "US",
            "first_name": "PiX"
        }
    },
    "browser_info": {
        "user_agent": "Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/70.0.3538.110 Safari\/537.36",
        "accept_header": "text\/html,application\/xhtml+xml,application\/xml;q=0.9,image\/webp,image\/apng,*\/*;q=0.8",
        "language": "nl-NL",
        "color_depth": 24,
        "screen_height": 723,
        "screen_width": 1536,
        "time_zone": 0,
        "java_enabled": true,
        "java_script_enabled": true,
        "ip_address": "125.0.0.1"
    },
    "statement_descriptor_name": "joseph",
    "statement_descriptor_suffix": "JS",
    "metadata": {
        "udf1": "value1",
        "new_customer": "true",
        "login_date": "2019-09-10T10:11:12Z"
    }
}'
{
  "payment_id": "pay_p70wBAMKn2Cwih0biDX0",
  "merchant_id": "merchant_1745690754",
  "status": "succeeded",
  "amount": 100,
  "net_amount": 100,
  "shipping_cost": null,
  "amount_capturable": 0,
  "amount_received": 100,
  "connector": "adyen",
  "client_secret": "pay_p70wBAMKn2Cwih0biDX0_secret_n9DPdVNK5DMvaPoYj3y2",
  "created": "2025-04-29T09:02:58.609Z",
  "currency": "USD",
  "customer_id": "cu_1745917372",
  "customer": {
    "id": "cu_1745917372",
    "name": "John Doe",
    "email": "[email protected]",
    "phone": "999999999",
    "phone_country_code": "+1"
  },
  "description": "Its my first payment request",
  "refunds": null,
  "disputes": null,
  "mandate_id": null,
  "mandate_data": null,
  "setup_future_usage": "on_session",
  "off_session": null,
  "capture_on": null,
  "capture_method": "automatic",
  "payment_method": "card",
  "payment_method_data": {
    "card": {
      "last4": "0004",
      "card_type": null,
      "card_network": null,
      "card_issuer": null,
      "card_issuing_country": null,
      "card_isin": "440000",
      "card_extended_bin": null,
      "card_exp_month": "03",
      "card_exp_year": "2030",
      "card_holder_name": "joseph Doe",
      "payment_checks": null,
      "authentication_data": null
    },
    "billing": null
  },
  "payment_token": null,
  "shipping": {
    "address": {
      "city": "San Fransico",
      "country": "US",
      "line1": "1467",
      "line2": "Harrison Street",
      "line3": "Harrison Street",
      "zip": "94122",
      "state": "California",
      "first_name": "PiX",
      "last_name": null
    },
    "phone": null,
    "email": null
  },
  "billing": {
    "address": {
      "city": "San",
      "country": "US",
      "line1": "1467",
      "line2": "Harrison Street",
      "line3": "Harrison Street",
      "zip": "94122",
      "state": "California",
      "first_name": "PiX",
      "last_name": "ss"
    },
    "phone": null,
    "email": "[email protected]"
  },
  "order_details": null,
  "email": "[email protected]",
  "name": "John Doe",
  "phone": "999999999",
  "return_url": "http://127.0.0.1:4040/",
  "authentication_type": "no_three_ds",
  "statement_descriptor_name": "joseph",
  "statement_descriptor_suffix": "JS",
  "next_action": null,
  "cancellation_reason": null,
  "error_code": null,
  "error_message": null,
  "unified_code": null,
  "unified_message": null,
  "payment_experience": null,
  "payment_method_type": "debit",
  "connector_label": null,
  "business_country": null,
  "business_label": "default",
  "business_sub_label": null,
  "allowed_payment_method_types": null,
  "ephemeral_key": {
    "customer_id": "cu_1745917372",
    "created_at": 1745917378,
    "expires": 1745920978,
    "secret": "epk_248a7b7506aa4a60b28db8ddf75d38ad"
  },
  "manual_retry_allowed": false,
  "connector_transaction_id": "B6WPZCJ7DLDD9J75",
  "frm_message": null,
  "metadata": {
    "udf1": "value1",
    "login_date": "2019-09-10T10:11:12Z",
    "new_customer": "true"
  },
  "connector_metadata": null,
  "feature_metadata": null,
  "reference_id": "pay_p70wBAMKn2Cwih0biDX0_1",
  "payment_link": null,
  "profile_id": "pro_OiJkBiFuCYbYAkCG9X02",
  "surcharge_details": null,
  "attempt_count": 1,
  "merchant_decision": null,
  "merchant_connector_id": "mca_VyX6BwB09KJrmeR1ODFD",
  "incremental_authorization_allowed": null,
  "authorization_count": null,
  "incremental_authorizations": null,
  "external_authentication_details": null,
  "external_3ds_authentication_attempted": false,
  "expires_on": "2025-04-29T09:17:58.609Z",
  "fingerprint": null,
  "browser_info": {
    "language": "nl-NL",
    "time_zone": 0,
    "ip_address": "125.0.0.1",
    "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36",
    "color_depth": 24,
    "java_enabled": true,
    "screen_width": 1536,
    "accept_header": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
    "screen_height": 723,
    "java_script_enabled": true
  },
  "payment_method_id": null,
  "payment_method_status": null,
  "updated": "2025-04-29T09:03:00.705Z",
  "split_payments": null,
  "frm_metadata": null,
  "extended_authorization_applied": null,
  "capture_before": null,
  "merchant_order_reference_id": null,
  "order_tax_amount": null,
  "connector_mandate_id": null,
  "card_discovery": "manual",
  "force_3ds_challenge": false,
  "force_3ds_challenge_trigger": false,
  "issuer_error_code": null,
  "issuer_error_message": null
}

-> Connector request indicating the card brand as star
image
-> Create a payment for the same customer

curl --location 'http://localhost:8080/payments' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'api-key: dev_t6MGc7fYh7s9QLODlx0Pvl5QaGQtKhHFq0eUOJm6hNBfrWK2FqqWZ4tDXpqMUzfZ' \
--data-raw '{
    "amount": 6100,
    "currency": "USD",
    "confirm": false,
    "business_country": "US",
    "business_label": "default",
    "amount_to_capture": 6100,
    "capture_method": "automatic",
    "capture_on": "2022-09-10T10:11:12Z",
    "return_url": "https://google.com",
    "email": "[email protected]",
    "setup_future_usage": "on_session",
    "name": "Joseph Doe",
    "phone": "999999999",
    "phone_country_code": "+65",
    "description": "Its my first payment request",
    "statement_descriptor_name": "Juspay",
    "statement_descriptor_suffix": "Router",
    "customer_id": "cu_1745917372",

    "billing": {
        "address": {
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "city": "San Fransico",
            "state": "California",
            "zip": "94122",
            "country": "US",
            "first_name": "joseph",
            "last_name": "Doe"
        },
        "phone": {
            "number": "8056594427",
            "country_code": "+91"
        }
    }
}'
{
  "payment_id": "pay_icPaUi7x7A2gK2F43q56",
  "merchant_id": "merchant_1745690754",
  "status": "requires_payment_method",
  "amount": 6100,
  "net_amount": 6100,
  "shipping_cost": null,
  "amount_capturable": 0,
  "amount_received": null,
  "connector": null,
  "client_secret": "pay_icPaUi7x7A2gK2F43q56_secret_gKv1GroVoPf0i000siHK",
  "created": "2025-04-29T09:06:25.436Z",
  "currency": "USD",
  "customer_id": "cu_1745917372",
  "customer": {
    "id": "cu_1745917372",
    "name": "Joseph Doe",
    "email": "[email protected]",
    "phone": "999999999",
    "phone_country_code": "+65"
  },
  "description": "Its my first payment request",
  "refunds": null,
  "disputes": null,
  "mandate_id": null,
  "mandate_data": null,
  "setup_future_usage": "on_session",
  "off_session": null,
  "capture_on": null,
  "capture_method": "automatic",
  "payment_method": null,
  "payment_method_data": null,
  "payment_token": null,
  "shipping": null,
  "billing": {
    "address": {
      "city": "San Fransico",
      "country": "US",
      "line1": "1467",
      "line2": "Harrison Street",
      "line3": "Harrison Street",
      "zip": "94122",
      "state": "California",
      "first_name": "joseph",
      "last_name": "Doe"
    },
    "phone": {
      "number": "8056594427",
      "country_code": "+91"
    },
    "email": null
  },
  "order_details": null,
  "email": "[email protected]",
  "name": "Joseph Doe",
  "phone": "999999999",
  "return_url": "https://google.com/",
  "authentication_type": null,
  "statement_descriptor_name": "Juspay",
  "statement_descriptor_suffix": "Router",
  "next_action": null,
  "cancellation_reason": null,
  "error_code": null,
  "error_message": null,
  "unified_code": null,
  "unified_message": null,
  "payment_experience": null,
  "payment_method_type": null,
  "connector_label": null,
  "business_country": "US",
  "business_label": "default",
  "business_sub_label": null,
  "allowed_payment_method_types": null,
  "ephemeral_key": {
    "customer_id": "cu_1745917372",
    "created_at": 1745917585,
    "expires": 1745921185,
    "secret": "epk_03223a8293164e14a0b1dc07cc86404a"
  },
  "manual_retry_allowed": null,
  "connector_transaction_id": null,
  "frm_message": null,
  "metadata": null,
  "connector_metadata": null,
  "feature_metadata": null,
  "reference_id": null,
  "payment_link": null,
  "profile_id": "pro_OiJkBiFuCYbYAkCG9X02",
  "surcharge_details": null,
  "attempt_count": 1,
  "merchant_decision": null,
  "merchant_connector_id": null,
  "incremental_authorization_allowed": null,
  "authorization_count": null,
  "incremental_authorizations": null,
  "external_authentication_details": null,
  "external_3ds_authentication_attempted": false,
  "expires_on": "2025-04-29T09:21:25.436Z",
  "fingerprint": null,
  "browser_info": null,
  "payment_method_id": null,
  "payment_method_status": null,
  "updated": "2025-04-29T09:06:25.462Z",
  "split_payments": null,
  "frm_metadata": null,
  "extended_authorization_applied": null,
  "capture_before": null,
  "merchant_order_reference_id": null,
  "order_tax_amount": null,
  "connector_mandate_id": null,
  "card_discovery": null,
  "force_3ds_challenge": false,
  "force_3ds_challenge_trigger": false,
  "issuer_error_code": null,
  "issuer_error_message": null
}

-> list payment methods for the same customer

curl --location 'http://localhost:8080/customers/cu_1745917372/payment_methods' \
--header 'Accept: application/json' \
--header 'api-key: dev_t6MGc7fYh7s9QLODlx0Pvl5QaGQtKhHFq0eUOJm6hNBfrWK2FqqWZ4tDXpqMUzfZ'
{
  "customer_payment_methods": [
    {
      "payment_token": "token_mzQEW3GchjpQQDxWqQ7G",
      "payment_method_id": "pm_KNynHcJOxmcco1GrzdWm",
      "customer_id": "cu_1745917372",
      "payment_method": "card",
      "payment_method_type": "debit",
      "payment_method_issuer": null,
      "payment_method_issuer_code": null,
      "recurring_enabled": false,
      "installment_payment_enabled": false,
      "payment_experience": [
        "redirect_to_url"
      ],
      "card": {
        "scheme": "Star",
        "issuer_country": null,
        "last4_digits": "0004",
        "expiry_month": "03",
        "expiry_year": "2030",
        "card_token": null,
        "card_holder_name": "joseph Doe",
        "card_fingerprint": null,
        "nick_name": null,
        "card_network": "Star",
        "card_isin": "440000",
        "card_issuer": null,
        "card_type": null,
        "saved_to_locker": true
      },
      "metadata": null,
      "created": "2025-04-29T09:03:00.719Z",
      "bank": null,
      "surcharge_details": null,
      "requires_cvv": true,
      "last_used_at": "2025-04-29T09:03:00.719Z",
      "default_payment_method_set": true,
      "billing": {
        "address": {
          "city": "San",
          "country": "US",
          "line1": "1467",
          "line2": "Harrison Street",
          "line3": "Harrison Street",
          "zip": "94122",
          "state": "California",
          "first_name": "joseph",
          "last_name": "Doe"
        },
        "phone": null,
        "email": "[email protected]"
      }
    }
  ],
  "is_guest_customer": null
}

-> Confirm the a payment with the payment token

curl --location 'http://localhost:8080/payments/pay_icPaUi7x7A2gK2F43q56/confirm' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'api-key: pk_dev_f3e0703c217345e3ace5d6c6cd2046ad' \
--data '{
    "payment_token": "token_mzQEW3GchjpQQDxWqQ7G",
    "payment_method_type": "debit",
    "payment_method": "card",
    "browser_info": {
        "user_agent": "Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/70.0.3538.110 Safari\/537.36",
        "accept_header": "text\/html,application\/xhtml+xml,application\/xml;q=0.9,image\/webp,image\/apng,*\/*;q=0.8",
        "language": "nl-NL",
        "color_depth": 24,
        "screen_height": 723,
        "screen_width": 1536,
        "time_zone": 0,
        "java_enabled": true,
        "java_script_enabled": true,
        "ip_address": "125.0.0.1"
    },
    "client_secret": "pay_icPaUi7x7A2gK2F43q56_secret_gKv1GroVoPf0i000siHK",
    "setup_future_usage": "on_session",
    "payment_method_data": {
        "card_token": {
            "card_cvc": "123"
        }
    }
}'
{
  "payment_id": "pay_icPaUi7x7A2gK2F43q56",
  "merchant_id": "merchant_1745690754",
  "status": "failed",
  "amount": 6100,
  "net_amount": 6100,
  "shipping_cost": null,
  "amount_capturable": 0,
  "amount_received": null,
  "connector": "adyen",
  "client_secret": "pay_icPaUi7x7A2gK2F43q56_secret_gKv1GroVoPf0i000siHK",
  "created": "2025-04-29T09:06:25.436Z",
  "currency": "USD",
  "customer_id": "cu_1745917372",
  "customer": {
    "id": "cu_1745917372",
    "name": "Joseph Doe",
    "email": "[email protected]",
    "phone": "999999999",
    "phone_country_code": "+65"
  },
  "description": "Its my first payment request",
  "refunds": null,
  "disputes": null,
  "mandate_id": null,
  "mandate_data": null,
  "setup_future_usage": "on_session",
  "off_session": null,
  "capture_on": null,
  "capture_method": "automatic",
  "payment_method": "card",
  "payment_method_data": {
    "card": {
      "last4": "0004",
      "card_type": null,
      "card_network": null,
      "card_issuer": null,
      "card_issuing_country": null,
      "card_isin": "440000",
      "card_extended_bin": null,
      "card_exp_month": "03",
      "card_exp_year": "2030",
      "card_holder_name": "joseph Doe",
      "payment_checks": null,
      "authentication_data": null
    },
    "billing": null
  },
  "payment_token": "token_mzQEW3GchjpQQDxWqQ7G",
  "shipping": null,
  "billing": {
    "address": {
      "city": "San Fransico",
      "country": "US",
      "line1": "1467",
      "line2": "Harrison Street",
      "line3": "Harrison Street",
      "zip": "94122",
      "state": "California",
      "first_name": "joseph",
      "last_name": "Doe"
    },
    "phone": {
      "number": "8056594427",
      "country_code": "+91"
    },
    "email": null
  },
  "order_details": null,
  "email": "[email protected]",
  "name": "Joseph Doe",
  "phone": "999999999",
  "return_url": "https://google.com/",
  "authentication_type": "no_three_ds",
  "statement_descriptor_name": "Juspay",
  "statement_descriptor_suffix": "Router",
  "next_action": null,
  "cancellation_reason": null,
  "error_code": "24",
  "error_message": "CVC Declined",
  "unified_code": "UE_9000",
  "unified_message": "Something went wrong",
  "payment_experience": null,
  "payment_method_type": "debit",
  "connector_label": "adyen_US_default",
  "business_country": "US",
  "business_label": "default",
  "business_sub_label": null,
  "allowed_payment_method_types": null,
  "ephemeral_key": null,
  "manual_retry_allowed": true,
  "connector_transaction_id": "C87D7CD547P6TNV5",
  "frm_message": null,
  "metadata": null,
  "connector_metadata": null,
  "feature_metadata": null,
  "reference_id": null,
  "payment_link": null,
  "profile_id": "pro_OiJkBiFuCYbYAkCG9X02",
  "surcharge_details": null,
  "attempt_count": 1,
  "merchant_decision": null,
  "merchant_connector_id": "mca_VyX6BwB09KJrmeR1ODFD",
  "incremental_authorization_allowed": false,
  "authorization_count": null,
  "incremental_authorizations": null,
  "external_authentication_details": null,
  "external_3ds_authentication_attempted": false,
  "expires_on": "2025-04-29T09:21:25.436Z",
  "fingerprint": null,
  "browser_info": {
    "os_type": null,
    "language": "nl-NL",
    "time_zone": 0,
    "ip_address": "125.0.0.1",
    "os_version": null,
    "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36",
    "color_depth": 24,
    "device_model": null,
    "java_enabled": true,
    "screen_width": 1536,
    "accept_header": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
    "screen_height": 723,
    "accept_language": "en",
    "java_script_enabled": true
  },
  "payment_method_id": "pm_KNynHcJOxmcco1GrzdWm",
  "payment_method_status": "active",
  "updated": "2025-04-29T09:10:38.933Z",
  "split_payments": null,
  "frm_metadata": null,
  "extended_authorization_applied": null,
  "capture_before": null,
  "merchant_order_reference_id": null,
  "order_tax_amount": null,
  "connector_mandate_id": null,
  "card_discovery": "saved_card",
  "force_3ds_challenge": false,
  "force_3ds_challenge_trigger": false,
  "issuer_error_code": null,
  "issuer_error_message": "DECLINED CVC Incorrect"
}

-> Logs showing the debit routing flow was triggered with the previously saved co-badged card data
image
-> Logs showing the card brand was set star in the connector request
image

Checklist

  • I formatted the code cargo +nightly fmt --all
  • I addressed lints thrown by cargo clippy
  • I reviewed the submitted code
  • I added unit tests for my changes where possible

@ShankarSinghC ShankarSinghC added A-core Area: Core flows A-payment-methods Area: Payment Methods A-routing Area: Routing labels Apr 29, 2025
@ShankarSinghC ShankarSinghC self-assigned this Apr 29, 2025
@ShankarSinghC ShankarSinghC requested review from a team as code owners April 29, 2025 07:15
Copy link

semanticdiff-com bot commented Apr 29, 2025

Review changes with  SemanticDiff

Changed Files
File Status
  crates/router/src/core/payments/tokenization.rs  54% smaller
  crates/router/src/core/payment_methods/cards.rs  52% smaller
  crates/router/src/core/debit_routing.rs  39% smaller
  crates/api_models/src/payment_methods.rs  29% smaller
  crates/hyperswitch_domain_models/src/payment_method_data.rs  24% smaller
  crates/router/src/core/payments.rs  18% smaller
  crates/hyperswitch_domain_models/src/payment_methods.rs  16% smaller
  crates/api_models/src/open_router.rs  4% smaller
  crates/common_enums/src/enums.rs  0% smaller
  crates/router/src/core/payment_methods/tokenize.rs  0% smaller
  crates/router/src/core/payment_methods/tokenize/card_executor.rs  0% smaller
  crates/router/src/core/payment_methods/tokenize/payment_method_executor.rs  0% smaller
  crates/router/src/core/payment_methods/vault.rs  0% smaller
  crates/router/src/core/payments/helpers.rs  0% smaller
  crates/router/src/core/payouts/helpers.rs  0% smaller
  crates/router/src/utils/verify_connector.rs  0% smaller
  crates/router/tests/connectors/aci.rs  0% smaller
  crates/router/tests/connectors/adyen.rs  0% smaller
  crates/router/tests/connectors/airwallex.rs  0% smaller
  crates/router/tests/connectors/fiserv.rs  0% smaller
  crates/router/tests/connectors/rapyd.rs  0% smaller
  crates/router/tests/connectors/utils.rs  0% smaller
  crates/router/tests/connectors/worldline.rs  0% smaller

@ShankarSinghC ShankarSinghC linked an issue Apr 29, 2025 that may be closed by this pull request
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-core Area: Core flows A-payment-methods Area: Payment Methods A-routing Area: Routing
Projects
None yet
Development

Successfully merging this pull request may close these issues.

add debit routing support for saved card flow
1 participant