PaySwitcher
  • About PaySwitcher
    • 🛒For Online Businesses
    • 🪜For Small & Medium Enterprises
    • 🏢For Enterprises
    • 🖥️For SaaS Providers
    • 🛍️For E-Commerce Businesses
    • 📦For Marketplace/Platforms
    • 🏦For Banks & Financial Institutions
  • PaySwitcher Cloud
    • ⚡Quickstart
      • 📥Migrate from Stripe
        • Web
        • Android
        • iOS
        • React Native
      • 🥗Payment Recipes
        • Use PayPal With Stripe
    • ⚙️Control Centre Account setup
    • 📦Integration guide
      • 🌐Web
        • Node And React
        • Customization
        • Error Codes
        • Node and HTML
        • Vanilla JS and REST API Integration
      • 📱Android
        • Kotlin with Node Backend
        • Customization
        • Features
      • 📱iOS
        • Swift with Node Backend
        • Customization
        • Features
      • ⏺️React Native
        • React Native with Node Backend (Beta)
        • Card Widget (Beta)
        • Customization
      • ⏺️Flutter
        • Flutter with Node Backend
        • Customization
      • Headless SDK
      • Payment Methods Management
    • 💳Payment methods setup
      • 💳Cards
      • 📱Wallets
        • Apple Pay
          • Web Domain
          • iOS Application
        • Google Pay
        • PayPal
      • 📆Pay Later
      • 🏦Banks
        • Bank Debits
        • Bank Redirects
        • Bank Transfers
      • 🪙Crypto
      • 🔑Test Credentials
    • 🔌Connectors
      • 🖲️Available Connectors
        • ACI
        • Adyen
        • Airwallex
        • Authorizedotnet
        • Bambora
        • Bank of America
        • Billwerk
        • Bluesnap
        • Braintree
        • Checkout
        • Coinbase
        • Cybersource
          • Apple Pay
          • Google Pay
        • dLocal
        • Fiserv
        • GlobalPayments
        • GoCardless
        • Klarna
        • Mollie
        • MultiSafepay
        • Nuvei
        • OpenNode
        • Paypal
        • PayU
        • Prophetpay
        • Rapyd
        • Shift4
        • Stripe
        • TrustPay
        • Volt
        • Worldline
        • Worldpay
        • Zen
      • Activate connector on PaySwitcher
      • Test a Payment with connector
    • 🪝Webhooks
  • Features
    • 🔀Payment flows
      • 🔁Saving payment methods & recurring payments
      • 💵Payouts
        • ➕Get started with payouts!
        • 🔗Process payouts using saved payment methods
        • 🛣️Route your payout transactions using Smart Router
        • ♻️Smart Retries in Payout
        • 🔗Payout links
      • 0️ 0️ 0️ Zero Amount Authorization
      • 🔓Tokenization & saved cards
      • 🔗Payment links
      • ⏭️External Authentication for 3DS
      • 💰Manual Capture
      • 🛑Fraud Blocklist
      • 🔁Subscriptions
      • 🔃PG Agnostic Recurring Payments
    • 🕹️Merchant controls
      • 🛣️Smart Router
        • Rule Based Routing
        • Volume Based Routing
        • Default Fallback Routing
      • 🛡️Fraud & risk management
      • 🔃Smart retries
      • 🎛️Analytics & operations
      • 📋3DS decision manager
        • Setup guide
      • 📋Surcharge
        • Surcharge Setup guide
      • 🔼3DS Step-up retries
      • 🚩Disputes/Chargebacks Management
      • 🤝Reconciliation
        • Getting Started with Recon
    • 🔑Account management
      • 🔢Exporting payments data
      • 🤹Multiple accounts & profiles
      • 🛂Manage your team
    • 🛍️E-commerce platform plugins
      • WooCommerce Plugin
        • Setup
        • Compatibility
        • FAQs
  • SECURITY AND COMPLIANCE
    • 🔏Overview
    • 💳PCI Compliance
    • 🔐Data Security
    • 💽GDPR compliance
    • 🕵️Identity and Access Management
  • Learn more
    • 🍡SDK Reference
      • Node
      • React
      • JS
    • 📐PaySwitcher Architecture
      • Router
      • Storage
      • A Payments Switch with virtually zero overhead
    • 🌊Payment flows
Powered by GitBook
On this page
  • Payments 101
  • Payments flow
  • How does Payment flow vary across Payment methods?
  • Use-cases supported by PaySwitcher
  • What are PaymentIntent and PaymentAttempt objects and how do they work in PaySwitcher?
  1. Learn more

Payment flows

Understand the flow of a transaction through PaySwitcher

PreviousA Payments Switch with virtually zero overhead

Last updated 11 months ago

This chapter will cover the payment flows available with PaySwitcher. Please reach out to us to learn more about the payment flows supported!

If you're complete beginner to Digital Payments, take a look at this blog to get familiar with terminologies.

Payments flow

There are multiple stages in a Payment flow depending on the payment methods that are involved. Considering an one-time payment method where there was no redirection involved, the following stages form the Payment flow:

a) Creating a Payment: When your customer wants to checkout, create a payment by hitting the payments/create endpoint. Fetch and store the payment_id and client_secret

b) Loading the SDK: After your customer checks out, load the PaySwitcher SDK by initiating it with the client_secret and publishable_key

c) SDK being rendered: After you initiate the SDK, the SDK makes several API calls involving the /sessions and /payment_methods endpoints to load relevant payment methods and any saved cards associated with the customer

d) Customer enters the payment method data: After the SDK is fully rendered, your customer would choose a payment method and enter the relevant information and click pay

e) Confirming the payment: After the customer clicks pay, the SDK calls the payments/confirm endpoint with the customer's payment method details and post response, it displays the payment status

Here's a more detailed version of the payment flow:

How does Payment flow vary across Payment methods?

Customer Action
Direct/Redirect flows
Payment- finalized immediately
Payment- finalized later

Customer action required before payments/ confirm

Within PaySwitcher SDK

  • Non 3DS Cards

  • Bank Debits like ACH Debit, BACS Debit, SEPA Debit

Customer action required before payments/ confirm

3rd party Redirect/SDK

  • Wallets like Apple Pay, Google pay, Paypal, AliPay

  • BNPL like Klarna, Afterpay, Affirm

Customer action required after payments/ confirm

3rd party Redirect

  • 3DS cards

  • Bank Redirects like iDeal, Giropay, eps

  • Bank Transfers like ACH Transfer, SEPA Transfer, BACS Transfer, Multibanco

  • Crypto wallets like Cryptopay

Use-cases supported by PaySwitcher

What are PaymentIntent and PaymentAttempt objects and how do they work in PaySwitcher?

PaySwitcher uses the PaymentIntent object to track the status of a payment initiated by you. Since, PaySwitcher enables retrying a single payment multiple times across different processors until a successful transaction, we track each of these payment attempts through separate PaymentAttempt objects.

While PaymentIntent and PaymentAttempt have their own state machines, the various states in PaymentAttempt are also constrained by their respective mapping to the PaymentIntent statuses.

PaymentIntent state machine:

The following is an abridged version of the PaymentIntent state machine flow that covers majority of the above payment use-cases.

%%{
  init: {
    'theme': 'forest',
    'themeVariables': {
      'fontSize': '14px',
      'background': '#17202A'
}
  }
}%%

flowchart TD

A{PaymentsAPI} --> |amount,currency|RequiresPaymentMethod
    RequiresPaymentMethod -->|payment_method| RequiresConfirmation
    RequiresConfirmation --> |confirm| Processing
    Processing --> AuthType{auth type\nselection}
    AuthType --> |3ds| RequiresCustomerAction
    AuthType --> |no-3ds| CaptureMethod{capture method\nselection}

    CaptureMethod --> |manual| RequiresCapture
    CaptureMethod --> |automatic| Succeeded
    RequiresCustomerAction --> CustomerAction{customer_action\nresult}
    CustomerAction -->|success| CaptureMethod
    CustomerAction -->|failure| Failed

    RequiresCapture --> |capture|Succeeded
 

PaymentAttempt state machine:

The following is an abridged version of the PaymentAttempt state machine flow that covers majority of the above payment use-cases.

%%{
  init: {
    'theme': 'forest',
    'themeVariables': {
      'fontSize': '16px',
      'background': '#17202A'
}
  }
}%%


flowchart TD

    AuthenticationFailed
    AuthenticationPending
    AuthenticationSuccessful
    Authorized
    AuthorizationFailed
    Charged
    Voided
    CaptureInitiated
    CaptureFailed
    Pending
    PaymentMethodAwaited
    ConfirmationAwaited
    DeviceDataCollectionPending

    A{PaymentsAPI} --> |amount,currency|PaymentMethodAwaited
    PaymentMethodAwaited -->|payment_method| ConfirmationAwaited
    ConfirmationAwaited --> |confirm| Pending

    %% Before calling the connector change status to Pending
    Pending --> CallConnector{CallConnector}
    CallConnector -->|Success| AuthType{auth_type}
    CallConnector -->|Fail| AuthorizationFailed
    AuthType --> |no-3ds| CaptureMethod{capture_method} 
    AuthType --> |3ds| DeviceDataCollectionPending
    DeviceDataCollectionPending --> |CollectDeviceData|AuthenticationPending --> Authenticate{Authenticate}
    Authenticate --> |Success| AuthenticationSuccessful --> CaptureMethod{capture method}
    Authenticate --> |Failure| AuthenticationFailed
    
    %% Capture
    CaptureMethod --> |automatic| Charged
    CaptureMethod --> |manual| Authorized

    Authorized --> |capture| CaptureInitiated --> Capture{Capture at connector}
    Capture -->|Success| Charged
    Capture -->|Failed| CaptureFailed

    %% Payment can be voided after calling the connector but not charged
    %% This will not void the payment at connector
    DeviceDataCollectionPending -->|void| Voided
    AuthenticationPending -->|void| Voided

    %% Voiding a payment after it is Authorized will void at connector
    Authorized -->|void|Voided
🌊
Payments 101
Payments 101
Cover

Accept online payments

Get started with accepting one time payments globally on your online store

Cover

Setup mandates & recurring payments

Setup payments for a future date or charge your customers on a recurring basis

Cover

Manage payouts

Facilitate payouts for global network of partners and service providers

Cover

Save a card during payment

Learn how you can save your customers' cards in a secure PCI compliant manner

Cover

Manage payments on your platform / marketplace

Accept payments from your customers and process payouts to the sellers on your marketplace

Cover

Accept payments on your e-commerce platform

Give your Wordpress store a lightweight and embedded payment experience with the PaySwitcher WooCommerce plugin

Cover

Create payment links

Accept payments for your products through reusable links without writing any code