agricole
Sign up

Understand 3-D Secure statuses

To help you keep track of your transactions and their 3-D Secure status, it is important to differentiate between a transactions': 

  • 3-D Secure status: The result of the authentication check provided by your customer’s issuer. We return this result in property paymentOutput.cardPaymentMethodSpecificOutput.threeDSecureResults.eci in GetPayment/GetPaymentDetails requests
  • Global transaction status: The result of the authorisation request provided by your acquirer for the gross amount (as defined in your CreatePayment/CreateHostedCheckout request in property order.amountOfMoney.amount). We return this result in property statusOutput.statusCode. Learn more about the global transaction status and all possible outcomes

The table below gives you a full overview of possible scenarios and how our platform displays them to you:

3-D Secure status GetPayment/GetPaymentDetails
in property eci
Transaction status GetPayment/GetPaymentDetails
in property statusCode
Description
5 Depending on the authorisation result by your acquirer either
2
5
9
Your customers have passed the authentication (via a challenge or frictionless flow). In case of fraudulent chargebacks, the issuer is liable

6
12

Depending on the authorisation result by your acquirer either
2
5
9
Your customers did not have the opportunity to perform the authentication check.
In case of fraudulent chargebacks, the issuer is liable
91 2 Your customers did not pass the authentication check because of i.e. incorrect password/PIN. Our platform does not execute the authorisation step at all, abandoning the transaction
92 2 Authentication was not possible due to a technical error.
Our platform does not execute the authorisation step at all, abondoning the transaction (statusCode=2)
Check property paymentOutput.cardPaymentMethodSpecificOutput.threeDSecureResults.liability in GetPayment/GetPaymentDetails requests to learn about the liability shift for fraudulent transactions. Be aware that this is only an indication, as the definite accountability depends on various factors

Ways to integrate

1Use our SDKs

Use our Server SDKs to seamlessly connect your server environment to the Ingenico Direct platform's Server API. These SDKs simplify the API's functionality with easy-to-use platform-specific objects.

Ruby
PHP
Node.js
Java
Python 3
.NET

2Use our plugins

Our Plugins provide a seamless link between your webshop and our platform. By effectively wrapping our RESTful API, these plugins save you time on writing code and make integration quick and easy.

Shopify
Shopware

TEST

1Test 1

Body 1

TEST SDK Download

2Test 2

Body 2

Integration steps

At one point during the checkout process, you send your customers to our secure payment page. They enter their card details, we send them to your acquirer and provide you with the result.

Check out how the full transaction flow works and what you need to do in each step.

Our Hosted Checkout Page works with all payment methods available on our platform. If your customers choose a redirection payment method, a redirection to acquirer/issuer does not take place. Instead, your customers are redirected to the third-party provider.

Target endpoint URLs in test / live

Our platform allows you to send requests either to our Test environment or Live environment:

  • Endpoint URL TEST: MERCHANT_ID/hostedcheckouts
  • Endpoint URL LIVE: MERCHANT_ID/hostedcheckouts

If you are using our Server SDKs, your application will automatically target the respective environment / integration mode URL via instances of CommunicatorConfiguration / IClient / CreateHostedCheckoutRequest. Detailed information about how you can achieve this are available in the next chapter, including full code samples.

Understand payment flow

Our Server SDKs come with a HostedCheckoutAPI. It includes all the methods you need to perform all the steps of a typical payment flow:

  1. Your customers go to your check-out page and finalises the purchase
  2. You send a CreateHostedCheckout request to us. Use the following code sample for the request:

This minimal example populates only object order/hostedCheckoutSpecificInput. Check out our full API reference what other objects/properties are available.

  1. Our platform sends a response in the instance of CreateHostedCheckoutResponse you created upon your request. It contains a partialRedirectionURL property
    // Properties of createHostedCheckoutResponse
    {
        "RETURNMAC": "12345678-90ab-cdef-1234-567890abcdef",
        "hostedCheckoutId": "123456",
        "merchantReference": "7e21badb48fe45848bbc1efef2a88504",
        "partialRedirectUrl": "hostedcheckout/PaymentMethods/Selection/e61340e579e04172a740676ffdda162e"
        "redirectUrl": "https://payment.hostedcheckout/PaymentMethods/Selection/e61340e579e04172a740676ffdda162e"
    }
    
  2. You redirect the customers in the browser using the formula https://payment. + PartialRedirectUrl or use the full path from property redirectUrl

    Construct this URL using the CreateHostedCheckoutResponse object

    The customer enter their card number in the payment mask on the PartialRedirectUrl / redirectUrl and confirm the payment

    4'. (Optional): We perform a Fraud check
  1. We redirect the customer to her/his issuing bank for 3-D Secure authentication. The cardholder identifies herself/himself
If you have preselected a redirection payment method, the URL redirects your customers to the third-party provider instead
  1. Our system receives the result from the issuer. Based on the result, two scenarios are possible:
  2. We submit the actual financial transaction to the acquirer to process it. We receive the transaction result

  3. We redirect your customers to your ReturnUrl

  4. You request the transaction result from our platform. Use an instance of GetHostedCheckoutResponse and pass the HostedCheckoutId from the response to target the transaction you have just created. From the moment on we have sent a HostedCheckoutId, you can request the result for three hours. After that, our platform deletes the HostedCheckoutId.

    If your customers have not finished entering their card credentials yet and/or we have not received a final result from your acquirer, property hostedCheckoutStatus.CreatedPaymentOutput.PaymentStatusCategory is null:

    {
      "CreatedPaymentOutput": {},
      "Status": "PAYMENT_CREATED"
    }
    


    As soon as we have received a result, this property contains a result that looks like this:

    {
      "CreatedPaymentOutput": {
        "Payment": {
          "HostedCheckoutSpecificOutput": {
            "HostedCheckoutId": "3104703806"
          },
          "Id": "3104703806_0",
          "PaymentOutput": {
            "AmountOfMoney": {
              "Amount": 100,
              "CurrencyCode": "EUR"
            },
          },
          "Status": "CAPTURED",
          "StatusOutput": {
    		.
    		.
    		.
            "StatusCode": 9
          }
        },
        "PaymentStatusCategory": "SUCCESSFUL"
      },
      "Status": "PAYMENT_CREATED"
    }
    

You can also receive the result via webhooks or a PaymentResponse call. Mind that GetPayment accepts a PAYIDSUB instead of a HostedCheckoutId, which is a HostedCheckoutId plus numeric step indicating the PAYIDSUB's order in the transaction's life cycle. "_0" refers to the first step in the transaction life cycle, thus the initial step when creating the transaction:

  1. If the transaction was successful, you can deliver the goods / services

Was this page helpful?

Do you have any comments?

Thank you