• Documentation
  • API Reference
  • Documentation
  • API Reference
Expand All Collapse All
  • Payment Overview
    • Introduction
    • Choosing an Integration Method
  • Accept Payment
    • Payment Page
      • Quick Start
      • Input Parameters
      • Output Parameters
    • Web SDK
      • Quick Start
      • Nuvei Fields
        • Styling
      • Additional Functions
      • APM Payments
      • Tokenization-Only Flow
      • Scenarios
      • Using ReactJS
        • Full Samples
        • Sandbox Examples
      • FAQs
    • Checkout
      • Quick Start
      • UI Customization
      • Payment Customization
      • Advanced Controls
      • Checkout Examples
    • Server-to-Server
    • Payment Scenarios
    • Mobile SDKs (Beta Release)
      • Android Mobile SDK (Beta Release)
      • iOS Mobile SDK (Beta Release)
    • Flow Diagrams
    • Plugins
      • Magento
        • Rebilling with Magento
      • WooCommerce
        • Rebilling with WooCommerce
      • PrestaShop
        • Rebilling with PrestaShop
      • OpenCart
      • Shopify (via AsiaBill)
      • Mirakl
      • Salesforce
      • SAP
      • WIX
    • Marketplaces
  • Features
    • Authentication
    • Financial Operations
      • Refund
      • Void
      • Auth and Settle
      • Partial Approval
      • Currency Conversion (DCC and MCP)
    • Card Operations
      • Card-on-File
      • PCI and Tokenization
      • Zero-Authorization
      • Merchant-Initiated Transactions (MIT)
      • Blocking Cards
    • Subscription (Rebilling)
    • 3D-Secure
      • 3D-Secure Explained
      • 3DS Implementations
        • 3DS MPI-Only Web SDK
        • 3DS MPI-Only REST
        • 3DS External MPI
        • 3DS Responses
      • 3DS Functions
        • 3D-Secure Fingerprinting
        • 3D-Secure Authentication Challenge
    • Callbacks (DMNs)
      • Configuring the Events API
  • Guides
    • Testing Cards, APIs and APMs
      • Testing Cards
      • Testing APIs with Postman
      • Testing APMs
    • Response Handling
    • Alternative Payment Guides (APMs)
    • Airline Ticket Guides
      • Airline Addendum
      • External Authorization Addendum
    • Payment Facilitators (PayFac)
    • Cashier
      • Cashier Events Guide
      • Cashier Features
    • Withdrawal Guide
    • Risk Guide
      • Appendix 1: Transaction Types
      • Appendix 2: Credits and Payouts
      • Appendix 3: Fraud to Sale Programs
      • Appendix 4: Compliance Programs
      • Appendix 5: Chargebacks
    • eKYC Guide
    • Server SDKs
      • Java SDK
      • .NET SDK
      • PHP SDK
      • Node.JS SDK
    • Fast Track Onboarding Developer Guide
    • Currency Conversion Guides
      • Multiple Currency Pricing (MCP)
      • Dynamic Currency Conversion (DCC)
        • DCC in Cashier or Payment Page
        • DCC in REST API Workflows
        • DCC in Web SDK Workflows
    • Website Compliance Guides
  • Additional Links
    • FAQs
    • API Reference
    • Release Notes
    • Country and Currency Codes

Flow Diagrams

On this page:
  • Overview
  • Web SDK Flow
  • 3D-Secure MPI-Only Flow for Web SDK
  • Server-to-Server Flow

Overview

The following summarized high-level Nuvei payment flows are described in this topic:

  • Web SDK Flow
  • 3D-Secure MPI-Only Flow for Web SDK
  • Server-to-Server Flow

Web SDK Flow

This is the basic Web SDK flow. In most cases it is “best practice” to implement this flow.

To see the full implementation steps with examples, refer to the Quick Start for Web SDK and the Nuvei Fields guides.

Summary of the Web SDK Flow

The process starts when the customer decides to make a payment:

  1. From your backend, you need to initiate the flow by posting the /openOrder API. In addition to passing the authentication credentials, you must also pass amount and currency.
    The /openOrder method retrieves the sessionToken that authenticates for this session.
  2. From your front end, you need to initiate the Web SDK. Use the Nuvei Fields guide and the Styling guide to set them up in your payment form.
  3. After the customer enters their payment details on your payment form and submits it for payment, call the Web SDK createPayment() method.
    This method runs the payment flow end-to-end and performs any 3D-Secure requirements – both server-side and client-side.
    The createPayment() method does the following:
    1. Determine and handle the relevant 3D-Secure version (v1 or v2).
    2. Handle the 3D fingerprinting and send the results to the issuer.
    3. If the issuer’s response is not frictionless, then the method redirects to perform the relevant challenge or fallback to 3Dv1.
    4. Returns the 3D-Secure authentication information from the issuer – cavv, eci, etc.

      The cavv is the encrypted authentication result and it cannot be manipulated by the end user. It is safe to use as proof of authentication success or failure.

  4. When the payment process completes, you receive the payment status response. You can display the relevant message to the customer.
    Remember that this is not a verified response.
  5. When your server receives the indication from your client-side (on form submission), you should either:
    • Send a /getPaymentStatus API request to validate the response.

      The /getPaymentStatus can only be called while the session in which the payment was performed is still open. Once the session expires, you receive a “session expired” response.

      The getPaymentStatus method can only be called at the end of payment processing for that payment.
      (You can detect the end of payment processing by monitoring the JavaScript events for the final transaction event.)
      getPaymentStatus is not intended for repeated status polling during the payment processing. Doing so may result in your IP address being blocked.

    • Alternatively, you can set up DMNs in async mode directly to your server.

Web SDK Flow

3D-Secure MPI-Only Flow for Web SDK

The 3D-Secure MPI-Only flow for Web SDK combines Web SDK (for 3D-Secure and PCI descoping) and API for performing the payment itself.

To see the full implementation steps with examples, refer to the 3DS MPI-Only Web SDK implementation.

Summary of the 3D-Secure MPI-Only Flow for Web SDK

  1. From your backend, you need to initiate the flow by posting the /openOrder API. In addition to passing the authentication credentials, you must also pass amount and currency.
    The /openOrder method retrieves the sessionToken, which authenticates for this session.
  2. Initiate the Web SDK from your front end. Embed the relevant Nuvei Fields in your payment form and customize their styling to match your UI/UX.
  3. After the customer enters their payment details on your payment form and submits it for payment, call the Web SDK authenticate3d() method.
    This method does not perform the payment, but it runs the 3D-Secure end-to-end flow and performs any 3D-Secure requirements – both server-side and client-side.
    The authenticate3d() method does the following:
    1. Determine and handle the relevant 3D-Secure version (v1 or v2).
    2. Handle the 3D fingerprinting and send the results to the issuer.
    3. If the issuer’s response is not frictionless, then the method redirects to perform the relevant challenge or fallback to 3Dv1.
    4. Returns the 3D-Secure authentication information from the issuer – cavv, eci, etc.

      The cavv is the encrypted authentication result and it cannot be manipulated by the end user. It is safe to use as proof of authentication success or failure.

  4. When you receive the authentication response from the issuer, you can display the relevant message to the customer.
  5. If the authentication returned success, then continue by sending a liability-shifted /payment API request.

3D-Secure MPI-Only Flow for Web SDK

Server-to-Server Flow

The Server-to-Server flow for accepting payments use the Nuvei Server SDKs (Java, PHP, .NET, Node.JS) and Nuvei APIs.

This Server-to-Server flow is usually not recommended, as it is complex and requires PCI compliance and deep understanding of 3D-Secure.

To see the full implementation steps with examples, refer to the Serve-to-Server implementation.

Summary of the Server-to-Server Flow

    1. From your backend, you need to initiate the flow by posting the /getSessionToken API to pass the authentication credentials.
      This returns a sessionToken that is needed to authenticate subsequent steps in this session.
    2. Call the /initPayment API request to determine the 3D-Secure version and return the methodUrl and other details required for the 3D-Secure fingerprinting.
    3. Perform the 3D-Secure fingerprinting to authenticate the client-side device (see the 3D-Secure Guide for details).
    4. Perform the 3D-Secure payment request by submitting the /payment API request that includes a threeD block.
      If a frictionless response is returned (APPROVED or DECLINED), then display the response to the customer and the payment flow ends here.
    5. If response returns REDIRECT, then either:
      • Redirect to perform a 3D-Secure challenge, or
      • Redirect to a 3Dv1 fallback on your client-side (see the 3D-Secure Guide for details)
    6. If a 3D-Secure challenge was performed and if the issuer approved the payment, then perform a liability-shift payment by sending a /payment call (without a threeD block).
      This returns approved or declined response for the payment, which you can display to the customer.

Server-to-Server Flow

2022 Nuvei. All rights reserved.