On this page, you can find additional configuration for adding DANA to your Components integration.
Before you begin
This page assumes you have already:
API reference
You don't need to send additional fields for DANA. To see optional fields that you can send for all payment methods, choose the endpoint you integrated:
- /sessions: This is the default with Components v5.0.0 or later.
- /payments: If you implemented an additional use case.
Component configuration
If your integration uses iOS Components v5.0.0 or later, configure and create an instance of the DANA Component:
//Create a payment method object for DANA.
let paymentMethod = paymentMethods.paymentMethod(ofType: danaComponentPaymentMethod.self)
//Create a configuration object for the DANA Component.
var danaComponentConfiguration = danaComponent.Configuration()
//Set additional parameters on the configuration object.
danaComponentConfiguration.localizationParameters = //Optional custom localization parameters.
There is no required DANA specific integration for Components.
Recurring payments
DANA supports recurring transactions. To make recurring transactions, you need to:Create a token
To create a token, include in your /payments request:
storePaymentMethod
: true- shopperReference: Your unique identifier for the shopper.
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 webhook.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
: Use Subscription for a series of transactions following a fixed time interval or UnscheduledCardOnFile for contracts with non-fixed time interval.curl https://checkout-test.adyen.com/v68/payments \ -H "x-API-key: YOUR_X-API-KEY" \ -H "content-type: application/json" \ -d '{ "amount":{ "value":1000, "currency":"IDR" }, "paymentMethod":{ "type":"dana", "storedPaymentMethodId":"7219687191761347" }, "reference":"YOUR_ORDER_NUMBER", "merchantAccount":"YOUR_MERCHANT_ACCOUNT", "shopperReference":"YOUR_UNIQUE_SHOPPER_ID_IOfW3k9G2PvXFu2j", "shopperInteraction":"ContAuth", "recurringProcessingModel": "Subscription" }'
# Set your X-API-KEY with the API key from the Customer Area. adyen = Adyen::Client.new adyen.api_key = "YOUR_X-API-KEY" response = adyen.checkout.payments({ :amount => { :currency => "IDR", :value => 1000 }, :reference => "YOUR_ORDER_NUMBER", :paymentMethod => { :type => "dana", :storedPaymentMethodId => "7219687191761347" }, :returnUrl => "https://your-company.com/checkout?shopperOrder=12xy..", :shopperReference => "YOUR_UNIQUE_SHOPPER_ID_IOfW3k9G2PvXFu2j", :merchantAccount => "YOUR_MERCHANT_ACCOUNT", :shopperInteraction => "ContAuth", :recurringProcessingModel => "Subscription" })
// Set YOUR_X-API-KEY with the API key from the Customer Area. // Change to Environment.LIVE and add the Live URL prefix when you're ready to accept live payments. Client client = new Client("YOUR_X-API-KEY", Environment.TEST); Checkout checkout = new Checkout(client); PaymentsRequest paymentsRequest = new PaymentsRequest(); String merchantAccount = "YOUR_MERCHANT_ACCOUNT"; paymentsRequest.setMerchantAccount(merchantAccount); Amount amount = new Amount(); amount.setCurrency("IDR"); amount.setValue(15000L); paymentsRequest.setAmount(amount); DefaultPaymentMethodDetails paymentMethodDetails = new DefaultPaymentMethodDetails(); paymentMethodDetails.setStoredPaymentMethodId("7219687191761347"); paymentMethodDetails.setType("dana"); paymentsRequest.setPaymentMethod(paymentMethodDetails); paymentsRequest.setReference("YOUR_ORDER_NUMBER"); paymentsRequest.setReturnUrl("https://your-company.com/checkout?shopperOrder=12xy.."); paymentsRequest.setShopperReference("YOUR_UNIQUE_SHOPPER_ID_IOfW3k9G2PvXFu2j"); paymentsRequest.setShopperInteraction("ContAuth"); paymentsRequest.setRecurringProcessingModel("Subscription"); PaymentsResponse paymentsResponse = checkout.payments(paymentsRequest);
// Set your X-API-KEY with the API key from the Customer Area. $client = new \Adyen\Client(); $client->setXApiKey("YOUR_X-API-KEY"); $service = new \Adyen\Service\Checkout($client); $params = array( "amount" => array( "currency" => "IDR", "value" => 1000 ), "reference" => "YOUR_ORDER_NUMBER", "paymentMethod" => array( "type" => "dana", "storedPaymentMethodId" => "7219687191761347" ), "returnUrl" => "https://your-company.com/checkout?shopperOrder=12xy..", "shopperReference" => "YOUR_UNIQUE_SHOPPER_ID_IOfW3k9G2PvXFu2j", "recurringProcessingModel" => "Subscription", "shopperInteraction" => "ContAuth", "merchantAccount" => "YOUR_MERCHANT_ACCOUNT" ); $result = $service->payments($params);
#Set your X-API-KEY with the API key from the Customer Area. adyen = Adyen.Adyen() adyen.client.xapikey = 'YOUR_X-API-KEY' result = adyen.checkout.payments({ 'amount': { 'value': 1000, 'currency': 'IDR' }, 'reference': 'YOUR_ORDER_NUMBER', 'paymentMethod': { 'type': 'dana', 'storedPaymentMethodId': '7219687191761347' }, 'returnUrl': 'https://your-company.com/checkout?shopperOrder=12xy..', 'shopperReference': 'YOUR_UNIQUE_SHOPPER_ID_IOfW3k9G2PvXFu2j' 'merchantAccount': 'YOUR_MERCHANT_ACCOUNT', 'shopperInteraction':'ContAuth', 'recurringProcessingModel': 'Subscription' })
// Set your X-API-KEY with the API key from the Customer Area. var client = new Client ("YOUR_X-API-KEY", Environment.Test); var checkout = new Checkout(client); var amount = new Adyen.Model.Checkout.Amount("IDR", 1000); var details = new Adyen.Model.Checkout.DefaultPaymentMethodDetails{ Type = "dana", StoredPaymentMethodId = "7219687191761347" }; var paymentsRequest = new Adyen.Model.Checkout.PaymentRequest { Reference = "YOUR_ORDER_NUMBER", Amount = amount, ReturnUrl = @"https://your-company.com/checkout?shopperOrder=12xy..", MerchantAccount = "YOUR_MERCHANT_ACCOUNT", ShopperReference = "YOUR_UNIQUE_SHOPPER_ID_IOfW3k9G2PvXFu2j", RecurringProcessingModel = Adyen.Model.Checkout.PaymentRequest.RecurringProcessingModelEnum.Subscription, ShopperInteraction = Adyen.Model.Checkout.PaymentRequest.ShopperInteractionEnum.ContAuth, PaymentMethod = details }; var paymentResponse = checkout.Payments(paymentsRequest);
// Set your X-API-KEY with the API key from the Customer Area. const {Client, Config, CheckoutAPI} = require('@adyen/api-library'); const config = new Config(); // Set your X-API-KEY with the API key from the Customer Area. config.apiKey = '[API_KEY]'; config.merchantAccount = '[YOUR_MERCHANT_ACCOUNT]'; const client = new Client({ config }); client.setEnvironment("TEST"); const checkout = new CheckoutAPI(client); checkout.payments({ amount: { currency: "IDR", value: 1000 }, paymentMethod: { type: 'dana', storedPaymentMethodId: "7219687191761347" }, reference: "YOUR_ORDER_NUMBER", merchantAccount: config.merchantAccount, shopperReference: "YOUR_UNIQUE_SHOPPER_ID_IOfW3k9G2PvXFu2j", returnUrl: "https://your-company.com/checkout?shopperOrder=12xy..", shopperInteraction: "ContAuth", recurringProcessingModel: "Subscription" }).then(res => res);
Test and go live
To test successful DANA live payments, you need to use a real mobile number registered with a DANA account.
If you are encountering issues with testing DANA payments, contact our Support Team.
Check the status of DANA test payments in your Customer Area > Transactions > Payments.
Before you can accept live DANA payments, you need to submit a request for DANA in your live Customer Area.