If you are using Android Drop-in v5.0.0 or later:
This payment method requires no additional configuration.
Follow the Drop-in integration guide.
Our Android Drop-in renders Bancontact in your payment form, and redirects the shopper to the Bancontact app to complete the payment.
Requirements
Requirement | Description |
---|---|
Integration type | Make sure that you have built your Android Drop-in integration. |
Setup steps | Before you begin:
|
Show Bancontact in your payment form
Drop-in uses the countryCode
and the amount.currency
from the /paymentMethods request to show the available payment methods to your shopper.
To show Bancontact in your payment form, specify in your /paymentMethods request:
- countryCode: BE.
- amount.currency: EUR.
Optional configuration
When you create the Bancontact configuration object, you can optionally add configuration parameters.
val bcmcConfiguration = BcmcConfiguration.Builder(context, "YOUR_CLIENT_KEY") // Makes the cardholder name required. .setHolderNameRequired(true) // When you are ready to accept live payments, change the value to one of our live environments. .setEnvironment(Environment.TEST) .build()
Make a payment
When the shopper proceeds to pay, Drop-in returns the paymentComponentData.paymentMethod
.
-
Pass the
paymentComponentData.paymentMethod
to your server. -
From your server, make a /payments request, specifying:
paymentMethod
: ThepaymentComponentData.paymentMethod
from your client app.returnURL
: URL to where the shopper should be redirected back to after they complete the payment. Get this URL from the Component in theRedirectComponent.getReturnUrl(context)
.
Expand viewCopy link to code blockCopy codecurl https://checkout-test.adyen.com/checkout/v68/payments \ -H 'x-api-key: ADYEN_API_KEY' \ -H 'content-type: application/json' \ -d '{ "merchantAccount":"ADYEN_MERCHANT_ACCOUNT", "reference":"YOUR_ORDER_NUMBER", "amount":{ "currency":"EUR", "value":1000 }, "paymentMethodpaymentComponentData.paymentMethod from app":{ "type":"bcmc_mobile" }, "returnUrl":"adyencheckout://your.package.name" }' The /payments response contains:
action
: Object containing information about the redirect.
/payments responseExpand viewCopy link to code blockCopy code{ "resultCode": "Pending", "action": { "paymentData": "Ab02b4c0!BQABAgCpM2q6...==", "paymentMethodType": "bcmc_mobile", "url": "https://checkoutshopper-test.adyen.com/checkoutshopper/checkoutPaymentRedirect?redirectData=...", "qrCodeData": "BEP://1bcmc-test.adyen.com/pal/bep$RYB4BPBNXDTVG3PLKTXV5OVE", "type": "qrCode" }, "additionalData": { "bcmcmobile.urlIntent": "BEPGenApp://DoTx?TransId=1bcmc-test.adyen.com/pal/bep$P5..." } -
Pass the
action
object to your client app. Drop-in needs this to redirect the shopper to the Bancontact app.
Check the payment result
Drop-in redirects the shopper to complete the payment. When the shopper returns back to your app, Drop-in provides the actionComponentData
object.
From your server, make a POST /payments/details request providing:
details
: TheactionComponentData.details
object from Drop-in.
curl https://checkout-test.adyen.com/checkout/v68/payments/details \ -H 'x-api-key: ADYEN_API_KEY' \ -H 'content-type: application/json' \ -d '{ "details": { "redirectResult": "eyJ0cmFuc1N0YXR1cyI6IlkifQ==" } }'
You receive a response containing:
resultCode
: Use this to present the payment result to your shopper.pspReference
: Our unique identifier for the transaction.
{ "resultCode": "Authorised", "pspReference": "PPKFQ89R6QRXGN82" }
Present the payment result
Use the resultCode from the /payments/details response to present the payment result to your shopper. You will also receive the outcome of the payment asynchronously in a webhook.
For Bancontact payments, you can receive the following resultCode
values:
resultCode | Description | Action to take |
---|---|---|
Authorised | The payment was successful. | Inform the shopper that the payment was successful. |
Cancelled | The shopper cancelled the payment. | Ask the shopper whether they want to continue with the order, or ask them to select a different payment method. |
Error | There was an error when the payment was being processed. For more information, check the
refusalReason
field. |
Inform the shopper that there was an error processing their payment. |
Pending or Received |
The payment order was successfully received. | Inform the shopper that you have received their order, and are waiting for the payment to clear. You will receive the final result of the payment in an AUTHORISATION webhook. |
Refused | The payment was refused. For more information, check the
refusalReason
field. |
Ask the shopper to try the payment again using a different payment method. |
Recurring payments
Bancontact supports tokenization for recurring payments.
We strongly recommend that you ask explicit permission from the shopper if you intend to make future recurring payments. Being transparent about the payment schedule and the charged amount reduces the risk of SEPA Direct Debit chargebacks.
You can use recurring transactions through the Bancontact Wallet Initiated Program (WIP) and SEPA Direct Debit.
Bancontact Wallet Initiated Program
The Bancontact Wallet Initiated Program (WIP) is a service that streamlines checkout and supports subscription-based billing. It offers the following:
- Bancontact One-Click Pay to speed up checkout and boost conversion rates
- Bancontact Recurring to support merchant-initiated recurring or subscription payments
You have to sign up to be able to use this service and not all companies are eligible to use Bancontact WIP. To enable Bancontact WIP, contact our Support Team.
When you enable Bancontact WIP, transaction amount limits apply to ensure controlled and secure payments.
Shoppers go through Strong Customer Authentication (SCA) one time when they complete their first transaction and give their consent. Subsequent transactions do not require SCA, which reduces friction and improves the checkout flow. Because the transaction goes through SCA, there is a liability shift.
Make a recurring payment
To make recurring payments, you need to:
Bancontact recurring payments are not available in the test environment. To test your integration, do a penny test in the live environment instead.Create a token
To create a token, include in your /sessions or /payments request:
storePaymentMethod
: true- shopperReference: Your unique identifier for the shopper (minimum length three characters).
When the payment has been settled, you receive a webhook containing:
eventCode
: RECURRING_CONTRACToriginalReference
: ThepspReference
of the initial payment.pspReference
: This is the token that you need to make recurring payments for this shopper.
Make sure that your server is able to receive RECURRING_CONTRACT as part of your standard webhooks. You can enable the RECURRING_CONTRACT event code in the webhook settings page.
Make a payment with a token
To make a payment with the token, include in your /payments request:
paymentMethod.storedPaymentMethodId
: ThepspReference
from the RECURRING_CONTRACT. You can also get this value by using the /listRecurringDetails endpoint.shopperReference
: The unique shopper identifier that you specified when creating the token.shopperInteraction
: ContAuth.recurringProcessingModel
: Subscription or UnscheduledCardOnFile.
For more information about the shopperInteraction
and recurringProcessingModel
fields, refer to Tokenization.
The following example shows a recurring Subscription payment using SEPA Direct Debit.
curl https://checkout-test.adyen.com/checkout/v68/payments \ -H 'x-api-key: ADYEN_API_KEY' \ -H 'content-type: application/json' \ -d '{ "amount":{ "value":1000, "currency":"EUR" }, "paymentMethod":{ "type":"sepadirectdebit", "recurringDetailReference":"7219687191761347" }, "reference":"YOUR_ORDER_NUMBER", "merchantAccount":"YOUR_MERCHANT_ACCOUNT", "shopperReference":"YOUR_UNIQUE_SHOPPER_ID_IOfW3k9G2PvXFu2j", "shopperInteraction":"ContAuth", "recurringProcessingModel": "Subscription" }'
Test and go live
Bancontact does not have a test platform, but you can simulate authorized or declined payments.
To simulate authorized or declined payments, make a test payment using the following last three digits for the payment amount:
Amount ending in | Description | Result |
---|---|---|
000 | Simulates an approved transaction within fifteen seconds. | Authorised |
123 | Simulates a refused transaction within fifteen seconds. | Refused |
Any other scenarios must be tested in the live environment using real payment details and small amounts.
Before you can accept live payments, you need to submit a request for Bancontact in your live Customer Area.