Hosted Checkout Page
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 |
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) |
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.
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.
TEST
1Test 1
Body 1
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.
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:
- Your customers go to your check-out page and finalises the purchase
- 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.
- 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" } - 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
- We redirect the customer to her/his issuing bank for 3-D Secure authentication. The cardholder identifies herself/himself
- Our system receives the result from the issuer. Based on the result, two scenarios are possible:
- If the identification was unsuccessful, we redirect your customers to your ReturnUrl, ending the flow. You request the transaction result as described in step 9)
- If the identification was successful, the flow continues at step 7
- We submit the actual financial transaction to the acquirer to process it. We receive the transaction result
- We redirect your customers to your ReturnUrl
- 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:
- If the transaction was successful, you can deliver the goods / services