Skip to content

feat(core/connector): introduce authentication token flow and add sepa bankdebit for nordea#8133

Merged
likhinbopanna merged 35 commits intomainfrom
connector/nordea-sepa
Aug 11, 2025
Merged

feat(core/connector): introduce authentication token flow and add sepa bankdebit for nordea#8133
likhinbopanna merged 35 commits intomainfrom
connector/nordea-sepa

Conversation

@pixincreate
Copy link
Member

@pixincreate pixincreate commented May 25, 2025

Type of Change

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

Description

Summary

This PR introduces Nordea as a new payment connector with support for SEPA bank debit payments. It also implements a new Authentication Token Flow mechanism that enables two-step OAuth authentication, which is required by certain connectors like Nordea.

Problem Statement

Some payment connectors require a more complex authentication process that involves:

  1. Step 1: Obtaining an authentication token (authorization code) using client credentials
  2. Step 2: Exchanging that authentication token for an access token using OAuth 2.0 flow

The existing access token flow in Hyperswitch only supported direct access token generation, making it incompatible with connectors that require this two-step OAuth authentication process.

Solution

This PR introduces:

  1. Authentication Token Flow: A new connector flow that handles the two-step OAuth authentication process
  2. Nordea Connector Integration: The first connector to utilize this new authentication flow
  3. SEPA Bank Debit Support: Implementation of SEPA payment method through Nordea

Implementation Details

Authentication Token Flow Architecture

The new authentication flow works as follows:

flowchart TD
    A[Payment Flow Initiated] --> B{Connector Supports<br/>Access Token?}
    B -->|No| Z[Continue with Payment<br/>No Access Token]
    B -->|Yes| C[Check Access Token Cache]
    
    C --> D{Access Token<br/>in Cache?}
    D -->|Yes| E[Use Cached Access Token]
    D -->|No| F{Connector Needs<br/>Authentication Token?}
    
    F -->|No| G[Create AccessTokenRequestData<br/>with ConnectorAuthType only]
    F -->|Yes| H[Authentication Token Flow]
    
    H --> I[Create AccessTokenAuthenticationRequestData<br/>from ConnectorAuthType]
    I --> J[Call execute_authentication_token]
    J --> K[POST /oauth/authorize<br/>with client credentials]
    K --> L{Authentication<br/>Successful?}
    
    L -->|No| M[Return Error]
    L -->|Yes| N[Receive AccessTokenAuthenticationResponse<br/>authorization code]
    
    N --> O[Create AccessTokenRequestData<br/>with ConnectorAuthType + AuthenticationToken]
    O --> P[Access Token Flow]
    G --> P
    
    P --> Q[Call refresh_connector_auth]
    Q --> R[POST /oauth/token<br/>exchange auth code for access token]
    R --> S{Access Token<br/>Successful?}
    
    S -->|No| T[Return Error]
    S -->|Yes| U[Receive AccessToken<br/>bearer token + expiry]
    
    U --> V[Cache Access Token<br/>with reduced expiry]
    V --> W[Return Access Token]
    E --> W
    W --> X[Use Access Token<br/>for Payment Requests]
    
    M --> Y[Payment Flow Fails]
    T --> Y
    X --> AA[Payment Flow Continues]
    Z --> AA
    
    style H fill:#e1f5fe
    style P fill:#f3e5f5
    style I fill:#e8f5e8
    style O fill:#e8f5e8
    style K fill:#fff3e0
    style R fill:#fff3e0
    style V fill:#e8eaf6
Loading

Key Components

  • AccessTokenAuthenticationRequestData: Contains connector auth credentials for the first OAuth step
  • AccessTokenAuthenticationResponse: Contains the authorization code received from the authentication endpoint
  • Enhanced AccessTokenRequestData: Now supports both direct access token creation and token exchange flows
  • Automatic Flow Detection: The system automatically detects if a connector needs authentication tokens via authentication_token_for_token_creation()

Nordea Connector Integration

  • Authentication: Implements OAuth 2.0 with eIDAS signature validation

  • Payment Methods: SEPA Credit Transfers (bank debit)

  • Supported Operations:

    • Payment authorization (automatic capture only)
    • Payment synchronization (PSync)
    • Two-step OAuth authentication flow
  • Not Supported:

    • Manual capture
    • Refunds (only available in Corporate APIs)
    • Void/cancellation

Technical Implementation

  • Signature Generation: Implements eIDAS signature generation using RSA-SHA256 for API request signing

  • Auth Configuration: Uses SignatureKey auth type with:

    • api_key: Client Secret
    • key1: Client ID
    • api_secret: eIDAS Private Key (base64 encoded)
  • Request Signing: All requests include:

    • X-Nordea-Originating-Host
    • X-Nordea-Originating-Date
    • Signature header (following HTTP Signature spec)
    • Digest header for POST/PUT requests
  • Payment Flow:

    1. Authentication token creation (authorization)
    2. Access token exchange
    3. Payment initiation (PreProcessing)
    4. Payment confirmation (Authorize)

Changes Made

  1. Core Authentication Infrastructure:

    • Added AccessTokenAuthenticationRequestData struct for auth token requests
    • Added AccessTokenAuthenticationResponse struct for auth token responses
    • Enhanced AccessTokenRequestData to support both direct and exchange flows
    • Added execute_authentication_token function for OAuth step 1
    • Modified access token flow to check for authentication token support
    • Added backward-compatible authentication token detection
  2. Connector Implementation:

    • Added Nordea connector module with request/response structures
    • Implemented eIDAS signature generation
    • Added SEPA payment method support
    • Implemented OAuth 2.0 authentication flow
  3. Configuration:

    • Added Nordea to connector configs (development, sandbox, production)
    • Added payment method required fields configuration
    • Updated WASM bindings for frontend integration

Testing

  • Tested SEPA bank debit payments through complete flow
  • Verified eIDAS signature generation
  • Confirmed OAuth authentication flow works correctly
  • Validated payment status synchronization
  • Tested backward compatibility with existing connectors

Unsupported features by Nordea

  • Webhooks
  • Manual Capture
  • Refunds (only supported through Corporate API and is behind a paywall)

Breaking Changes

None - The authentication token flow is backward compatible and only activates for connectors that explicitly support it through the authentication_token_for_token_creation() method.

Additional Changes

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

Motivation and Context

New connector Nordea SEPA integration. Closes #8134.

How did you test it?

MCA
curl --location 'http://localhost:8080/account/postman_merchant_GHAction_1752842696/connectors' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'api-key: dev_DL49cxo4k5VbOYIabte7WgRsu9xTmB6in77WVBxdN8nPRWMqzFb5ISd3mGocJC0I' \
--data '{
    "connector_type": "payment_processor",
    "connector_name": "nordea",
    "business_country": "US",
    "business_label": "default",
    "connector_account_details": {
        "auth_type": "SignatureKey",
        "api_key": "client_secret",
        "key1": "client_id",
        "api_secret": "decrypted_certificate"
    },
    "test_mode": false,
    "disabled": false,
    "metadata": {
        "creditor_account_type": "IBAN",
        "creditor_account_value": "{{creditor_account_number}}",
        "creditor_beneficiary_name": "Test Merchant"
    },
    "payment_methods_enabled": [
        {
            "payment_method": "bank_debit",
            "payment_method_types": [
                {
                    "payment_method_type": "sepa",
                    "minimum_amount": 1,
                    "maximum_amount": 68607706,
                    "recurring_enabled": true,
                    "installment_payment_enabled": true
                }
            ]
        }
    ]
}'
{
    "connector_type": "payment_processor",
    "connector_name": "nordea",
    "connector_label": "nordea_US_default",
    "merchant_connector_id": "mca_UWrnV7EnGkfVapwuHOAM",
    "profile_id": "pro_892QTRQ3W6mWykBeSXDQ",
    "connector_account_details": {
        "auth_type": "SignatureKey",
        "api_key": "client_secret",
        "key1": "client_id",
        "api_secret": "decrypted_certificate"
    },
    "payment_methods_enabled": [
        {
            "payment_method": "bank_debit",
            "payment_method_types": [
                {
                    "payment_method_type": "sepa",
                    "payment_experience": null,
                    "card_networks": null,
                    "accepted_currencies": null,
                    "accepted_countries": null,
                    "minimum_amount": 1,
                    "maximum_amount": 68607706,
                    "recurring_enabled": true,
                    "installment_payment_enabled": true
                }
            ]
        }
    ],
    "connector_webhook_details": null,
    "metadata": {
        "creditor_account_type": "IBAN",
        "creditor_account_value": "FI7473834510057469",
        "creditor_beneficiary_name": "Test Merchant"
    },
    "test_mode": false,
    "disabled": false,
    "frm_configs": null,
    "business_country": "US",
    "business_label": "default",
    "business_sub_label": null,
    "applepay_verified_domains": null,
    "pm_auth_config": null,
    "status": "active",
    "additional_merchant_data": null,
    "connector_wallets_details": null
}
Payment Create
curl --location 'http://localhost:8080/payments' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Accept-Language: ja' \
--header 'api-key: dev_DL49cxo4k5VbOYIabte7WgRsu9xTmB6in77WVBxdN8nPRWMqzFb5ISd3mGocJC0I' \
--data-raw '{
    "amount": 10400,
    "currency": "EUR",
    "confirm": false,
    "capture_method": "automatic",
    "capture_on": "2022-09-10T10:11:12Z",
    "amount_to_capture": 10400,
    "customer_id": "customer",
    "email": "guesjhvghht@example.com",
    
    "phone": "999999999",
    "phone_country_code": "+1",
    "description": "Its my first payment request",
    "authentication_type": "three_ds",
    "return_url": "https://duck.com",
    "billing": {
        "address": {
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "city": "San Fransico",
            "state": "California",
            "zip": "94122",
            "country": "FI"
            ,
            "first_name": "PiX"
            ,
            "last_name": "THE"
        }
    },
    "shipping": {
        "address": {
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "city": "San Fransico",
            "state": "California",
            "zip": "94122",
            "country": "FI",
            "first_name": "PiX"
        }
    },
    "statement_descriptor_name": "joseph",
    "statement_descriptor_suffix": "JS",
    "metadata": {
        "udf1": "value1",
        "new_customer": "true",
        "login_date": "2019-09-10T10:11:12Z"
    },
    "browser_info": {
        "color_depth": 24,
        "java_enabled": true,
        "java_script_enabled": true,
        "language": "en-GB",
        "screen_height": 720,
        "screen_width": 1280,
        "time_zone": -330,
        "ip_address": "208.127.127.193",
        "accept_header": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
        "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0"
    }
    
}'
{
    "payment_id": "pay_GJDKAKdDxM4bQ8xX0anw",
    "merchant_id": "postman_merchant_GHAction_1752842696",
    "status": "requires_payment_method",
    "amount": 10400,
    "net_amount": 10400,
    "shipping_cost": null,
    "amount_capturable": 0,
    "amount_received": null,
    "connector": null,
    "client_secret": "pay_GJDKAKdDxM4bQ8xX0anw_secret_TL3I7uzVd7IA4uvwkPqh",
    "created": "2025-07-18T12:45:03.009Z",
    "currency": "EUR",
    "customer_id": "customer",
    "customer": {
        "id": "customer",
        "name": null,
        "email": "guesjhvghht@example.com",
        "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": null,
    "off_session": null,
    "capture_on": null,
    "capture_method": "automatic",
    "payment_method": null,
    "payment_method_data": null,
    "payment_token": null,
    "shipping": {
        "address": {
            "city": "San Fransico",
            "country": "FI",
            "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 Fransico",
            "country": "FI",
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "zip": "94122",
            "state": "California",
            "first_name": "PiX",
            "last_name": "THE"
        },
        "phone": null,
        "email": null
    },
    "order_details": null,
    "email": "guesjhvghht@example.com",
    "name": null,
    "phone": "999999999",
    "return_url": "https://duck.com/",
    "authentication_type": "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": null,
    "connector_label": null,
    "business_country": null,
    "business_label": "default",
    "business_sub_label": null,
    "allowed_payment_method_types": null,
    "ephemeral_key": {
        "customer_id": "customer",
        "created_at": 1752842702,
        "expires": 1752846302,
        "secret": "epk_d55a0599354449ebafda40a1f4989778"
    },
    "manual_retry_allowed": null,
    "connector_transaction_id": null,
    "frm_message": null,
    "metadata": {
        "udf1": "value1",
        "login_date": "2019-09-10T10:11:12Z",
        "new_customer": "true"
    },
    "connector_metadata": null,
    "feature_metadata": null,
    "reference_id": null,
    "payment_link": null,
    "profile_id": "pro_892QTRQ3W6mWykBeSXDQ",
    "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-07-18T13:00:03.008Z",
    "fingerprint": null,
    "browser_info": {
        "language": "en-GB",
        "time_zone": -330,
        "ip_address": "208.127.127.193",
        "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0",
        "color_depth": 24,
        "java_enabled": true,
        "screen_width": 1280,
        "accept_header": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
        "screen_height": 720,
        "java_script_enabled": true
    },
    "payment_method_id": null,
    "payment_method_status": null,
    "updated": "2025-07-18T12:45:03.075Z",
    "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,
    "is_iframe_redirection_enabled": null,
    "whole_connector_response": null
}
Payment Confirm
curl --location 'http://localhost:8080/payments/pay_GJDKAKdDxM4bQ8xX0anw/confirm' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'api-key: pk_dev_b6513b5899694eaeb7d76adfe1d29708' \
--data '{
    "payment_method": "bank_debit",
    "payment_method_type": "sepa",
    "payment_method_data": {
        "bank_debit": {
            "sepa_bank_debit": {
                "iban": "FI6593857450293470"
            }
        }
    },
    "client_secret": "pay_GJDKAKdDxM4bQ8xX0anw_secret_TL3I7uzVd7IA4uvwkPqh"
}'
{
    "payment_id": "pay_GJDKAKdDxM4bQ8xX0anw",
    "merchant_id": "postman_merchant_GHAction_1752842696",
    "status": "requires_customer_action",
    "amount": 10400,
    "net_amount": 10400,
    "shipping_cost": null,
    "amount_capturable": 10400,
    "amount_received": null,
    "connector": "nordea",
    "client_secret": "pay_GJDKAKdDxM4bQ8xX0anw_secret_TL3I7uzVd7IA4uvwkPqh",
    "created": "2025-07-18T12:45:03.009Z",
    "currency": "EUR",
    "customer_id": "customer",
    "customer": {
        "id": "customer",
        "name": null,
        "email": "guesjhvghht@example.com",
        "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": null,
    "off_session": null,
    "capture_on": null,
    "capture_method": "automatic",
    "payment_method": "bank_debit",
    "payment_method_data": {
        "bank_debit": {
            "sepa": {
                "iban": "FI659********93470",
                "bank_account_holder_name": null
            }
        },
        "billing": null
    },
    "payment_token": null,
    "shipping": {
        "address": {
            "city": "San Fransico",
            "country": "FI",
            "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 Fransico",
            "country": "FI",
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "zip": "94122",
            "state": "California",
            "first_name": "PiX",
            "last_name": "THE"
        },
        "phone": null,
        "email": null
    },
    "order_details": null,
    "email": "guesjhvghht@example.com",
    "name": null,
    "phone": "999999999",
    "return_url": "https://duck.com/",
    "authentication_type": "three_ds",
    "statement_descriptor_name": "joseph",
    "statement_descriptor_suffix": "JS",
    "next_action": {
        "type": "redirect_to_url",
        "redirect_to_url": "http://localhost:8080/payments/redirect/pay_GJDKAKdDxM4bQ8xX0anw/postman_merchant_GHAction_1752842696/pay_GJDKAKdDxM4bQ8xX0anw_1"
    },
    "cancellation_reason": null,
    "error_code": null,
    "error_message": null,
    "unified_code": null,
    "unified_message": null,
    "payment_experience": null,
    "payment_method_type": "sepa",
    "connector_label": null,
    "business_country": null,
    "business_label": "default",
    "business_sub_label": null,
    "allowed_payment_method_types": null,
    "ephemeral_key": null,
    "manual_retry_allowed": null,
    "connector_transaction_id": "c14b226e-dfc1-4458-a477-a7b3ee4387fd",
    "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_GJDKAKdDxM4bQ8xX0anw_1",
    "payment_link": null,
    "profile_id": "pro_892QTRQ3W6mWykBeSXDQ",
    "surcharge_details": null,
    "attempt_count": 1,
    "merchant_decision": null,
    "merchant_connector_id": "mca_UWrnV7EnGkfVapwuHOAM",
    "incremental_authorization_allowed": null,
    "authorization_count": null,
    "incremental_authorizations": null,
    "external_authentication_details": null,
    "external_3ds_authentication_attempted": false,
    "expires_on": "2025-07-18T13:00:03.008Z",
    "fingerprint": null,
    "browser_info": {
        "os_type": null,
        "language": null,
        "time_zone": null,
        "ip_address": "::1",
        "os_version": null,
        "user_agent": null,
        "color_depth": null,
        "device_model": null,
        "java_enabled": null,
        "screen_width": null,
        "accept_header": null,
        "screen_height": null,
        "accept_language": "en",
        "java_script_enabled": null
    },
    "payment_method_id": null,
    "payment_method_status": null,
    "updated": "2025-07-18T12:45:06.878Z",
    "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,
    "is_iframe_redirection_enabled": null,
    "whole_connector_response": null
}
Redirection image
Retrieve
curl --location 'http://localhost:8080/payments/pay_GJDKAKdDxM4bQ8xX0anw?force_sync=true' \
--header 'Accept: application/json' \
--header 'api-key: dev_DL49cxo4k5VbOYIabte7WgRsu9xTmB6in77WVBxdN8nPRWMqzFb5ISd3mGocJC0I'
{
    "payment_id": "pay_GJDKAKdDxM4bQ8xX0anw",
    "merchant_id": "postman_merchant_GHAction_1752842696",
    "status": "succeeded",
    "amount": 10400,
    "net_amount": 10400,
    "shipping_cost": null,
    "amount_capturable": 0,
    "amount_received": 10400,
    "connector": "nordea",
    "client_secret": "pay_GJDKAKdDxM4bQ8xX0anw_secret_TL3I7uzVd7IA4uvwkPqh",
    "created": "2025-07-18T12:45:03.009Z",
    "currency": "EUR",
    "customer_id": "customer",
    "customer": {
        "id": "customer",
        "name": null,
        "email": "guesjhvghht@example.com",
        "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": null,
    "off_session": null,
    "capture_on": null,
    "capture_method": "automatic",
    "payment_method": "bank_debit",
    "payment_method_data": {
        "bank_debit": {
            "sepa": {
                "iban": "FI659********93470",
                "bank_account_holder_name": null
            }
        },
        "billing": null
    },
    "payment_token": null,
    "shipping": {
        "address": {
            "city": "San Fransico",
            "country": "FI",
            "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 Fransico",
            "country": "FI",
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "zip": "94122",
            "state": "California",
            "first_name": "PiX",
            "last_name": "THE"
        },
        "phone": null,
        "email": null
    },
    "order_details": null,
    "email": "guesjhvghht@example.com",
    "name": null,
    "phone": "999999999",
    "return_url": "https://duck.com/",
    "authentication_type": "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": "sepa",
    "connector_label": null,
    "business_country": null,
    "business_label": "default",
    "business_sub_label": null,
    "allowed_payment_method_types": null,
    "ephemeral_key": null,
    "manual_retry_allowed": false,
    "connector_transaction_id": "c14b226e-dfc1-4458-a477-a7b3ee4387fd",
    "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_GJDKAKdDxM4bQ8xX0anw_1",
    "payment_link": null,
    "profile_id": "pro_892QTRQ3W6mWykBeSXDQ",
    "surcharge_details": null,
    "attempt_count": 1,
    "merchant_decision": null,
    "merchant_connector_id": "mca_UWrnV7EnGkfVapwuHOAM",
    "incremental_authorization_allowed": null,
    "authorization_count": null,
    "incremental_authorizations": null,
    "external_authentication_details": null,
    "external_3ds_authentication_attempted": false,
    "expires_on": "2025-07-18T13:00:03.008Z",
    "fingerprint": null,
    "browser_info": {
        "os_type": null,
        "language": null,
        "time_zone": null,
        "ip_address": "::1",
        "os_version": null,
        "user_agent": null,
        "color_depth": null,
        "device_model": null,
        "java_enabled": null,
        "screen_width": null,
        "accept_header": null,
        "screen_height": null,
        "accept_language": "en",
        "java_script_enabled": null
    },
    "payment_method_id": null,
    "payment_method_status": null,
    "updated": "2025-07-18T12:45:16.869Z",
    "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,
    "is_iframe_redirection_enabled": null,
    "whole_connector_response": null
}
Cypress

WILL INTRODUCE IN NEXT PR.

Checklist

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

@pixincreate pixincreate added this to the May 2025 Release milestone May 25, 2025
@pixincreate pixincreate self-assigned this May 25, 2025
@pixincreate pixincreate added A-connector-integration Area: Connector integration C-feature Category: Feature request or enhancement labels May 25, 2025
@semanticdiff-com
Copy link

semanticdiff-com bot commented May 25, 2025

Review changes with  SemanticDiff

Changed Files
File Status
  crates/router/src/core/payments/flows/approve_flow.rs  98% smaller
  crates/router/src/core/payments/flows/authorize_flow.rs  98% smaller
  crates/router/src/core/payments/flows/cancel_flow.rs  98% smaller
  crates/router/src/core/payments/flows/cancel_post_capture_flow.rs  98% smaller
  crates/router/src/core/payments/flows/capture_flow.rs  98% smaller
  crates/router/src/core/payments/flows/complete_authorize_flow.rs  98% smaller
  crates/router/src/core/payments/flows/incremental_authorization_flow.rs  98% smaller
  crates/router/src/core/payments/flows/post_session_tokens_flow.rs  98% smaller
  crates/router/src/core/payments/flows/psync_flow.rs  98% smaller
  crates/router/src/core/payments/flows/reject_flow.rs  98% smaller
  crates/router/src/core/payments/flows/session_flow.rs  98% smaller
  crates/router/src/core/payments/flows/session_update_flow.rs  98% smaller
  crates/router/src/core/payments/flows/setup_mandate_flow.rs  98% smaller
  crates/router/src/core/payments/flows/update_metadata_flow.rs  98% smaller
  crates/hyperswitch_domain_models/src/router_data_v2.rs  86% smaller
  crates/router/src/types/api.rs  82% smaller
  crates/router/src/core/payments.rs  75% smaller
  crates/hyperswitch_domain_models/src/types.rs  72% smaller
  crates/hyperswitch_interfaces/src/api.rs  32% smaller
  crates/hyperswitch_interfaces/src/types.rs  30% smaller
  crates/hyperswitch_connectors/src/default_implementations.rs  29% smaller
  crates/router/src/types.rs  25% smaller
  crates/hyperswitch_interfaces/src/connector_integration_v2.rs  22% smaller
  crates/hyperswitch_connectors/src/connectors/nordea.rs  14% smaller
  crates/hyperswitch_connectors/src/connectors/nordea/transformers.rs  9% smaller
  crates/hyperswitch_connectors/src/default_implementations_v2.rs  8% smaller
  crates/router/src/core/payments/access_token.rs  5% smaller
  crates/hyperswitch_domain_models/src/router_request_types.rs  1% smaller
  crates/hyperswitch_interfaces/src/conversion_impls.rs  1% smaller
  Cargo.lock Unsupported file format
  api-reference/v1/openapi_spec_v1.json  0% smaller
  api-reference/v2/openapi_spec_v2.json  0% smaller
  config/config.example.toml Unsupported file format
  config/deployments/integration_test.toml Unsupported file format
  config/deployments/production.toml Unsupported file format
  config/deployments/sandbox.toml Unsupported file format
  config/development.toml Unsupported file format
  config/docker_compose.toml Unsupported file format
  crates/api_models/src/admin.rs  0% smaller
  crates/common_enums/src/connector_enums.rs  0% smaller
  crates/common_utils/src/lib.rs  0% smaller
  crates/connector_configs/src/connector.rs  0% smaller
  crates/connector_configs/toml/development.toml Unsupported file format
  crates/connector_configs/toml/production.toml Unsupported file format
  crates/connector_configs/toml/sandbox.toml Unsupported file format
  crates/hyperswitch_connectors/Cargo.toml Unsupported file format
  crates/hyperswitch_connectors/src/connectors/nordea/requests.rs  0% smaller
  crates/hyperswitch_connectors/src/connectors/nordea/responses.rs  0% smaller
  crates/hyperswitch_connectors/src/utils.rs  0% smaller
  crates/hyperswitch_domain_models/src/router_data.rs  0% smaller
  crates/hyperswitch_domain_models/src/router_data_v2/flow_common_types.rs  0% smaller
  crates/hyperswitch_domain_models/src/router_flow_types/access_token_auth.rs  0% smaller
  crates/hyperswitch_interfaces/src/connector_integration_interface.rs Unsupported file format
  crates/payment_methods/src/configs/payment_connector_required_fields.rs  0% smaller
  crates/router/src/core/connector_validation.rs  0% smaller
  crates/router/src/core/refunds.rs  0% smaller
  crates/router/src/core/refunds_v2.rs Unsupported file format
  crates/router/src/services/api.rs  0% smaller
  crates/router/src/types/api/connector_mapping.rs  0% smaller
  crates/router/src/types/connector_transformers.rs  0% smaller
  crates/router/tests/connectors/sample_auth.toml Unsupported file format
  crates/test_utils/src/connector_auth.rs  0% smaller
  loadtest/config/development.toml Unsupported file format

@hyperswitch-bot hyperswitch-bot bot added the M-api-contract-changes Metadata: This PR involves API contract changes label May 25, 2025
@pixincreate pixincreate force-pushed the connector/nordea-sepa branch 3 times, most recently from 02454ab to 070d7d2 Compare May 30, 2025 09:40
@pixincreate pixincreate force-pushed the connector/nordea-sepa branch from 475ca85 to 070d7d2 Compare May 31, 2025 14:15
@pixincreate pixincreate force-pushed the connector/nordea-sepa branch 2 times, most recently from b1d0884 to 93b320a Compare June 10, 2025 17:44
@juspay juspay deleted a comment from coderabbitai bot Jun 10, 2025
@hyperswitch-bot hyperswitch-bot bot removed the M-api-contract-changes Metadata: This PR involves API contract changes label Jun 16, 2025
@pixincreate pixincreate force-pushed the connector/nordea-sepa branch from 5d8f1e9 to 6b8b2ed Compare July 12, 2025 18:49
@hyperswitch-bot hyperswitch-bot bot added the M-api-contract-changes Metadata: This PR involves API contract changes label Jul 12, 2025
@pixincreate pixincreate force-pushed the connector/nordea-sepa branch 2 times, most recently from 6fc6c09 to 3468faf Compare July 18, 2025 11:41
@pixincreate pixincreate marked this pull request as ready for review July 18, 2025 11:41
@pixincreate pixincreate requested review from a team as code owners July 18, 2025 11:41
@pixincreate pixincreate added the S-waiting-on-review Status: This PR has been implemented and needs to be reviewed label Jul 18, 2025
@pixincreate pixincreate changed the title feat(connector): [nordea] sepa bank debit feat(core/connector): introduce authentication token flow and add sepa bankdebit for nordea Jul 18, 2025
i might have to do some refinements to this. but yeah, the connector
still does not work as access token refactor is not done yet
Sakilmostak
Sakilmostak previously approved these changes Aug 8, 2025
hrithikesh026
hrithikesh026 previously approved these changes Aug 8, 2025
deepanshu-iiitu
deepanshu-iiitu previously approved these changes Aug 8, 2025
@likhinbopanna likhinbopanna added this pull request to the merge queue Aug 8, 2025
@github-merge-queue github-merge-queue bot removed this pull request from the merge queue due to failed status checks Aug 8, 2025
…ordea-sepa

* 'main' of github.com:juspay/hyperswitch:
  feat(core): Adding integration for webhooks through UCS (#8814)
  refactor(euclid): refactor logs for evaluation of equality for dynamic routing evaluate response (#8834)
  feat(connector): [SIFT] add Connector Template Code  (#8488)
  feat(router): Add tokenization support for proxy and update the route for proxy (#8530)
  fix(ci): Fix Spell Check For CI Pull Request (#8857)
  feat(checkbook_io): connector integrate ACH (#8730)
  fix(connector): Change Refund Reason Type in Adyen (#8849)
@likhinbopanna likhinbopanna added this pull request to the merge queue Aug 11, 2025
Merged via the queue into main with commit b46a838 Aug 11, 2025
18 of 22 checks passed
@likhinbopanna likhinbopanna deleted the connector/nordea-sepa branch August 11, 2025 07:26
@pixincreate pixincreate removed the S-waiting-on-review Status: This PR has been implemented and needs to be reviewed label Aug 11, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-connector-integration Area: Connector integration C-feature Category: Feature request or enhancement M-api-contract-changes Metadata: This PR involves API contract changes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[FEAT] [CONNECTOR: NORDEA] Implement SEPA Bank Debit

5 participants