NAV Navbar
json php shell

Pendahuluan

Duitku membuat proses integrasi semudah mungkin. Memungkinkan halaman pembayaran Duitku tampil di halaman web/aplikasi anda setelah checkout, dengan proses integrasi yang sangat mudah. Serahkan pembayaran anda pada Duitku Pop. Memberikan opsional pembayaran dan konfirmasi pembayaran yang di lakukan oleh customer pada halaman anda. Hanya dengan anda memunculkan Duitku pop di halaman anda.

Pratinjau

  1. Pelanggan melakukan checkout pembayaran.
  2. Server merchant melakukan request transaksi ke API Duitku untuk mendapatkan DUITKU_REFERENCE.
  3. API Duitku merespon request dengan memberikan DUITKU_REFERENCE.
  4. Server merchant menampilkan halaman pembayaran pada situs mereka untuk ditampilkan pada pelanggan.
  5. Pelanggan memverifikasi detail transaksi dan klik tombol pembayaran. Sistem merchant memanggil fungsi checkout.process(DUITKU_REFERENCE, options).
  6. Sistem pembayaran Duitku memproses transaksi dan merespon status pembayaran. Duitku JS lalu melakukan callback yang telah disediakan di sisi merchant.
  7. Sistem pembayaran Duitku memberikan notifikasi status transaksi pada server merchant.

Langkah Integrasi

Flowchart pop

Untuk menghubungkan dengan API Duitku, ada beberapa hal yang perlu diketahui sebagai berikut.

Kode Merchant

Kode merchant adalah kode proyek yang didapatkan dari halaman merchant Duitku. Kode ini berguna sebagai pengenal proyek anda di setiap transaksinya nanti. Kode ini bisa anda dapatkan pada setiap proyek yang anda daftarkan di merchant portal. Langkah atau cara pembuatan proyek dapat anda lihat disini.

API Key (Merchant Key)

API merupakan singkatan dari Application Programming Interface. API key disini adalah kode otentikasi untuk dapat mengakses API Duitku. API key digunakan untuk mencegah penyalahgunaan atau pengguna berbahaya. Seperti kode merchant, API key bisa anda dapatkan pada setiap proyek yang anda daftarkan di merchant portal bersamaan dengan kode merchant.

Browser Yang Kompatibel

Platform Browser Versi
Web Chrome 26 dan terbaru
Firefox 29 dan terbaru
Internet Explorer 10 dan terbaru
Safari 6 dan terbaru
Mobile Chrome 32 dan terbaru
Android 4.4 dan terbaru
Safari 8 dan terbaru

Library

Anda dapat mengintegrasikan menggunakan Library Duitku untuk memulai transaksi menggunakan Duitku pada web atau aplikasi anda. Library akan membantu anda pada saat integrasi dengan Duitku. Untuk mengenal lebih lanjut anda dapat melihat Library Duitku pada package repository masing-masing library yang telah tersedia berikut ini.

Integrasi Backend atau Server

Tujuan dari Integrasi Backend adalah untuk mendapat DUITKU_REFERENCE dengan mengirimkan informasi pembayaran yang dibutuhkan. Kami menyediakan HTTP API untuk melakukannya.

Create Invoice

API Create Invoice digunakan untuk mendapatkan nomor referensi Duitku dengan mengirimkan parameter yang dibutuhkan ke API. Merchant akan mendapatkan nomor referensi Duitku, URL pembayaran, dan lainnya dari respon API Create Invoice.

Otentikasi Dasar

Otentikasi dasar yang digunakan Duitku adalah signature, timestamp, dan merchant code yang di kirim pada bagian header.

Signature adalah kode identifikasi transaksi. Berisi parameter transaksi yang telah di hash menggunakan metode hashing SHA256. Parameter yang berisi hash adalah merchant code, timestamp, kemudian API key dan harus berurutan.

Timestamp adalah timestamp UNIX dalam milidetik dalam zona waktu kami (Jakarta). Timestamp UNIX adalah cara untuk melacak waktu sebagai total detik yang berjalan.

Merchant code adalah ID proyek yang telah dibuat dan didaftarkan di halaman merchant Duitku.

Endpoint

https://api-prod.duitku.com/api/merchant/createInvoice

https://api-sandbox.duitku.com/api/merchant/createInvoice

Request Headers

Untuk membuat HTTP request, merchant harus menyertakan header seperti berikut:

Request Parameter

{
    "paymentAmount": 40000,
    "merchantOrderId": "1648542419",
    "productDetails": "Test Pay with duitku",
    "additionalParam": "",
    "merchantUserInfo": "",
    "customerVaName": "John Doe",
    "email": "[email protected]",
    "phoneNumber": "08123456789",
    "itemDetails": [{
        "name": "Test Item 1",
        "price": 10000,
        "quantity": 1
    }, {
        "name": "Test Item 2",
        "price": 30000,
        "quantity": 3
    }],
    "customerDetail": {
        "firstName": "John",
        "lastName": "Doe",
        "email": "[email protected]",
        "phoneNumber": "08123456789",
        "billingAddress": {
            "firstName": "John",
            "lastName": "Doe",
            "address": "Jl. Kembangan Raya",
            "city": "Jakarta",
            "postalCode": "11530",
            "phone": "08123456789",
            "countryCode": "ID"
        },
        "shippingAddress": {
            "firstName": "John",
            "lastName": "Doe",
            "address": "Jl. Kembangan Raya",
            "city": "Jakarta",
            "postalCode": "11530",
            "phone": "08123456789",
            "countryCode": "ID"
        }
    },
    "callbackUrl": "https:\/\/example.com\/api-pop\/backend\/callback.php",
    "returnUrl": "https:\/\/example.com\/api-pop\/backend\/redirect.php",
    "expiryPeriod": 10
}
<?php
    $merchantCode = 'DXXXX'; // dari duitku
    $merchantKey = 'XXXXXXXCX17XXXX5XX5XXXXXX0X3XXAF'; // dari duitku

    $timestamp = round(microtime(true) * 1000); //in milisecond
    $paymentAmount = 40000;
    $merchantOrderId = time() . ''; // dari merchant, unique
    $productDetails = 'Test Pay with duitku';
    $email = '[email protected]'; // email pelanggan merchant
    $phoneNumber = '08123456789'; // nomor tlp pelanggan merchant (opsional)
    $additionalParam = ''; // opsional
    $merchantUserInfo = ''; // opsional
    $customerVaName = 'John Doe'; // menampilkan nama pelanggan pada tampilan konfirmasi bank
    $callbackUrl = 'http://example.com/api-pop/backend/callback.php'; // url untuk callback
    $returnUrl = 'http://example.com/api-pop/backend/redirect.php';//'http://example.com/return'; // url untuk redirect
    $expiryPeriod = 10; // untuk menentukan waktu kedaluarsa dalam menit
    $signature = hash('sha256', $merchantCode.$timestamp.$merchantKey);
    //$paymentMethod = 'VC'; //digunakan untuk direksional pembayaran

    // Detail pelanggan
    $firstName = "John";
    $lastName = "Doe";

    // Alamat
    $alamat = "Jl. Kembangan Raya";
    $city = "Jakarta";
    $postalCode = "11530";
    $countryCode = "ID";

    $address = array(
        'firstName' => $firstName,
        'lastName' => $lastName,
        'address' => $alamat,
        'city' => $city,
        'postalCode' => $postalCode,
        'phone' => $phoneNumber,
        'countryCode' => $countryCode
    );

    $customerDetail = array(
        'firstName' => $firstName,
        'lastName' => $lastName,
        'email' => $email,
        'phoneNumber' => $phoneNumber,
        'billingAddress' => $address,
        'shippingAddress' => $address
    );


    $item1 = array(
        'name' => 'Test Item 1',
        'price' => 10000,
        'quantity' => 1);

    $item2 = array(
        'name' => 'Test Item 2',
        'price' => 30000,
        'quantity' => 3);

    $itemDetails = array(
        $item1, $item2
    );

    /*Khusus untuk metode pembayaran Kartu Kredit
    $creditCardDetail = array (
        'acquirer' => '014',
        'binWhitelist' => array (
            '014',
            '400000'
        )
    );*/

    $params = array(
        'paymentAmount' => $paymentAmount,
        'merchantOrderId' => $merchantOrderId,
        'productDetails' => $productDetails,
        'additionalParam' => $additionalParam,
        'merchantUserInfo' => $merchantUserInfo,
        'customerVaName' => $customerVaName,
        'email' => $email,
        'phoneNumber' => $phoneNumber,
        'itemDetails' => $itemDetails,
        'customerDetail' => $customerDetail,
        //'creditCardDetail' => $creditCardDetail,
        'callbackUrl' => $callbackUrl,
        'returnUrl' => $returnUrl,
        'expiryPeriod' => $expiryPeriod
        //'paymentMethod' => $paymentMethod
    );

    $params_string = json_encode($params);
    //echo $params_string;
    $url = 'https://api-sandbox.duitku.com/api/merchant/createinvoice'; // Sandbox
    // $url = 'https://api-prod.duitku.com/api/merchant/createinvoice'; // Production

    //log transaksi untuk debug 
    // file_put_contents('log_createInvoice.txt', "* log *\r\n", FILE_APPEND | LOCK_EX);
    // file_put_contents('log_createInvoice.txt', $params_string . "\r\n\r\n", FILE_APPEND | LOCK_EX);
    // file_put_contents('log_createInvoice.txt', 'x-duitku-signature:' . $signature . "\r\n\r\n", FILE_APPEND | LOCK_EX);
    // file_put_contents('log_createInvoice.txt', 'x-duitku-timestamp:' . $timestamp . "\r\n\r\n", FILE_APPEND | LOCK_EX);
    // file_put_contents('log_createInvoice.txt', 'x-duitku-merchantcode:' . $merchantCode . "\r\n\r\n", FILE_APPEND | LOCK_EX);
    $ch = curl_init();


    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");                                                                     
    curl_setopt($ch, CURLOPT_POSTFIELDS, $params_string);                                                                  
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);                                                                      
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(                                                                          
        'Content-Type: application/json',                                                                                
        'Content-Length: ' . strlen($params_string),
        'x-duitku-signature:' . $signature ,
        'x-duitku-timestamp:' . $timestamp ,
        'x-duitku-merchantcode:' . $merchantCode    
        )                                                                       
    );   
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

    //execute post
    $request = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

    if($httpCode == 200)
    {
        $result = json_decode($request, true);
        //header('location: '. $result['paymentUrl']);
        print_r($result, false);
        // echo "paymentUrl :". $result['paymentUrl'] . "<br />";
        // echo "reference :". $result['reference'] . "<br />";
        // echo "statusCode :". $result['statusCode'] . "<br />";
        // echo "statusMessage :". $result['statusMessage'] . "<br />";
    }
    else
    {
        // echo $httpCode . " " . $request ;
        echo $request ;
    }
?>
curl --location --request POST 'https://api-sandbox.duitku.com/api/merchant/createInvoice' \
--header 'x-duitku-signature: 506f88f1000dfb4a6541ff94d9b8d1e6' \
--header 'x-duitku-timestamp: 1629219840000' \
--header 'x-duitku-merchantcode: DXXXX' \
--header 'Content-Type: application/json' \
--data-raw
{ 
   "paymentAmount":40000,
   "merchantOrderId":"1579838431",
   "productDetails":"Test Pay with duitku",
   "additionalParam":"",
   "merchantUserInfo":"",
   "customerVaName":"John Doe",
   "email":"[email protected]",
   "phoneNumber":"08123456789",
   "itemDetails":[ 
      { 
         "name":"Test Item 1",
         "price":10000,
         "quantity":1
      },
      { 
         "name":"Test Item 2",
         "price":30000,
         "quantity":3
      }
   ],
   "customerDetail":{ 
      "firstName":"John",
      "lastName":"Doe",
      "email":"[email protected]",
      "phoneNumber":"08123456789",
      "billingAddress":{ 
         "firstName":"John",
         "lastName":"Doe",
         "address":"Jl. Kembangan Raya",
         "city":"Jakarta",
         "postalCode":"11530",
         "phone":"08123456789",
         "countryCode":"ID"
      },
      "shippingAddress":{ 
         "firstName":"John",
         "lastName":"Doe",
         "address":"Jl. Kembangan Raya",
         "city":"Jakarta",
         "postalCode":"11530",
         "phone":"08123456789",
         "countryCode":"ID"
      }
   },
   "callbackUrl":"http:\/\/example.com\/api-pop\/backend\/callback.php",
   "returnUrl":"http:\/\/example.com\/api-pop\/backend\/redirect.php",
   "expiryPeriod":10
}
Parameter Tipe Wajib Deskripsi Contoh
paymentAmount integer

Nominal pembayaran. 150000
merchantOrderId string(50)

Order ID dari merchant. abcde12345
productDetails string(255)

Detail produk. Pembayaran untuk Toko Contoh
email string(255)

Email pelanggan merchant. [email protected]
additionalParam string(255)

Parameter tambahan (opsional).
merchantUserInfo string(255)

Username atau email pelanggan (opsional). [email protected]
customerVaName string(20)

Nama yang akan muncul pada halaman konfirmasi pembayaran. John Doe
phoneNumber string(50)

Nomor telepon pelanggan (opsional). 08123456789
itemDetails itemDetails

Informasi detail barang (opsional).
customerDetail customerDetail

Informasi detail pelanggan (opsional).
callbackUrl string(255)

URL untuk transaksi callback. http://example.com/api-pop/backend/callback.php
returnUrl string(255)

URL untuk redirect apabila transaksi telah selesai atau dibatalkan. http://example.com/api-pop/backend/redirect.php
expiryPeriod integer

Masa berlaku transaksi sebelum kedaluarsa. Untuk detail expiryPeriod bisa dilihat disini. 5, 10 or 60 (dalam menit)
paymentMethod string

Payment Method adalah sebuah kode metode pembayaran. VC
creditCardDetail creditCardDetail

Detail parameter untuk pembayaran kartu kredit (opsional).

Duitku menggunakan merchantCode dan apiKey untuk memberi akses API. Anda dapat membuat merchantCode pada Merchant Portal.

Respon Parameter

{
    "merchantCode": "DXXXX",
    "reference": "DXXXXS875LXXXX32IJZ7",
    "paymentUrl": "https://app-sandbox.duitku.com/redirect_checkout?reference=DXXXXS875LXXXX32IJZ7",
    "statusCode": "00",
    "statusMessage": "SUCCESS"
}
Parameter Tipe Deskripsi Contoh
merchantCode string Merchant code dari Duitku. DXXXX
reference string Referensi dari Duitku (perlu disimpan pada system). DXXXXS875LXXXX32IJZ7
paymentUrl string URL pembayaran jika anda ingin menggunakan halaman pembayaran Duitku. https://app-sandbox.duitku.com/redirect_checkout?reference=DXXXXS875LXXXX32IJZ7
statusCode string Respon kode status. 00
statusMessage string Respon status. Success

Obyek JSON

Koleksi obyek JSON.

Item Details

"itemDetails": [{
    "name": "Apel",
    "quantity": 2,
    "price": 50000
}]
Parameter Tipe Wajib Deskripsi Contoh
name string(50)

Nama barang. Apel
quantity integer

Banyaknya barang. 2
price integer

Harga barang.
Catatan: Tidak diperkenankan menggunakan desimal.
50000

Customer Detail

"customerDetail": {
    "firstName": "John",
    "lastName": "Doe",
    "email": "[email protected]",
    "phoneNumber": "081234567890",
    "billingAddress": {
      "firstName": "John",
      "lastName": "Doe",
      "address": "St Panjang",
      "city": "Jakarta",
      "postalCode": "41011",
      "phone": "081234567890",
      "countryCode": "ID"
    },
    "shippingAddress": {
      "firstName": "John",
      "lastName": "Doe",
      "address": "St Panjang",
      "city": "Jakarta",
      "postalCode": "41011",
      "phone": "081234567890",
      "countryCode": "ID"
    }
}
Parameter Tipe Wajib Deskripsi Contoh
firstName string(50)

Nama depan pelanggan. John
lastName string(50)

Nama belakang pelanggan. Doe
email string(50)

Email pelanggan. [email protected]
phoneNumber string(50)

Nomor telepon pelanggan. 081234567890
billingAddress Address

Alamat tagihan pelanggan.
shippingAddress Address

Alamat pengiriman pelanggan.

Address

{
  "firstName": "John",
  "lastName": "Doe",
  "address": "St Panjang",
  "city": "Jakarta",
  "postalCode": "41011",
  "phone": "081234567890",
  "countryCode": "ID"
}
Parameter Tipe Wajib Deskripsi Contoh
firstName string(50)

Nama depan pelanggan. John
lastName string(50)

Nama belakang pelanggan. Doe
address string(50)

Alamat tagihan atau pengiriman. St Panjang
city string(50)

Kota pada alamat. Jakarta
postalCode string(50)

Kode pos alamat. 41011
phone string(50)

Nomor telepon untuk pengiriman atau tagihan. 081234567890
countryCode string(50)

ISO 3166-1 alpha-3. ID

Credit Card Detail

Berikut ini adalah parameter tambahan untuk request transaksi menggunakan channel kartu kredit bersifat opsional.

"creditCardDetail": {
  "acquirer":"014",
  "binWhitelist":["014","022", "400000"]
}
Parameter Tipe Wajib Keterangan Contoh
acquirer string(3)

Anda dapat menentukan acquirer bank yang akan digunakan pada transaksi yang akan dilakukan.
014 untuk BCA.
022 untuk CIMB.
014
binWhitelist array string(6)

Parameter untuk membatasi kartu kredit yang diizinkan pada transaksi. Menggunakan kode bank(3 digit) atau nomor bin kartu kredit(6 digit). Maksimal 25 list bin. 014, 022, 400000

Callback

<?php
    $apiKey = 'XXXXXXXCX17XXXX5XX5XXXXXX0X3XXAF'; // API key anda
    $merchantCode = isset($_POST['merchantCode']) ? $_POST['merchantCode'] : null; 
    $amount = isset($_POST['amount']) ? $_POST['amount'] : null; 
    $merchantOrderId = isset($_POST['merchantOrderId']) ? $_POST['merchantOrderId'] : null; 
    $productDetail = isset($_POST['productDetail']) ? $_POST['productDetail'] : null; 
    $additionalParam = isset($_POST['additionalParam']) ? $_POST['additionalParam'] : null; 
    $paymentCode = isset($_POST['paymentCode']) ? $_POST['paymentCode'] : null; 
    $resultCode = isset($_POST['resultCode']) ? $_POST['resultCode'] : null; 
    $merchantUserId = isset($_POST['merchantUserId']) ? $_POST['merchantUserId'] : null; 
    $reference = isset($_POST['reference']) ? $_POST['reference'] : null; 
    $signature = isset($_POST['signature']) ? $_POST['signature'] : null; 
    $publisherOrderId = isset($_POST['publisherOrderId']) ? $_POST['publisherOrderId'] : null; 

    //log callback untuk debug 
    // file_put_contents('callback.txt', "* Callback *\r\n", FILE_APPEND | LOCK_EX);

    if(!empty($merchantCode) && !empty($amount) && !empty($merchantOrderId) && !empty($signature))
    {
        $params = $merchantCode . $amount . $merchantOrderId . $apiKey;
        $calcSignature = md5($params);

        if($signature == $calcSignature)
        {
            //Callback tervalidasi
            //Silahkan rubah status transaksi anda disini
            // file_put_contents('callback.txt', "* Berhasil *\r\n\r\n", FILE_APPEND | LOCK_EX);

        }
        else
        {
            // file_put_contents('callback.txt', "* Bad Signature *\r\n\r\n", FILE_APPEND | LOCK_EX);
            throw new Exception('Bad Signature');
        }
    }
    else
    {
        // file_put_contents('callback.txt', "* Bad Parameter *\r\n\r\n", FILE_APPEND | LOCK_EX);
        throw new Exception('Bad Parameter');
    }
?>
curl --location --request POST 'http://example.com/api-pop/backend/callback.php' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'merchantOrderId=abcde12345' \
--data-urlencode 'amount=150000' \
--data-urlencode 'merchantCode=DXXXX' \
--data-urlencode 'productDetails=Pembayaran untuk Toko Contoh' \
--data-urlencode 'additionalParam=contoh param' \
--data-urlencode 'paymentCode=VA' \
--data-urlencode 'resultCode=00' \
--data-urlencode '[email protected]' \
--data-urlencode 'reference=DXXXXCX80TXXX5Q70QCI' \
--data-urlencode 'signature=506f88f1000dfb4a6541ff94d9b8d1e6'\
--data-urlencode 'publisherOrderId=MGUHWKJX3M1KMSQN5'

Pada saat pelanggan melakukan pembayaran. Duitku akan mengirimkan HTTP POST yang menyertakan hasil pembayaran suatu tagihan dari pelanggan. Merchant perlu menyediakan halaman untuk menerima callback tersebut. Supaya dapat memproses hasil transaksi yang telah dilakukan oleh pelanggan.

Parameter

Parameter Deskripsi Contoh
merchantCode merchant code dari Duitku. D0010
paymentAmount Nominal pembayaran. 150000
merchantOrderId Order ID dari merchant. abcde12345
productDetail Detail produk. Pembayaran untuk Toko Contoh
additionalParam Parameter tambahan (opsional).
paymentCode Metode pembayaran. VC
resultCode Status pembayaran. 00 - Success
01 - Failed
merchantUserId User ID dari merchant. [email protected]
publisherOrderId Nomor unik pembayaran transaksi dari Duitku. Mohon disimpan untuk keperluan pencatatan atau pelacakan transaksi. MGUHWKJX3M1KMSQN5
reference Nomor referensi dari Duitku, harap disimpan untuk melakukan pengecekan transaksi. DXXXXS875LXXXX32IJZ7
signature Signature. Formula: MD5(merchantcode + amount + merchantOrderId + merchantKey)

Integrasi Frontend atau View

Tinjauan Umum

Tujuan dari Integrasi Frontend adalah untuk menampilkan halaman pembayaran Duitku di dalam situs merchant.

Sertakan duitku.js pada halaman situs anda, sehingga modul checkout Duitku dapat digunakan.

Merchant dapat memulai proses pembayaran dengan memanggil fungsi checkout.process menggunakan DUITKU_REFERENCE yang didapat dari integrasi backend sebagai parameter.

Lokasi Modul Duitku JS

Anda dapat menambahkan tag berikut pada bagian head HTML anda.

<script src="https://app-prod.duitku.com/lib/js/duitku.js"></script>

<script src="https://app-sandbox.duitku.com/lib/js/duitku.js"></script>

Duitku JS

Setelah anda menambahkan library Duitku pada HTML anda. Anda dapat menggunakan obyek checkout.process seperti berikut.

process(duitkuReference, options)

checkout.process("DXXXXS875LXXXX32IJZ7", {
    defaultLanguage: "id", //opsional pengaturan bahasa
    successEvent: function(result){
    // tambahkan fungsi sesuai kebutuhan anda
        console.log('success');
        console.log(result);
        alert('Payment Success');
    },
    pendingEvent: function(result){
    // tambahkan fungsi sesuai kebutuhan anda
        console.log('pending');
        console.log(result);
        alert('Payment Pending');
    },
    errorEvent: function(result){
    // tambahkan fungsi sesuai kebutuhan anda
        console.log('error');
        console.log(result);
        alert('Payment Error');
    },
    closeEvent: function(result){
    // tambahkan fungsi sesuai kebutuhan anda
        console.log('customer closed the popup without finishing the payment');
        console.log(result);
        alert('customer closed the popup without finishing the payment');
    }
}); 

Mulai halaman pembayaran Duitku.

Parameter:

Nama Tipe Deskripsi
duitkuReference string Nomor referensi Duitku didapat pada integrasi backend.
options.defaultLanguage string (opsional) Pengaturan bahasa dengan code.
en - inggris.
id - indonesia.
options.successEvent function (opsional) Callback pembayaran sukses (00).
options.pendingEvent function (opsional) Callback pembayaran pending (01).
options.errorEvent function (opsional) Callback pembayaran error.
options.closeEvent function (opsional) Digunakan ketika pelanggan menutup popup pembayaran tanpa menyelesaikan pembayaran (02).

JS Callback

Respon Transaksi

{
    "resultCode": "00",
    "merchantOrderId": "abcde12345",
    "reference": "qwerty12345"
}

Obyek yang mewakili respon transaksi dari callback Duitku.

Name Tipe Deskripsi
resultCode string Result code dari Duitku.
merchantOrderId string Order ID dari merchant.
reference string Reference dari Duitku.

Window Redirection

Duitku menyediakan alternatif lain untuk menampilkan halaman transaksi selain menggunakan duitku.js, yaitu window redirection. Merchant dapat menggunakan response value paymentUrl dari API CreateInvoice. Merchant tidak perlu menyertakan duitku.js pada halaman situs, sehingga pelanggan langsung diarahkan pada halaman pembayaran di situs Duitku. Untuk konfigurasi bahasa anda dapat menambahkan &lang=id query pada paymentUrl sebagai berikut.

https://app-sandbox.duitku.com/redirect_checkout?reference=DXXXXS875LXXXX32IJZ7&lang=id

Selain dari pengaturan bahasa duitku memiliki pengaturan dalam konversi mata uang. Anda dapat menambahkan &currency=USD query. Duitku mendukung 2 konversi yaitu :

Dengan menggunakan metode ini, merchant dapat langsung menampilkan halaman pembayaran secara penuh seperti berikut ini:

Redirect

Setelah request transaksi dan tagihan terbentuk, dari halaman pembayaran Duitku(Window Redirection) akan redirect ke alamat yang diberikan di parameter Create Invoice(returnUrl) pada saat setelah pembayaran atau melalui tombol kembali. Dan pada saat redirect tersebut Duitku akan menyertakan beberapa parameter tagihan yang bersangkutan. Anda harus membuat halaman landing di alamat return URL ini.

Contoh

GET: http://www.merchantweb.com/redirect.php?merchantOrderId=abcde12345&resultCode=00&reference=DXXXXS875LXXXX32IJZ7

Parameter

Parameter Deskripsi Contoh
merchantOrderId Order ID dari merchant. abcde12345
reference Nomor referensi dari Duitku. DXXXXS875LXXXX32IJZ7
resultCode Kode informasi hasil proses. 00

Payment Method

Berikut ini payment method yang tersedia di Duitku dan dapat anda gunakan. Anda dapat memasukan payment method(paymentMethod) pada parameter create invoice, sebagai langkah pembayaran langsung ke satu pembayaran tertentu. Pelanggan akan langsung di arahkan pada pembayaran yang dituju tanpa memilih.

Jenis Pembayaran Kode Pembayaran Keterangan
Credit Card

VC

(Visa / Master Card / JCB)
Virtual Account

BC

BCA Virtual Account

M2

Mandiri Virtual Account

VA

Maybank Virtual Account

I1

BNI Virtual Account

B1

CIMB Niaga Virtual Account

BT

Permata Bank Virtual Account

A1

ATM Bersama

AG

Bank Artha Graha

NC

Bank Neo Commerce/BNC

BR

BRIVA
Ritel

FT

Pegadaian/ALFA/Pos

A2

POS Indonesia

IR

Indomaret
E-Wallet

OV

OVO (Support Void)

SA

ShopeePay Apps (Support Void)

LF

LinkAja Apps (Fixed Fee)

LA

LinkAja Apps (Percentage Fee)

DA

DANA

SL

ShopeePay Account Link

OL

OVO Account Link
QRIS

SP

ShopeePay

LQ

LinkAja

NQ

Nobu
Credit

DN

Indodana Paylater

AT

ATOME

Errors

Respon HTTP

Kode Error Nama Error Keterangan
400 Bad Request Ada kesalahan pada saat mengirimkan permohonan pada API.
401 Unauthorized Akses di tolak batasan kewenangan.
404 Not Found Halaman atau API yang di request tidak di temukan.
500 Internal Server Error Error pada saat melakukan proses permohonan.

Respon API

Callback

Kode Nama Keterangan
00 Success Transaksi telah sukses terbayarkan.
02 Failed Transaksi gagal terbayarkan.

Redirect

Kode Nama Keterangan
00 Success Transaksi telah terbayar.
01 Process Transaksi belum terbayar.
02 Canceled/Failed Transaksi dibatalkan atau tidak terbayar.

Uji Coba

Berikut adalah daftar kredensial transaksi dummy yang dapat digunakan untuk melakukan transaksi di sandbox.

Kartu Kredit

3D Secure Transaction

Tipe Kartu Nomor Kartu Kredit Masa Berlaku CVV
VISA 4000 0000 0000 0044 03/33 123
MASTERCARD 5500 0000 0000 0004 03/33 123

Virtual Akun

Demo transaction virtual account sandbox klik-disini.

E-Money

Shopee

Untuk pengetesan transaksi shopee dapat mengunduh shopeeapp staging apk disini.

Paylater

Indodana

Nomor Telepon PIN
081282325566 000000

Atome

Transaksi Berhasil

Country Code Nomor Telepon OTP
ID +62811000122 7524

Transaksi Gagal

Country Code Nomor Telepon OTP
ID +62810000001500 1111

Pop API Demo

Pop API Demo klik-disini.

Contoh Proyek

Untuk contoh proyek, anda dapat mengakses tautan Github disini.