Are you looking for test card numbers?

Would you like to contact support?

Payment-method icon


Add Indonesian payment methods to an existing drop-in integration.

Our Web Drop-in renders cash payments at convenience stores and bank transfer options in your payment form, and presents the shopper with a voucher to complete the payment.

Before you begin

This page explains how to add Indonesian payment methods to your existing Web Drop-in integration. The Web Drop-in integration works the same way for all payment methods. If you haven't done this integration yet, refer to our Drop-in integration guide.

Before starting your payment method integration:

  1. Make sure that you have set up your back end implementation, and added Drop-in to your payments form.
  2. Add the payment method in your test Customer Area.

Show the payment method in your payment form

Drop-in uses the countryCode and the amount.currency from your /paymentMethods request to show the available payment methods to your shopper.

To show the required payment method type in your payment form, specify in your /paymentMethods request:

Make a payment

When the shopper selects to pay, Drop-in calls the onSubmit event, which contains a

  1. Pass the to your server.

  2. From your server, make a /payments request, specifying:
    • paymentMethod: The from the onSubmit event from your front end.
    • amount.value: The amount of the transaction, in minor units without decimals. For example, submit a value of 10000 IDR as 10000.
curl \
-H "x-API-key: YOUR_X-API-KEY" \
-H "content-type: application/json" \
-d '{
  "{ from onSubmit}paymentMethod{/hint}":{
# Set your X-API-KEY with the API key from the Customer Area.
adyen =
adyen.api_key = "YOUR_X-API-KEY"
response = adyen.checkout.payments({
  :amount => {
    :currency => "IDR",
    :value => 10000
  :reference => "YOUR_ORDER_NUMBER",
  :paymentMethod => {
    :type => "doku_alfamart",
    :firstName => "John",
    :lastName => "Smith",
    :shopperEmail => ""
  :returnUrl => "",
  :merchantAccount => "YOUR_MERCHANT_ACCOUNT"
// 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";

    Amount amount = new Amount();

    DefaultPaymentMethodDetails paymentMethodDetails = new DefaultPaymentMethodDetails();


    PaymentsResponse paymentsResponse = checkout.payments(paymentsRequest);
// Set your X-API-KEY with the API key from the Customer Area.
$client = new \Adyen\Client();
$service = new \Adyen\Service\Checkout($client);

$params = array(
  "amount" => array(
    "currency" => "IDR",
    "value" => 10000
  "reference" => "YOUR_ORDER_NUMBER",
  "paymentMethod" => array(
    "type" => "doku_alfamart",
    "firstName" => "John",
    "lastName" => "Smith",
    "shopperEmail" => ""
  "returnUrl" => "",
  "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': 10000,
      'currency': 'IDR'
   'reference': 'YOUR_ORDER_NUMBER',
   'paymentMethod': {
      'type': 'doku_alfamart',
      'firstName': 'John',
      'lastName': 'Smith',
      'shopperEmail': ''
   'returnUrl': '',
   'merchantAccount': 'YOUR_MERCHANT_ACCOUNT'
// 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 Model.Checkout.Amount("IDR", 10000);
var details = new Model.Checkout.DefaultPaymentMethodDetails{
  Type = "doku_alfamart",
  FirstName = "John",
  LastName = "Smith",
  ShopperEmail = ""
var paymentRequest = new Adyen.Model.Checkout.PaymentRequest
  Reference = "YOUR_ORDER_NUMBER",
  Amount = amount,
  ReturnUrl = @"",
  MerchantAccount = "YOUR_MERCHANT_ACCOUNT",
  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 });
const checkout = new CheckoutAPI(client);
    amount: { currency: "IDR", value: 10000 },
    paymentMethod: {
        type: 'doku_alfamart',
        firstName: 'John',
        lastName: 'Smith',
        shopperEmail: ''
    reference: "YOUR_ORDER_NUMBER",
    returnUrl: "",
    merchantAccount: config.merchantAccount
}).then(res => res);

The /payments response contains:

  • resultCode: PresentToShopper
  • action: Object containing information about the voucher.
/payments response
      "shopperName":"J Smith",
  1. Pass the action object to your front end. Drop-in needs the action object to present the voucher to the shopper.

Present the payment result

Make sure to handle the action object obtained from the /payments response in handleAction to present the voucher to the shopper.
As the voucher is an offline payment method, there is no need to handle the redirect back from the acquirer. We will send you a webhook notification informing you about the payment status.
The eventCode values you receive with your notification are:

eventCode success field Description Action to take resultCode
PENDING true The voucher reference is successfully created and the transaction is pending. Present the shopper with the voucher and wait for the payment. PresentToShopper
AUTHORISATION false The voucher reference is not successfully generated and the transaction failed. Cancel the order and inform the shopper that the payment failed. Error
AUTHORISATION true The shopper successfully completed the payment. Inform the shopper that the payment has been successful and proceed with the order. PresentToShopper
OFFER_CLOSED true The shopper did not complete the payment before the voucher expired. Cancel the order and inform the shopper that the payment timed out. PresentToShopper

Optional customization

You can customize the expiry date of the payment voucher. By default, the validity period is 48 hours. To change the validity of the voucher, contact the Support Team.

You can change the language of the payment voucher to Indonesian by using the language code id-ID. To do so, make sure to specify the locale in the code for the checkout page.

Test and go live

Use our test vouchers and card numbers to simulate the payments.

Check the status of the test payments in your Customer Area, under Transactions > Payments.

Before you can accept live payments, you need to submit a request for online banking and cash payments at convenience stores in Indonesia in your live Customer Area.

See also