{"title":"Bancontact card Drop-in integration","category":"default","creationDate":1776961628,"content":"<div class=\"sc-notice info\"><div>\n<p><strong>If you are using Android Drop-in v5.0.0 or later:<\/strong><\/p>\n<p>This payment method requires no additional configuration.<\/p>\n<p>Follow the  <a href=\"\/pt\/online-payments\/build-your-integration\/sessions-flow?platform=Android&amp;integration=Drop-in\">Drop-in integration guide<\/a>.<\/p>\n<\/div><\/div>\n<p>A Bancontact card payment is like a regular <a href=\"\/pt\/payment-methods\/cards\">card payment<\/a>, except for the following:<\/p>\n<ul>\n<li>There is no CVC. For co-badged cards, the CVC field can still appear.<\/li>\n<li><a href=\"\/pt\/online-payments\/3d-secure\">3D Secure authentication<\/a> is mandatory.<\/li>\n<li>Separate captures are not supported.<\/li>\n<\/ul>\n<p>Our <a href=\"\/pt\/online-payments\/build-your-integration\/sessions-flow?platform=Android&amp;integration=Drop-in\">Android Drop-in<\/a> renders the Bancontact card in your payment form, securely collects sensitive card information, and redirects the shopper to the issuer's website to perform 3D Secure authentication.<\/p>\n<p>When making a Bancontact payment, you need to <a href=\"#handle-the-redirect\">handle the redirect result<\/a> when the shopper returns back to your website after performing 3D Secure authentication.<\/p>\n<h2>Requirements<\/h2>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Requirement<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><strong>Integration type<\/strong><\/td>\n<td style=\"text-align: left;\">Make sure that you have built an Advanced flow <a href=\"\/pt\/online-payments\/build-your-integration\/advanced-flow\/?platform=Android&amp;integration=Drop-in\">Android Drop-in integration<\/a>. <\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>Setup steps<\/strong><\/td>\n<td style=\"text-align: left;\">Before you begin, <a href=\"\/pt\/payment-methods\/add-payment-methods\">add Bancontact card in your Customer Area<\/a>.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Show Bancontact card in your payment form<\/h2>\n<p>To show Bancontact card in your payment form, specify in your  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/paymentMethods\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/paymentMethods<\/a> request:<\/p>\n<ul>\n<li> <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/paymentMethods\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">countryCode<\/a>&#58; <span translate=\"no\"><strong>BE<\/strong><\/span><\/li>\n<li> <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/paymentMethods#request-amount\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">amount.currency<\/a>&#58; <span translate=\"no\"><strong>EUR<\/strong><\/span><\/li>\n<\/ul>\n<h3>Optional configuration<\/h3>\n<p>When <a href=\"\/pt\/online-payments\/build-your-integration\/sessions-flow\/?platform=Android&amp;integration=Drop-in#set-up\">creating an instance of Drop-in<\/a>, you can optionally include a <a href=\"https:\/\/adyen.github.io\/adyen-android\/bcmc\/com.adyen.checkout.bcmc\/-bcmc-configuration\/index.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">\n  <code>BcmcConfiguration<\/code>\n<\/a> object to add custom configuration for Bancontact in your payment form.<\/p>\n<p>The following example shows how to configure Drop-in to make the cardholder name for Bancontact required :<\/p>\n<pre><code class=\"language-kotlin\">\/\/ Optional. You can add this if you need any custom configuration for the component.\nval bcmcConfiguration = BcmcConfiguration.Builder(context, \"YOUR_CLIENT_KEY\")\n    \/\/ When you are ready to accept live payments, change the value to one of our live environments.\n    .setEnvironment(Environment.TEST)\n    .build()\n\nval dropInConfiguration = DropInConfiguration.Builder(context, YourDropInService::class.java, \"YOUR_CLIENT_KEY\")\n     \/\/ When you are ready to accept live payments, change the value to one of our live environments.\n     .setEnvironment(Environment.TEST)\n     .addBcmcConfiguration(bcmcConfiguration)\n     .build()<\/code><\/pre>\n<h2 id=\"make-a-payment\">Make a payment<\/h2>\n<p>When the shopper proceeds to pay, Drop-in returns the <code>paymentComponentData.paymentMethod<\/code>.<\/p>\n<ol>\n<li>Pass the <code>paymentComponentData<\/code> to your server.<\/li>\n<li>From your server, make a  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/payments<\/a> request, specifying:\n<ul>\n<li><code>paymentMethod<\/code>: The <code>paymentComponentData.paymentMethod<\/code> from your client app.<\/li>\n<li><code>channel<\/code>: <span translate=\"no\"><strong>Android<\/strong><\/span><\/li>\n<li><code>returnURL<\/code>:\u00a0The URL where the shopper will be redirected back to after completing 3D Secure 1 authentication. Get this URL from Drop-in in the <code>RedirectComponent.getReturnUrl(context)<\/code>.<\/li>\n<\/ul><\/li>\n<\/ol>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"''\" :id=\"'bcmc-android-dropin-payments'\" :code-data=\"[{&quot;language&quot;:&quot;bash&quot;,&quot;tabTitle&quot;:&quot;curl&quot;,&quot;content&quot;:&quot;curl https:\\\/\\\/checkout-test.adyen.com\\\/v68\\\/payments \\\\\\n-H 'x-api-key: ADYEN_API_KEY' \\\\\\n-H 'content-type: application\\\/json' \\\\\\n-d '{\\n      \\&quot;amount\\&quot;:{\\n        \\&quot;currency\\&quot;:\\&quot;EUR\\&quot;,\\n        \\&quot;value\\&quot;:1000\\n      },\\n      \\&quot;reference\\&quot;:\\&quot;YOUR_ORDER_NUMBER\\&quot;,\\n      \\&quot;{hint:paymentComponentData.paymentMethod from app}paymentMethod{\\\/hint}\\&quot;: {\\n        \\&quot;type\\&quot;: \\&quot;scheme\\&quot;,\\n        \\&quot;encryptedCardNumber\\&quot;: \\&quot;adyenjs_0_1_18$MT6ppy0FAMVMLH...\\&quot;,\\n        \\&quot;encryptedExpiryMonth\\&quot;: \\&quot;adyenjs_0_1_18$MT6ppy0FAMVMLH...\\&quot;,\\n        \\&quot;encryptedExpiryYear\\&quot;: \\&quot;adyenjs_0_1_18$MT6ppy0FAMVMLH...\\&quot;\\n      },\\n      \\&quot;returnUrl\\&quot;:\\&quot;adyencheckout:\\\/\\\/your.package.name\\&quot;,\\n      \\&quot;merchantAccount\\&quot;:\\&quot;ADYEN_MERCHANT_ACCOUNT\\&quot;\\n    }'&quot;},{&quot;language&quot;:&quot;java&quot;,&quot;tabTitle&quot;:&quot;Java&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Java API Library v27.0.0\\nimport com.adyen.Client;\\nimport com.adyen.enums.Environment;\\nimport com.adyen.model.checkout.*;\\nimport java.time.OffsetDateTime;\\nimport java.util.*;\\nimport com.adyen.model.RequestOptions;\\nimport com.adyen.service.checkout.*;\\n\\n\\\/\\\/ For the live environment, additionally include your liveEndpointUrlPrefix.\\nClient client = new Client(\\&quot;ADYEN_API_KEY\\&quot;, Environment.TEST);\\n\\n\\\/\\\/ Create the request object(s)\\nAmount amount = new Amount()\\n  .currency(\\&quot;EUR\\&quot;)\\n  .value(1000L);\\n\\nCardDetails cardDetails = new CardDetails()\\n  .encryptedCardNumber(\\&quot;adyenjs_0_1_18$MT6ppy0FAMVMLH...\\&quot;)\\n  .encryptedExpiryYear(\\&quot;adyenjs_0_1_18$MT6ppy0FAMVMLH...\\&quot;)\\n  .encryptedExpiryMonth(\\&quot;adyenjs_0_1_18$MT6ppy0FAMVMLH...\\&quot;)\\n  .type(CardDetails.TypeEnum.SCHEME);\\n\\nPaymentRequest paymentRequest = new PaymentRequest()\\n  .reference(\\&quot;YOUR_ORDER_NUMBER\\&quot;)\\n  .amount(amount)\\n  .merchantAccount(\\&quot;ADYEN_MERCHANT_ACCOUNT\\&quot;)\\n  .paymentMethod(new CheckoutPaymentMethod(cardDetails))\\n  .returnUrl(\\&quot;adyencheckout:\\\/\\\/your.package.name\\&quot;);\\n\\n\\\/\\\/ Send the request\\nPaymentsApi service = new PaymentsApi(client);\\nPaymentResponse response = service.payments(paymentRequest, new RequestOptions().idempotencyKey(\\&quot;UUID\\&quot;));&quot;},{&quot;language&quot;:&quot;php&quot;,&quot;tabTitle&quot;:&quot;PHP&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen PHP API Library v19.0.0\\nuse Adyen\\\\Client;\\nuse Adyen\\\\Environment;\\nuse Adyen\\\\Model\\\\Checkout\\\\Amount;\\nuse Adyen\\\\Model\\\\Checkout\\\\CheckoutPaymentMethod;\\nuse Adyen\\\\Model\\\\Checkout\\\\PaymentRequest;\\nuse Adyen\\\\Service\\\\Checkout\\\\PaymentsApi;\\n\\n$client = new Client();\\n$client-&gt;setXApiKey(\\&quot;ADYEN_API_KEY\\&quot;);\\n\\\/\\\/ For the live environment, additionally include your liveEndpointUrlPrefix.\\n$client-&gt;setEnvironment(Environment::TEST);\\n\\n\\n\\\/\\\/ Create the request object(s)\\n$amount = new Amount();\\n$amount\\n  -&gt;setCurrency(\\&quot;EUR\\&quot;)\\n  -&gt;setValue(1000);\\n\\n$checkoutPaymentMethod = new CheckoutPaymentMethod();\\n$checkoutPaymentMethod\\n  -&gt;setEncryptedCardNumber(\\&quot;adyenjs_0_1_18\\\\$MT6ppy0FAMVMLH...\\&quot;)\\n  -&gt;setEncryptedExpiryYear(\\&quot;adyenjs_0_1_18\\\\$MT6ppy0FAMVMLH...\\&quot;)\\n  -&gt;setEncryptedExpiryMonth(\\&quot;adyenjs_0_1_18\\\\$MT6ppy0FAMVMLH...\\&quot;)\\n  -&gt;setType(\\&quot;scheme\\&quot;);\\n\\n$paymentRequest = new PaymentRequest();\\n$paymentRequest\\n  -&gt;setReference(\\&quot;YOUR_ORDER_NUMBER\\&quot;)\\n  -&gt;setAmount($amount)\\n  -&gt;setMerchantAccount(\\&quot;ADYEN_MERCHANT_ACCOUNT\\&quot;)\\n  -&gt;setPaymentMethod($checkoutPaymentMethod)\\n  -&gt;setReturnUrl(\\&quot;adyencheckout:\\\/\\\/your.package.name\\&quot;);\\n\\n$requestOptions['idempotencyKey'] = 'UUID';\\n\\n\\\/\\\/ Send the request\\n$service = new PaymentsApi($client);\\n$response = $service-&gt;payments($paymentRequest, $requestOptions);&quot;},{&quot;language&quot;:&quot;cs&quot;,&quot;tabTitle&quot;:&quot;C#&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen .net API Library v17.0.0\\nusing Adyen;\\nusing Environment = Adyen.Model.Environment;\\nusing Adyen.Model;\\nusing Adyen.Model.Checkout;\\nusing Adyen.Service.Checkout;\\n\\n\\\/\\\/ For the live environment, additionally include your liveEndpointUrlPrefix.\\nvar config = new Config()\\n{\\n    XApiKey = \\&quot;ADYEN_API_KEY\\&quot;,\\n    Environment = Environment.Test\\n};\\nvar client = new Client(config);\\n\\n\\\/\\\/ Create the request object(s)\\nAmount amount = new Amount\\n{\\n  Currency = \\&quot;EUR\\&quot;,\\n  Value = 1000\\n};\\n\\nCardDetails cardDetails = new CardDetails\\n{\\n  EncryptedCardNumber = \\&quot;adyenjs_0_1_18$MT6ppy0FAMVMLH...\\&quot;,\\n  EncryptedExpiryYear = \\&quot;adyenjs_0_1_18$MT6ppy0FAMVMLH...\\&quot;,\\n  EncryptedExpiryMonth = \\&quot;adyenjs_0_1_18$MT6ppy0FAMVMLH...\\&quot;,\\n  Type = CardDetails.TypeEnum.Scheme\\n};\\n\\nPaymentRequest paymentRequest = new PaymentRequest\\n{\\n  Reference = \\&quot;YOUR_ORDER_NUMBER\\&quot;,\\n  Amount = amount,\\n  MerchantAccount = \\&quot;ADYEN_MERCHANT_ACCOUNT\\&quot;,\\n  PaymentMethod = new CheckoutPaymentMethod(cardDetails),\\n  ReturnUrl = \\&quot;adyencheckout:\\\/\\\/your.package.name\\&quot;\\n};\\n\\n\\\/\\\/ Send the request\\nvar service = new PaymentsService(client);\\nvar response = service.Payments(paymentRequest, requestOptions: new RequestOptions { IdempotencyKey = \\&quot;UUID\\&quot;});&quot;},{&quot;language&quot;:&quot;js&quot;,&quot;tabTitle&quot;:&quot;NodeJS (JavaScript)&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Node API Library v18.0.0\\n\\\/\\\/ Require the parts of the module you want to use\\nconst { Client, CheckoutAPI } = require('@adyen\\\/api-library');\\n\\\/\\\/ Initialize the client object\\n\\\/\\\/ For the live environment, additionally include your liveEndpointUrlPrefix.\\nconst client = new Client({apiKey: \\&quot;ADYEN_API_KEY\\&quot;, environment: \\&quot;TEST\\&quot;});\\n\\n\\\/\\\/ Create the request object(s)\\nconst paymentRequest = {\\n  amount: {\\n    currency: \\&quot;EUR\\&quot;,\\n    value: 1000\\n  },\\n  reference: \\&quot;YOUR_ORDER_NUMBER\\&quot;,\\n  paymentMethod: {\\n    type: \\&quot;scheme\\&quot;,\\n    encryptedCardNumber: \\&quot;adyenjs_0_1_18$MT6ppy0FAMVMLH...\\&quot;,\\n    encryptedExpiryMonth: \\&quot;adyenjs_0_1_18$MT6ppy0FAMVMLH...\\&quot;,\\n    encryptedExpiryYear: \\&quot;adyenjs_0_1_18$MT6ppy0FAMVMLH...\\&quot;\\n  },\\n  returnUrl: \\&quot;adyencheckout:\\\/\\\/your.package.name\\&quot;,\\n  merchantAccount: \\&quot;ADYEN_MERCHANT_ACCOUNT\\&quot;\\n}\\n\\n\\\/\\\/ Send the request\\nconst checkoutAPI = new CheckoutAPI(client);\\nconst response = checkoutAPI.PaymentsApi.payments(paymentRequest, { idempotencyKey: \\&quot;UUID\\&quot; });&quot;},{&quot;language&quot;:&quot;go&quot;,&quot;tabTitle&quot;:&quot;Go&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Go API Library v10.4.0\\nimport (\\n  \\&quot;context\\&quot;\\n  \\&quot;github.com\\\/adyen\\\/adyen-go-api-library\\\/v9\\\/src\\\/common\\&quot;\\n  \\&quot;github.com\\\/adyen\\\/adyen-go-api-library\\\/v9\\\/src\\\/adyen\\&quot;\\n  \\&quot;github.com\\\/adyen\\\/adyen-go-api-library\\\/v9\\\/src\\\/checkout\\&quot;\\n)\\n\\\/\\\/ For the live environment, additionally include your liveEndpointUrlPrefix.\\nclient := adyen.NewClient(&amp;common.Config{\\n  ApiKey:      \\&quot;ADYEN_API_KEY\\&quot;,\\n  Environment: common.TestEnv,\\n})\\n\\n\\\/\\\/ Create the request object(s)\\namount := checkout.Amount{\\n  Currency: \\&quot;EUR\\&quot;,\\n  Value: 1000,\\n}\\n\\ncardDetails := checkout.CardDetails{\\n  EncryptedCardNumber: common.PtrString(\\&quot;adyenjs_0_1_18$MT6ppy0FAMVMLH...\\&quot;),\\n  EncryptedExpiryYear: common.PtrString(\\&quot;adyenjs_0_1_18$MT6ppy0FAMVMLH...\\&quot;),\\n  EncryptedExpiryMonth: common.PtrString(\\&quot;adyenjs_0_1_18$MT6ppy0FAMVMLH...\\&quot;),\\n  Type: common.PtrString(\\&quot;scheme\\&quot;),\\n}\\n\\npaymentRequest := checkout.PaymentRequest{\\n  Reference: \\&quot;YOUR_ORDER_NUMBER\\&quot;,\\n  Amount: amount,\\n  MerchantAccount: \\&quot;ADYEN_MERCHANT_ACCOUNT\\&quot;,\\n  PaymentMethod: checkout.CardDetailsAsCheckoutPaymentMethod(&amp;cardDetails),\\n  ReturnUrl: \\&quot;adyencheckout:\\\/\\\/your.package.name\\&quot;,\\n}\\n\\n\\\/\\\/ Send the request\\nservice := client.Checkout()\\nreq := service.PaymentsApi.PaymentsInput().IdempotencyKey(\\&quot;UUID\\&quot;).PaymentRequest(paymentRequest)\\nres, httpRes, err := service.PaymentsApi.Payments(context.Background(), req)&quot;},{&quot;language&quot;:&quot;py&quot;,&quot;tabTitle&quot;:&quot;Python&quot;,&quot;content&quot;:&quot;# Adyen Python API Library v12.5.1\\nimport Adyen\\n\\nadyen = Adyen.Adyen()\\nadyen.client.xapikey = \\&quot;ADYEN_API_KEY\\&quot;\\n# For the live environment, additionally include your liveEndpointUrlPrefix.\\nadyen.client.platform = \\&quot;test\\&quot; # The environment to use library in.\\n\\n# Create the request object(s)\\njson_request = {\\n  \\&quot;amount\\&quot;: {\\n    \\&quot;currency\\&quot;: \\&quot;EUR\\&quot;,\\n    \\&quot;value\\&quot;: 1000\\n  },\\n  \\&quot;reference\\&quot;: \\&quot;YOUR_ORDER_NUMBER\\&quot;,\\n  \\&quot;paymentMethod\\&quot;: {\\n    \\&quot;type\\&quot;: \\&quot;scheme\\&quot;,\\n    \\&quot;encryptedCardNumber\\&quot;: \\&quot;adyenjs_0_1_18$MT6ppy0FAMVMLH...\\&quot;,\\n    \\&quot;encryptedExpiryMonth\\&quot;: \\&quot;adyenjs_0_1_18$MT6ppy0FAMVMLH...\\&quot;,\\n    \\&quot;encryptedExpiryYear\\&quot;: \\&quot;adyenjs_0_1_18$MT6ppy0FAMVMLH...\\&quot;\\n  },\\n  \\&quot;returnUrl\\&quot;: \\&quot;adyencheckout:\\\/\\\/your.package.name\\&quot;,\\n  \\&quot;merchantAccount\\&quot;: \\&quot;ADYEN_MERCHANT_ACCOUNT\\&quot;\\n}\\n\\n# Send the request\\nresult = adyen.checkout.payments_api.payments(request=json_request, idempotency_key=\\&quot;UUID\\&quot;)&quot;},{&quot;language&quot;:&quot;rb&quot;,&quot;tabTitle&quot;:&quot;Ruby&quot;,&quot;content&quot;:&quot;# Adyen Ruby API Library v9.5.1\\nrequire \\&quot;adyen-ruby-api-library\\&quot;\\n\\nadyen = Adyen::Client.new\\nadyen.api_key = 'ADYEN_API_KEY'\\n# For the live environment, additionally include your liveEndpointUrlPrefix.\\nadyen.env = :test # Set to \\&quot;live\\&quot; for live environment\\n\\n# Create the request object(s)\\nrequest_body = {\\n  :amount =&gt; {\\n    :currency =&gt; 'EUR',\\n    :value =&gt; 1000\\n  },\\n  :reference =&gt; 'YOUR_ORDER_NUMBER',\\n  :paymentMethod =&gt; {\\n    :type =&gt; 'scheme',\\n    :encryptedCardNumber =&gt; 'adyenjs_0_1_18$MT6ppy0FAMVMLH...',\\n    :encryptedExpiryMonth =&gt; 'adyenjs_0_1_18$MT6ppy0FAMVMLH...',\\n    :encryptedExpiryYear =&gt; 'adyenjs_0_1_18$MT6ppy0FAMVMLH...'\\n  },\\n  :returnUrl =&gt; 'adyencheckout:\\\/\\\/your.package.name',\\n  :merchantAccount =&gt; 'ADYEN_MERCHANT_ACCOUNT'\\n}\\n\\n# Send the request\\nresult = adyen.checkout.payments_api.payments(request_body, headers: { 'Idempotency-Key' =&gt; 'UUID' })&quot;},{&quot;language&quot;:&quot;ts&quot;,&quot;tabTitle&quot;:&quot;NodeJS (TypeScript)&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Node API Library v18.0.0\\n\\\/\\\/ Require the parts of the module you want to use\\nimport { Client, CheckoutAPI, Types } from \\&quot;@adyen\\\/api-library\\&quot;;\\n\\\/\\\/ Initialize the client object\\n\\\/\\\/ For the live environment, additionally include your liveEndpointUrlPrefix.\\nconst client = new Client({apiKey: \\&quot;ADYEN_API_KEY\\&quot;, environment: \\&quot;TEST\\&quot;});\\n\\n\\\/\\\/ Create the request object(s)\\nconst amount: Types.checkout.Amount = {\\n  currency: \\&quot;EUR\\&quot;,\\n  value: 1000\\n};\\n\\nconst cardDetails: Types.checkout.CardDetails = {\\n  encryptedCardNumber: \\&quot;adyenjs_0_1_18$MT6ppy0FAMVMLH...\\&quot;,\\n  encryptedExpiryYear: \\&quot;adyenjs_0_1_18$MT6ppy0FAMVMLH...\\&quot;,\\n  encryptedExpiryMonth: \\&quot;adyenjs_0_1_18$MT6ppy0FAMVMLH...\\&quot;,\\n  type: Types.checkout.CardDetails.TypeEnum.Scheme\\n};\\n\\nconst paymentRequest: Types.checkout.PaymentRequest = {\\n  reference: \\&quot;YOUR_ORDER_NUMBER\\&quot;,\\n  amount: amount,\\n  merchantAccount: \\&quot;ADYEN_MERCHANT_ACCOUNT\\&quot;,\\n  paymentMethod: cardDetails,\\n  returnUrl: \\&quot;adyencheckout:\\\/\\\/your.package.name\\&quot;\\n};\\n\\n\\\/\\\/ Send the request\\nconst checkoutAPI = new CheckoutAPI(client);\\nconst response = checkoutAPI.PaymentsApi.payments(paymentRequest, { idempotencyKey: \\&quot;UUID\\&quot; });&quot;}]\" :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<p>The  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/payments<\/a> response contains an <code>action<\/code> object with <code>type<\/code>: <strong>redirect<\/strong>.<\/p>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'\/payments response'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n  \\\"resultCode\\\": \\\"RedirectShopper\\\",\\n  \\\"action\\\": {\\n    \\\"paymentMethodType\\\": \\\"scheme\\\",\\n    \\\"url\\\": \\\"https:\\\/\\\/your-company.example.com\\\/checkout?shopperOrder=12xy..\\\",\\n    \\\"data\\\": {\\n      \\\"MD\\\": \\\"OEVudmZVMUlkWjd0MDNwUWs2bmhSdz09...\\\",\\n      \\\"PaReq\\\": \\\"eNpVUttygjAQ\\\/RXbDyAXBYRZ00HpTH3wUosPfe...\\\",\\n      \\\"TermUrl\\\": \\\"https:\\\/\\\/example.com\\\/checkout?shopperOrder=12xy...\\\"\\n    },\\n    \\\"method\\\": \\\"POST\\\",\\n    \\\"type\\\": \\\"redirect\\\"\\n  }\\n}\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<p>If your integration is <a href=\"\/pt\/online-payments\/build-your-integration\/advanced-flow\/?platform=Android&amp;integration=Drop-in#make-a-payment\">set up correctly<\/a>, the <code>action<\/code> object is passed from your server to the client.<\/p>\n<h2 id=\"handle-the-redirect\">Handle the redirect<\/h2>\n<p>Drop-in redirects the shopper to complete the payment. When the shopper returns back to your app, Drop-in provides the <code>actionComponentData<\/code> object.<\/p>\n<p> <\/p>\n<p>From your server, make a POST  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments\/details\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/payments\/details<\/a> request providing:<\/p>\n<ul>\n<li><code>details<\/code>: The <code>actionComponentData.details<\/code> object from Drop-in.<\/li>\n<\/ul>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'\/payments\/details request'\" :id=\"''\" :code-data=\"[{&quot;language&quot;:&quot;bash&quot;,&quot;tabTitle&quot;:&quot;&quot;,&quot;content&quot;:&quot;curl https:\\\/\\\/checkout-test.adyen.com\\\/v68\\\/payments\\\/details \\\\\\n-H 'x-api-key: ADYEN_API_KEY' \\\\\\n-H 'content-type: application\\\/json' \\\\\\n-d '{\\n     \\&quot;details\\&quot;: {\\n       \\&quot;redirectResult\\&quot;: \\&quot;eyJ0cmFuc1N0YXR1cyI6IlkifQ==\\&quot;\\n   }\\n}'&quot;}]\" :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<p>You receive a response containing:<\/p>\n<ul>\n<li><code>resultCode<\/code>: Use this to present the payment result to your shopper.<\/li>\n<li><code>pspReference<\/code>: Our unique identifier for the transaction.<\/li>\n<\/ul>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'\/payments\/details response'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n     \\\"resultCode\\\": \\\"Authorised\\\",\\n     \\\"pspReference\\\": \\\"PPKFQ89R6QRXGN82\\\"\\n}\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<h2 id=\"present-the-payment-result\">Present the payment result<\/h2>\n<p>Use the\u00a0 <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments#responses-200-resultCode\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">resultCode<\/a> from the  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments\/details\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/payments\/details<\/a> response to present the payment result to your shopper. You will also receive the outcome of the payment asynchronously in a <a href=\"\/pt\/development-resources\/webhooks\">webhook<\/a>.<\/p>\n<p><\/p>\n<p>For Bancontact card payments, you can receive the following <code>resultCode<\/code> values:<\/p>\n<table>\n<thead>\n<tr>\n<th>resultCode<\/th>\n<th>Description<\/th>\n<th>Action to take<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>Authorised<\/strong><\/td>\n<td>The payment was successful.<\/td>\n<td>Inform the shopper that the payment was successful.<\/td>\n<\/tr>\n<tr>\n<td><strong>Cancelled<\/strong><\/td>\n<td>The shopper cancelled the payment.<\/td>\n<td>Ask the shopper whether they want to continue with the order, or ask them to select a different payment method.<\/td>\n<\/tr>\n<tr>\n<td><strong>Error<\/strong><\/td>\n<td>There was an error when the payment was being processed. For more information, check the <a href=\"\/pt\/development-resources\/refusal-reasons\">\n  <code>refusalReason<\/code>\n<\/a> field.<\/td>\n<td>Inform the shopper that there was an error processing their payment.<\/td>\n<\/tr>\n<tr>\n<td><strong>Refused<\/strong><\/td>\n<td>The payment was refused.  For more information, check the <a href=\"\/pt\/development-resources\/refusal-reasons\">\n  <code>refusalReason<\/code>\n<\/a> field.<\/td>\n<td>Ask the shopper to try the payment again using a different payment method.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2 id=\"recurring-bancontact-payments\">Recurring payments<\/h2>\n<p>Bancontact supports <a href=\"\/pt\/online-payments\/tokenization\/\">tokenization<\/a> for recurring payments.<\/p>\n<div class=\"notices yellow\">\n<p>We strongly recommend that you ask explicit permission from the shopper if you intend to make future recurring payments.<\/p>\n<\/div>\n<p>You can use recurring transactions through the Bancontact Wallet Initiated Program (WIP).<\/p>\n<h3 id=\"recurring-wip\">Bancontact Wallet Initiated Program<\/h3>\n<p>The Bancontact Wallet Initiated Program (WIP) is a service that streamlines checkout and supports subscription-based billing. It offers the following:<\/p>\n<ul>\n<li><strong>Bancontact One-Click Pay<\/strong> to speed up checkout and boost conversion rates<\/li>\n<li><strong>Bancontact Recurring<\/strong> to support merchant-initiated recurring or subscription payments<\/li>\n<\/ul>\n<p>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 <a href=\"https:\/\/ca-test.adyen.com\/ca\/ca\/contactUs\/support.shtml?form=other\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">Support Team<\/a>.<\/p>\n<p>When you enable Bancontact WIP, transaction amount limits apply to ensure controlled and secure payments.<\/p>\n<p>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 first transaction goes through SCA, there is no liability shift. The issuer remains liable.<\/p>\n<h3 id=\"recurring-wip\">Make a recurring payment<\/h3>\n<p>To make recurring payments, you need to:<\/p>\n<ol>\n<li><a href=\"#create-a-token\">Create a shopper token<\/a>.<\/li>\n<li><a href=\"#make-payment-with-token\">Use the token to make future payments for the shopper<\/a>.<\/li>\n<\/ol>\n<p>To test recurring payments, contact our <a href=\"https:\/\/ca-test.adyen.com\/ca\/ca\/contactUs\/support.shtml?form=other\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">Support Team<\/a> to configure your test environment.<\/p>\n<h3 id=\"create-a-token\">Create a token<\/h3>\n<p>To create a token, include in your <a href=\"https:\/\/docs.adyen.com\/api-explorer\/#\/CheckoutService\/latest\/post\/sessions\" class=\"codeLabel external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/sessions<\/a> or  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/payments<\/a> request:<\/p>\n<ul>\n<li><code>storePaymentMethod<\/code>: <strong>true<\/strong><\/li>\n<li> <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments#request-shopperReference\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">shopperReference<\/a>&#58; Your unique identifier for the shopper (minimum length three characters).<\/li>\n<\/ul>\n<p>When the payment has been settled, you receive a  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Tokenization-webhooks\/latest\/post\/recurring.token.created\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">recurring.token.created<\/a> <a href=\"\/pt\/development-resources\/webhooks\">webhook<\/a> containing:<\/p>\n<ul>\n<li><code>type<\/code>: <strong>recurring.token.created<\/strong><\/li>\n<li><code>shopperReference<\/code>: your unique identifier for the shopper.<\/li>\n<li><code>eventId<\/code>: The <code>pspReference<\/code> of the initial payment.<\/li>\n<li><code>storedPaymentMethodId<\/code>:  This is the token that you need to make recurring payments for this shopper.<\/li>\n<\/ul>\n<div class=\"notices green\">\n<p>Make sure that your server is able to receive the <a href=\"\/pt\/development-resources\/webhooks\/webhook-types\/#other-webhooks\">Recurring tokens life cycle events<\/a> webhook. You can <a href=\"\/pt\/development-resources\/webhooks\/#set-up-webhooks-in-your-customer-area\">set up this webhook in your Customer Area<\/a>.<\/p>\n<\/div>\n<h3 id=\"make-payment-with-token\">Make a payment with a token<\/h3>\n<p>To make a payment with the token, include in your  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/payments<\/a> request:<\/p>\n<ul>\n<li><code>paymentMethod.storedPaymentMethodId<\/code>: The <code>storedPaymentMethodId<\/code> from the  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Tokenization-webhooks\/latest\/post\/recurring.token.created\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">recurring.token.created<\/a> webhook. You can also get this value by using the <a href=\"https:\/\/docs.adyen.com\/api-explorer\/#\/Recurring\/latest\/listRecurringDetails\" class=\"codeLabel external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/listRecurringDetails<\/a> endpoint.<\/li>\n<li><code>shopperReference<\/code>: The unique shopper identifier that you specified when creating the token.<\/li>\n<li><code>shopperInteraction<\/code>:\u00a0<strong>ContAuth<\/strong>.<\/li>\n<li><code>recurringProcessingModel<\/code>: <strong>Subscription<\/strong> or <strong>UnscheduledCardOnFile<\/strong>.<\/li>\n<\/ul>\n<p>For more information about the <code>shopperInteraction<\/code> and <code>recurringProcessingModel<\/code> fields, refer to <a href=\"\/pt\/online-payments\/tokenization\/\">Tokenization<\/a>.<\/p>\n<p>The following example shows a recurring <strong>Subscription<\/strong> payment using WIP.<\/p>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"''\" :id=\"'recurring-wip'\" :code-data=\"[{&quot;language&quot;:&quot;bash&quot;,&quot;tabTitle&quot;:&quot;curl&quot;,&quot;content&quot;:&quot;curl https:\\\/\\\/checkout-test.adyen.com\\\/v68\\\/payments \\\\\\n-H 'x-api-key: ADYEN_API_KEY' \\\\\\n-H 'content-type: application\\\/json' \\\\\\n-d '{\\n       \\&quot;amount\\&quot;:{\\n          \\&quot;value\\&quot;:1000,\\n          \\&quot;currency\\&quot;:\\&quot;EUR\\&quot;\\n       },\\n       \\&quot;paymentMethod\\&quot;:{\\n          \\&quot;type\\&quot;:\\&quot;bcmc\\&quot;,\\n          \\&quot;storedPaymentMethodId\\&quot;:\\&quot;7219687191761347\\&quot;\\n       },\\n       \\&quot;reference\\&quot;:\\&quot;YOUR_ORDER_NUMBER\\&quot;,\\n       \\&quot;merchantAccount\\&quot;:\\&quot;YOUR_MERCHANT_ACCOUNT\\&quot;,\\n       \\&quot;shopperReference\\&quot;:\\&quot;YOUR_UNIQUE_SHOPPER_ID_IOfW3k9G2PvXFu2j\\&quot;,\\n       \\&quot;shopperInteraction\\&quot;:\\&quot;ContAuth\\&quot;,\\n       \\&quot;recurringProcessingModel\\&quot;: \\&quot;Subscription\\&quot;\\n}'&quot;},{&quot;language&quot;:&quot;java&quot;,&quot;tabTitle&quot;:&quot;Java&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Java API Library v39.3.0\\nimport com.adyen.Client;\\nimport com.adyen.enums.Environment;\\nimport com.adyen.model.checkout.*;\\nimport java.time.OffsetDateTime;\\nimport java.util.*;\\nimport com.adyen.model.RequestOptions;\\nimport com.adyen.service.checkout.*;\\n\\n\\\/\\\/ For the LIVE environment, also include your liveEndpointUrlPrefix.\\nClient client = new Client(\\&quot;ADYEN_API_KEY\\&quot;, Environment.TEST);\\n\\n\\\/\\\/ Create the request object(s)\\nAmount amount = new Amount()\\n  .currency(\\&quot;EUR\\&quot;)\\n  .value(1000L);\\n\\nCardDetails cardDetails = new CardDetails()\\n  .storedPaymentMethodId(\\&quot;7219687191761347\\&quot;)\\n  .type(CardDetails.TypeEnum.BCMC);\\n\\nPaymentRequest paymentRequest = new PaymentRequest()\\n  .reference(\\&quot;YOUR_ORDER_NUMBER\\&quot;)\\n  .amount(amount)\\n  .merchantAccount(\\&quot;YOUR_MERCHANT_ACCOUNT\\&quot;)\\n  .recurringProcessingModel(PaymentRequest.RecurringProcessingModelEnum.SUBSCRIPTION)\\n  .paymentMethod(new CheckoutPaymentMethod(cardDetails))\\n  .shopperInteraction(PaymentRequest.ShopperInteractionEnum.CONTAUTH)\\n  .shopperReference(\\&quot;YOUR_UNIQUE_SHOPPER_ID_IOfW3k9G2PvXFu2j\\&quot;);\\n\\n\\\/\\\/ Send the request\\nPaymentsApi service = new PaymentsApi(client);\\nPaymentResponse response = service.payments(paymentRequest, new RequestOptions().idempotencyKey(\\&quot;UUID\\&quot;));&quot;},{&quot;language&quot;:&quot;php&quot;,&quot;tabTitle&quot;:&quot;PHP&quot;,&quot;content&quot;:&quot;&lt;?php\\n\\\/\\\/ Adyen PHP API Library v28.2.0\\nuse Adyen\\\\Client;\\nuse Adyen\\\\Environment;\\nuse Adyen\\\\Model\\\\Checkout\\\\Amount;\\nuse Adyen\\\\Model\\\\Checkout\\\\CheckoutPaymentMethod;\\nuse Adyen\\\\Model\\\\Checkout\\\\PaymentRequest;\\nuse Adyen\\\\Service\\\\Checkout\\\\PaymentsApi;\\n\\n$client = new Client();\\n$client-&gt;setXApiKey(\\&quot;ADYEN_API_KEY\\&quot;);\\n\\\/\\\/ For the LIVE environment, also include your liveEndpointUrlPrefix.\\n$client-&gt;setEnvironment(Environment::TEST);\\n\\n\\n\\\/\\\/ Create the request object(s)\\n$amount = new Amount();\\n$amount\\n  -&gt;setCurrency(\\&quot;EUR\\&quot;)\\n  -&gt;setValue(1000);\\n\\n$checkoutPaymentMethod = new CheckoutPaymentMethod();\\n$checkoutPaymentMethod\\n  -&gt;setStoredPaymentMethodId(\\&quot;7219687191761347\\&quot;)\\n  -&gt;setType(\\&quot;bcmc\\&quot;);\\n\\n$paymentRequest = new PaymentRequest();\\n$paymentRequest\\n  -&gt;setReference(\\&quot;YOUR_ORDER_NUMBER\\&quot;)\\n  -&gt;setAmount($amount)\\n  -&gt;setMerchantAccount(\\&quot;YOUR_MERCHANT_ACCOUNT\\&quot;)\\n  -&gt;setRecurringProcessingModel(\\&quot;Subscription\\&quot;)\\n  -&gt;setPaymentMethod($checkoutPaymentMethod)\\n  -&gt;setShopperInteraction(\\&quot;ContAuth\\&quot;)\\n  -&gt;setShopperReference(\\&quot;YOUR_UNIQUE_SHOPPER_ID_IOfW3k9G2PvXFu2j\\&quot;);\\n\\n$requestOptions['idempotencyKey'] = 'UUID';\\n\\n\\\/\\\/ Send the request\\n$service = new PaymentsApi($client);\\n$response = $service-&gt;payments($paymentRequest, $requestOptions);&quot;},{&quot;language&quot;:&quot;cs&quot;,&quot;tabTitle&quot;:&quot;C#&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen .net API Library v32.1.1\\nusing Adyen;\\nusing Environment = Adyen.Model.Environment;\\nusing Adyen.Model;\\nusing Adyen.Model.Checkout;\\nusing Adyen.Service.Checkout;\\n\\n\\\/\\\/ For the LIVE environment, also include your liveEndpointUrlPrefix.\\nvar config = new Config()\\n{\\n    XApiKey = \\&quot;ADYEN_API_KEY\\&quot;,\\n    Environment = Environment.Test\\n};\\nvar client = new Client(config);\\n\\n\\\/\\\/ Create the request object(s)\\nAmount amount = new Amount\\n{\\n  Currency = \\&quot;EUR\\&quot;,\\n  Value = 1000\\n};\\n\\nCardDetails cardDetails = new CardDetails\\n{\\n  StoredPaymentMethodId = \\&quot;7219687191761347\\&quot;,\\n  Type = CardDetails.TypeEnum.Bcmc\\n};\\n\\nPaymentRequest paymentRequest = new PaymentRequest\\n{\\n  Reference = \\&quot;YOUR_ORDER_NUMBER\\&quot;,\\n  Amount = amount,\\n  MerchantAccount = \\&quot;YOUR_MERCHANT_ACCOUNT\\&quot;,\\n  RecurringProcessingModel = PaymentRequest.RecurringProcessingModelEnum.Subscription,\\n  PaymentMethod = new CheckoutPaymentMethod(cardDetails),\\n  ShopperInteraction = PaymentRequest.ShopperInteractionEnum.ContAuth,\\n  ShopperReference = \\&quot;YOUR_UNIQUE_SHOPPER_ID_IOfW3k9G2PvXFu2j\\&quot;\\n};\\n\\n\\\/\\\/ Send the request\\nvar service = new PaymentsService(client);\\nvar response = service.Payments(paymentRequest, requestOptions: new RequestOptions { IdempotencyKey = \\&quot;UUID\\&quot;});&quot;},{&quot;language&quot;:&quot;js&quot;,&quot;tabTitle&quot;:&quot;NodeJS (JavaScript)&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Node API Library v29.0.0\\nconst { Client, CheckoutAPI } = require('@adyen\\\/api-library');\\n\\n\\\/\\\/ For the LIVE environment, also include your liveEndpointUrlPrefix.\\nconst config = new Config({\\n  apiKey: \\&quot;ADYEN_API_KEY\\&quot;,\\n  environment: EnvironmentEnum.TEST\\n});\\n\\nconst client = new Client(config);\\n\\n\\\/\\\/ Create the request object(s)\\nconst paymentRequest = {\\n  amount: {\\n    value: 1000,\\n    currency: \\&quot;EUR\\&quot;\\n  },\\n  paymentMethod: {\\n    type: \\&quot;bcmc\\&quot;,\\n    storedPaymentMethodId: \\&quot;7219687191761347\\&quot;\\n  },\\n  reference: \\&quot;YOUR_ORDER_NUMBER\\&quot;,\\n  merchantAccount: \\&quot;YOUR_MERCHANT_ACCOUNT\\&quot;,\\n  shopperReference: \\&quot;YOUR_UNIQUE_SHOPPER_ID_IOfW3k9G2PvXFu2j\\&quot;,\\n  shopperInteraction: \\&quot;ContAuth\\&quot;,\\n  recurringProcessingModel: \\&quot;Subscription\\&quot;\\n}\\n\\n\\\/\\\/ Send the request\\nconst checkoutAPI = new CheckoutAPI(client);\\nconst response = checkoutAPI.PaymentsApi.payments(paymentRequest, { idempotencyKey: \\&quot;UUID\\&quot; });&quot;},{&quot;language&quot;:&quot;go&quot;,&quot;tabTitle&quot;:&quot;Go&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Go API Library v21.0.0\\nimport (\\n  \\&quot;context\\&quot;\\n  \\&quot;github.com\\\/adyen\\\/adyen-go-api-library\\\/v21\\\/src\\\/common\\&quot;\\n  \\&quot;github.com\\\/adyen\\\/adyen-go-api-library\\\/v21\\\/src\\\/adyen\\&quot;\\n  \\&quot;github.com\\\/adyen\\\/adyen-go-api-library\\\/v21\\\/src\\\/checkout\\&quot;\\n)\\n\\\/\\\/ For the LIVE environment, also include your liveEndpointUrlPrefix.\\nclient := adyen.NewClient(&amp;common.Config{\\n  ApiKey:      \\&quot;ADYEN_API_KEY\\&quot;,\\n  Environment: common.TestEnv,\\n})\\n\\n\\\/\\\/ Create the request object(s)\\namount := checkout.Amount{\\n  Currency: \\&quot;EUR\\&quot;,\\n  Value: 1000,\\n}\\n\\ncardDetails := checkout.CardDetails{\\n  StoredPaymentMethodId: common.PtrString(\\&quot;7219687191761347\\&quot;),\\n  Type: common.PtrString(\\&quot;bcmc\\&quot;),\\n}\\n\\npaymentRequest := checkout.PaymentRequest{\\n  Reference: \\&quot;YOUR_ORDER_NUMBER\\&quot;,\\n  Amount: amount,\\n  MerchantAccount: \\&quot;YOUR_MERCHANT_ACCOUNT\\&quot;,\\n  RecurringProcessingModel: common.PtrString(\\&quot;Subscription\\&quot;),\\n  PaymentMethod: checkout.CardDetailsAsCheckoutPaymentMethod(&amp;cardDetails),\\n  ShopperInteraction: common.PtrString(\\&quot;ContAuth\\&quot;),\\n  ShopperReference: common.PtrString(\\&quot;YOUR_UNIQUE_SHOPPER_ID_IOfW3k9G2PvXFu2j\\&quot;),\\n}\\n\\n\\\/\\\/ Send the request\\nservice := client.Checkout()\\nreq := service.PaymentsApi.PaymentsInput().IdempotencyKey(\\&quot;UUID\\&quot;).PaymentRequest(paymentRequest)\\nres, httpRes, err := service.PaymentsApi.Payments(context.Background(), req)&quot;},{&quot;language&quot;:&quot;py&quot;,&quot;tabTitle&quot;:&quot;Python&quot;,&quot;content&quot;:&quot;# Adyen Python API Library v13.6.0\\nimport Adyen\\n\\nadyen = Adyen.Adyen()\\nadyen.client.xapikey = \\&quot;ADYEN_API_KEY\\&quot;\\n# For the LIVE environment, also include your liveEndpointUrlPrefix.\\nadyen.client.platform = \\&quot;test\\&quot; # The environment to use library in.\\n\\n# Create the request object(s)\\njson_request = {\\n  \\&quot;amount\\&quot;: {\\n    \\&quot;value\\&quot;: 1000,\\n    \\&quot;currency\\&quot;: \\&quot;EUR\\&quot;\\n  },\\n  \\&quot;paymentMethod\\&quot;: {\\n    \\&quot;type\\&quot;: \\&quot;bcmc\\&quot;,\\n    \\&quot;storedPaymentMethodId\\&quot;: \\&quot;7219687191761347\\&quot;\\n  },\\n  \\&quot;reference\\&quot;: \\&quot;YOUR_ORDER_NUMBER\\&quot;,\\n  \\&quot;merchantAccount\\&quot;: \\&quot;YOUR_MERCHANT_ACCOUNT\\&quot;,\\n  \\&quot;shopperReference\\&quot;: \\&quot;YOUR_UNIQUE_SHOPPER_ID_IOfW3k9G2PvXFu2j\\&quot;,\\n  \\&quot;shopperInteraction\\&quot;: \\&quot;ContAuth\\&quot;,\\n  \\&quot;recurringProcessingModel\\&quot;: \\&quot;Subscription\\&quot;\\n}\\n\\n# Send the request\\nresult = adyen.checkout.payments_api.payments(request=json_request, idempotency_key=\\&quot;UUID\\&quot;)&quot;},{&quot;language&quot;:&quot;rb&quot;,&quot;tabTitle&quot;:&quot;Ruby&quot;,&quot;content&quot;:&quot;# Adyen Ruby API Library v10.4.0\\nrequire \\&quot;adyen-ruby-api-library\\&quot;\\n\\nadyen = Adyen::Client.new\\nadyen.api_key = 'ADYEN_API_KEY'\\n# For the LIVE environment, also include your liveEndpointUrlPrefix.\\nadyen.env = :test # Set to \\&quot;live\\&quot; for live environment\\n\\n# Create the request object(s)\\nrequest_body = {\\n  :amount =&gt; {\\n    :value =&gt; 1000,\\n    :currency =&gt; 'EUR'\\n  },\\n  :paymentMethod =&gt; {\\n    :type =&gt; 'bcmc',\\n    :storedPaymentMethodId =&gt; '7219687191761347'\\n  },\\n  :reference =&gt; 'YOUR_ORDER_NUMBER',\\n  :merchantAccount =&gt; 'YOUR_MERCHANT_ACCOUNT',\\n  :shopperReference =&gt; 'YOUR_UNIQUE_SHOPPER_ID_IOfW3k9G2PvXFu2j',\\n  :shopperInteraction =&gt; 'ContAuth',\\n  :recurringProcessingModel =&gt; 'Subscription'\\n}\\n\\n# Send the request\\nresult = adyen.checkout.payments_api.payments(request_body, headers: { 'Idempotency-Key' =&gt; 'UUID' })&quot;},{&quot;language&quot;:&quot;ts&quot;,&quot;tabTitle&quot;:&quot;NodeJS (TypeScript)&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Node API Library v29.0.0\\nimport { Client, CheckoutAPI, Types } from \\&quot;@adyen\\\/api-library\\&quot;;\\n\\n\\\/\\\/ For the LIVE environment, also include your liveEndpointUrlPrefix.\\nconst config = new Config({\\n  apiKey: \\&quot;ADYEN_API_KEY\\&quot;,\\n  environment: EnvironmentEnum.TEST\\n});\\n\\nconst client = new Client(config);\\n\\n\\\/\\\/ Create the request object(s)\\nconst amount: Types.checkout.Amount = {\\n  currency: \\&quot;EUR\\&quot;,\\n  value: 1000\\n};\\n\\nconst cardDetails: Types.checkout.CardDetails = {\\n  storedPaymentMethodId: \\&quot;7219687191761347\\&quot;,\\n  type: Types.checkout.CardDetails.TypeEnum.Bcmc\\n};\\n\\nconst paymentRequest: Types.checkout.PaymentRequest = {\\n  reference: \\&quot;YOUR_ORDER_NUMBER\\&quot;,\\n  amount: amount,\\n  merchantAccount: \\&quot;YOUR_MERCHANT_ACCOUNT\\&quot;,\\n  recurringProcessingModel: Types.checkout.PaymentRequest.RecurringProcessingModelEnum.Subscription,\\n  paymentMethod: cardDetails,\\n  shopperInteraction: Types.checkout.PaymentRequest.ShopperInteractionEnum.ContAuth,\\n  shopperReference: \\&quot;YOUR_UNIQUE_SHOPPER_ID_IOfW3k9G2PvXFu2j\\&quot;\\n};\\n\\n\\\/\\\/ Send the request\\nconst checkoutAPI = new CheckoutAPI(client);\\nconst response = checkoutAPI.PaymentsApi.payments(paymentRequest, { idempotencyKey: \\&quot;UUID\\&quot; });&quot;}]\" :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<h2 id=\"test-and-go-live\">Test and go live<\/h2>\n<p>Before making live payments, use the following credentials to test your integration:<\/p>\n<table>\n<thead>\n<tr>\n<th>Card number<\/th>\n<th>Card type<\/th>\n<th>CVV2\/CVC2<\/th>\n<th>Username<\/th>\n<th>Password<\/th>\n<th>Issuing country\/region<\/th>\n<th>Expiry date<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>5127 8809 9999 9990<\/td>\n<td>BCMC \/ Mastercard Debit<\/td>\n<td>BCMC: None <br> Mastercard: 737<\/td>\n<td>user<\/td>\n<td>password<\/td>\n<td>BE<\/td>\n<td>03\/2030<\/td>\n<\/tr>\n<tr>\n<td>6703 4444 4444 4449<\/td>\n<td>BCMC \/ Maestro<\/td>\n<td>None<\/td>\n<td>user<\/td>\n<td>password<\/td>\n<td>BE<\/td>\n<td>03\/2030<\/td>\n<\/tr>\n<tr>\n<td>4871 0499 9999 9910 <a href=\"#routing\"><sup>1<\/sup><\/td>\n<td>BCMC \/ Visa Debit<\/td>\n<td>BCMC: None <br> Visa: 737<\/td>\n<td>user<\/td>\n<td>password<\/td>\n<td>BE<\/td>\n<td>03\/2030<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><a id=\"routing\"><\/a> <sup>1<\/sup> Depending on your payment method setup, transactions with this test card are routed to Bancontact or Visa.<\/p>\n<p>You can force a decline using these credentials with <code>\"holderName\": \"DECLINED\"<\/code>.<\/p>\n<pre><code class=\"language-js\">    \"paymentMethod\": {\n      \"type\": \"bcmc\",\n      \"number\": \"4871049999999910\",\n      \"holderName\": \"DECLINED\",\n      \"expiryMonth\": \"03\",\n      \"expiryYear\": \"2030\"\n    }<\/code><\/pre>\n<p>This gets the following response:<\/p>\n<pre><code class=\"language-js\">    \"refusalReason\": \"Refused\",\n    \"resultCode\": \"Refused\",<\/code><\/pre>\n<p>You can check the status of test payments in your\u00a0<a href=\"https:\/\/ca-test.adyen.com\/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">Customer Area<\/a>\u00a0&gt;\u00a0<strong>Transactions<\/strong>\u00a0&gt;\u00a0<strong>Payments<\/strong>.<\/p>\n<p><a href=\"\/pt\/payment-methods\/add-payment-methods\">Add Bancontact card<\/a> in your <a href=\"https:\/\/ca-live.adyen.com\/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">live Customer Area<\/a>.<\/p>\n<ol start=\"3\">\n<li>Configure the Drop-in using the Client Encryption Public Key from your <a href=\"https:\/\/ca-live.adyen.com\/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">live Customer Area<\/a>.<\/li>\n<\/ol>\n<h2 id=\"see-also\">See also<\/h2>\n<div class=\"see-also-links output-inline\" id=\"see-also\">\n<ul><li><a href=\"\/online-payments\/build-your-integration\/sessions-flow\/?platform=Android&amp;integration=Drop-in\"\n                        target=\"_self\"\n                        >\n                    Android Drop-in integration guide\n                <\/a><\/li><li><a href=\"\/payment-methods\/sepa-direct-debit\"\n                        target=\"_self\"\n                        >\n                    SEPA Direct Debit\n                <\/a><\/li><li><a href=\"https:\/\/docs.adyen.com\/api-explorer\/#\/CheckoutService\/latest\/overview\"\n                        target=\"_blank\"\n                         class=\"external\">\n                    API Explorer\n                <\/a><\/li><\/ul><\/div>\n","url":"https:\/\/docs.adyen.com\/pt\/payment-methods\/bancontact\/bancontact-card\/android-drop-in","articleFields":{"description":"Add Bancontact card to an existing Drop-in integration.","feedback_component":true,"parameters":{"payment_method":"Bancontact card","integration":"Drop-in","platform":"Android"},"last_edit_on":"22-09-2021 16:09"},"algolia":{"url":"https:\/\/docs.adyen.com\/pt\/payment-methods\/bancontact\/bancontact-card\/android-drop-in","title":"Bancontact card Drop-in integration","content":"\nIf you are using Android Drop-in v5.0.0 or later:\nThis payment method requires no additional configuration.\nFollow the  Drop-in integration guide.\n\nA Bancontact card payment is like a regular card payment, except for the following:\n\nThere is no CVC. For co-badged cards, the CVC field can still appear.\n3D Secure authentication is mandatory.\nSeparate captures are not supported.\n\nOur Android Drop-in renders the Bancontact card in your payment form, securely collects sensitive card information, and redirects the shopper to the issuer's website to perform 3D Secure authentication.\nWhen making a Bancontact payment, you need to handle the redirect result when the shopper returns back to your website after performing 3D Secure authentication.\nRequirements\n\n\n\nRequirement\nDescription\n\n\n\n\nIntegration type\nMake sure that you have built an Advanced flow Android Drop-in integration. \n\n\nSetup steps\nBefore you begin, add Bancontact card in your Customer Area.\n\n\n\nShow Bancontact card in your payment form\nTo show Bancontact card in your payment form, specify in your  \/paymentMethods request:\n\n countryCode&#58; BE\n amount.currency&#58; EUR\n\nOptional configuration\nWhen creating an instance of Drop-in, you can optionally include a \n  BcmcConfiguration\n object to add custom configuration for Bancontact in your payment form.\nThe following example shows how to configure Drop-in to make the cardholder name for Bancontact required :\n\/\/ Optional. You can add this if you need any custom configuration for the component.\nval bcmcConfiguration = BcmcConfiguration.Builder(context, \"YOUR_CLIENT_KEY\")\n    \/\/ When you are ready to accept live payments, change the value to one of our live environments.\n    .setEnvironment(Environment.TEST)\n    .build()\n\nval dropInConfiguration = DropInConfiguration.Builder(context, YourDropInService::class.java, \"YOUR_CLIENT_KEY\")\n     \/\/ When you are ready to accept live payments, change the value to one of our live environments.\n     .setEnvironment(Environment.TEST)\n     .addBcmcConfiguration(bcmcConfiguration)\n     .build()\nMake a payment\nWhen the shopper proceeds to pay, Drop-in returns the paymentComponentData.paymentMethod.\n\nPass the paymentComponentData to your server.\nFrom your server, make a  \/payments request, specifying:\n\npaymentMethod: The paymentComponentData.paymentMethod from your client app.\nchannel: Android\nreturnURL:\u00a0The URL where the shopper will be redirected back to after completing 3D Secure 1 authentication. Get this URL from Drop-in in the RedirectComponent.getReturnUrl(context).\n\n\n\n    \n\nThe  \/payments response contains an action object with type: redirect.\n\n    \n\nIf your integration is set up correctly, the action object is passed from your server to the client.\nHandle the redirect\nDrop-in redirects the shopper to complete the payment. When the shopper returns back to your app, Drop-in provides the actionComponentData object.\n \nFrom your server, make a POST  \/payments\/details request providing:\n\ndetails: The actionComponentData.details object from Drop-in.\n\n\n    \n\nYou receive a response containing:\n\nresultCode: Use this to present the payment result to your shopper.\npspReference: Our unique identifier for the transaction.\n\n\n    \n\nPresent the payment result\nUse the\u00a0 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.\n\nFor Bancontact card payments, you can receive the following resultCode values:\n\n\n\nresultCode\nDescription\nAction to take\n\n\n\n\nAuthorised\nThe payment was successful.\nInform the shopper that the payment was successful.\n\n\nCancelled\nThe shopper cancelled the payment.\nAsk the shopper whether they want to continue with the order, or ask them to select a different payment method.\n\n\nError\nThere was an error when the payment was being processed. For more information, check the \n  refusalReason\n field.\nInform the shopper that there was an error processing their payment.\n\n\nRefused\nThe payment was refused.  For more information, check the \n  refusalReason\n field.\nAsk the shopper to try the payment again using a different payment method.\n\n\n\nRecurring payments\nBancontact supports tokenization for recurring payments.\n\nWe strongly recommend that you ask explicit permission from the shopper if you intend to make future recurring payments.\n\nYou can use recurring transactions through the Bancontact Wallet Initiated Program (WIP).\nBancontact Wallet Initiated Program\nThe Bancontact Wallet Initiated Program (WIP) is a service that streamlines checkout and supports subscription-based billing. It offers the following:\n\nBancontact One-Click Pay to speed up checkout and boost conversion rates\nBancontact Recurring to support merchant-initiated recurring or subscription payments\n\nYou 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.\nWhen you enable Bancontact WIP, transaction amount limits apply to ensure controlled and secure payments.\nShoppers 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 first transaction goes through SCA, there is no liability shift. The issuer remains liable.\nMake a recurring payment\nTo make recurring payments, you need to:\n\nCreate a shopper token.\nUse the token to make future payments for the shopper.\n\nTo test recurring payments, contact our Support Team to configure your test environment.\nCreate a token\nTo create a token, include in your \/sessions or  \/payments request:\n\nstorePaymentMethod: true\n shopperReference&#58; Your unique identifier for the shopper (minimum length three characters).\n\nWhen the payment has been settled, you receive a  recurring.token.created webhook containing:\n\ntype: recurring.token.created\nshopperReference: your unique identifier for the shopper.\neventId: The pspReference of the initial payment.\nstoredPaymentMethodId:  This is the token that you need to make recurring payments for this shopper.\n\n\nMake sure that your server is able to receive the Recurring tokens life cycle events webhook. You can set up this webhook in your Customer Area.\n\nMake a payment with a token\nTo make a payment with the token, include in your  \/payments request:\n\npaymentMethod.storedPaymentMethodId: The storedPaymentMethodId from the  recurring.token.created webhook. You can also get this value by using the \/listRecurringDetails endpoint.\nshopperReference: The unique shopper identifier that you specified when creating the token.\nshopperInteraction:\u00a0ContAuth.\nrecurringProcessingModel: Subscription or UnscheduledCardOnFile.\n\nFor more information about the shopperInteraction and recurringProcessingModel fields, refer to Tokenization.\nThe following example shows a recurring Subscription payment using WIP.\n\n    \n\nTest and go live\nBefore making live payments, use the following credentials to test your integration:\n\n\n\nCard number\nCard type\nCVV2\/CVC2\nUsername\nPassword\nIssuing country\/region\nExpiry date\n\n\n\n\n5127 8809 9999 9990\nBCMC \/ Mastercard Debit\nBCMC: None  Mastercard: 737\nuser\npassword\nBE\n03\/2030\n\n\n6703 4444 4444 4449\nBCMC \/ Maestro\nNone\nuser\npassword\nBE\n03\/2030\n\n\n4871 0499 9999 9910 1\nBCMC \/ Visa Debit\nBCMC: None  Visa: 737\nuser\npassword\nBE\n03\/2030\n\n\n\n 1 Depending on your payment method setup, transactions with this test card are routed to Bancontact or Visa.\nYou can force a decline using these credentials with \"holderName\": \"DECLINED\".\n    \"paymentMethod\": {\n      \"type\": \"bcmc\",\n      \"number\": \"4871049999999910\",\n      \"holderName\": \"DECLINED\",\n      \"expiryMonth\": \"03\",\n      \"expiryYear\": \"2030\"\n    }\nThis gets the following response:\n    \"refusalReason\": \"Refused\",\n    \"resultCode\": \"Refused\",\nYou can check the status of test payments in your\u00a0Customer Area\u00a0&gt;\u00a0Transactions\u00a0&gt;\u00a0Payments.\nAdd Bancontact card in your live Customer Area.\n\nConfigure the Drop-in using the Client Encryption Public Key from your live Customer Area.\n\nSee also\n\n\n                    Android Drop-in integration guide\n                \n                    SEPA Direct Debit\n                \n                    API Explorer\n                \n","type":"page","locale":"pt","boost":16,"hierarchy":{"lvl0":"Home","lvl1":"Payment methods","lvl2":"Bancontact","lvl3":"Bancontact card","lvl4":"Bancontact card Drop-in integration"},"hierarchy_url":{"lvl0":"https:\/\/docs.adyen.com\/pt","lvl1":"https:\/\/docs.adyen.com\/pt\/payment-methods","lvl2":"https:\/\/docs.adyen.com\/pt\/payment-methods\/bancontact","lvl3":"https:\/\/docs.adyen.com\/pt\/payment-methods\/bancontact\/bancontact-card","lvl4":"\/pt\/payment-methods\/bancontact\/bancontact-card\/android-drop-in"},"levels":5,"category":"Payment method","category_color":"green","tags":["Bancontact","Drop-in","integration"]},"articleFiles":{"bcmc-android-dropin-payments.js":"<p alt=\"\">bcmc-android-dropin-payments.js<\/p>"}}
