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; 
    $spUserHash = isset($_POST['spUserHash']) ? $_POST['spUserHash'] : null; 
    $settlementDate = isset($_POST['settlementDate']) ? $_POST['settlementDate'] : null; 
    $issuerCode = isset($_POST['issuerCode']) ? $_POST['issuerCode'] : 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'\
--data-urlencode 'spUserHash=xxxyyyzzz'\
--data-urlencode 'settlementDate=2023-07-25'\
--data-urlencode 'issuerCode=93600523'

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]
reference Nomor referensi dari Duitku, harap disimpan untuk melakukan pengecekan transaksi. DXXXXS875LXXXX32IJZ7
signature Signature. Formula: MD5(merchantcode + amount + merchantOrderId + merchantKey)
publisherOrderId Nomor unik pembayaran transaksi dari Duitku. Mohon disimpan untuk keperluan pencatatan atau pelacakan transaksi. MGUHWKJX3M1KMSQN5
spUserHash Akan dikirimkan melalui callback jika metode pembayaran menggunakan ShopeePay(QRIS, App, and Account Link). Jika, nilai parameter berikut ini mengandung alphabet dan numeric. Maka, kemungkinan telah dibayarkan menggunakan Shopee. xxxyyyzzz
settlementDate Informasi waktu estimasi penyelesaian.
Format: YYYY-MM-DD
2023-07-25
issuerCode Informasi kode issuer dari QRIS.
lihat daftar issuer disini.
*terkecuali untuk metode QRIS Link Aja
93600523

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

S1

Bank Sahabat Sampoerna

DM

Danamon Virtual Account
Ritel

FT

Pegadaian/ALFA/Pos

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

JP

Jenius Pay
QRIS

SP

ShopeePay

LQ

LinkAja

NQ

Nobu

DQ

Dana

GQ

Gudang Voucher

SQ

Nusapay
Credit

DN

Indodana Paylater

AT

ATOME

Daftar Issuer (QRIS)

Kode Issuer
93600999 AHDI
93600947 Aladin Syariah
93600567 Allo Bank Indonesia
93600531 Amar
93600822 Astrapay
93600116 Bank Aceh Syariah
93600037 Bank Artha Graha Internasional
93600133 Bank BPD Bengkulu
93600124 Bank BPD Kalimantan Timur dan Kalimantan Utara
93600161 Bank Ganesha
93600513 Bank Ina Perdana
93600113 Bank Jateng
93600123 Bank Kalbar
93600122 Bank Kalsel
93600441 Bank KB Bukopin
93600121 Bank Lampung
93600157 Bank Maspion
93600553 Bank Mayora
93600548 Bank Multiarta Sentosa
93600490 Bank Neo Commerce
93600128 Bank NTB Syariah
93600019 Bank Panin
93600132 Bank Papua
93600115 Bank Pembangunan Daerah Jambi
93600494 Bank Raya
93600119 Bank Riau Kepri
93600523 Bank Sahabat Sampoerna
93600152 Bank Shinhan
93600126 Bank Sulsel
93600120 Bank Sumselbabel
93600023 Bank UOB Indonesia
93600808 Bayarind
93600014 BCA
93600536 BCA Syariah
93600501 BCAD
93600815 Bimasakti Multi Sinergi
93600110 BJB
93600425 BJB Syariah
93600919 BluePay
93600009 BNI
93600129 BPD Bali
93600112 BPD DIY
93600130 BPD NTT
93600114 BPD-JATIM
93600002 BRI
93600422 BRIS Pay
93600200 BTN
93600076 Bumi Arta
93600031 Citibank
93600950 Commonwealth
93600915 Dana
93600011 Danamon
93600046 DBS MAX QRIS
93600111 DKI
93600899 Doku
93600998 DSP
93600827 Fello
93600777 Finpay
93600813 GAJA
93600914 Go-Pay
93600916 Gudang Voucher
93600484 Hana bank
93600789 IMkas
93600920 Isaku
93600542 JAGO
93600213 Jenius
93600812 Kaspro
93600911 LinkAja
93600008 Mandiri Pay
93600016 Maybank
93600426 Mega
93600821 Midazpay
93600485 Motion Banking
93600147 Muamalat
93600118 Nagari
93600814 Netzme
93600022 Niaga
93600503 Nobu
93600028 OCBC
93600811 OTTOCASH
93600912 OVO
93600820 PAC Cash
93600818 Paydia
93600917 Paytrend
93600013 Permata
93608161 POS Indonesia
93600167 QNB Indonesia
93600921 Saldomu
93600535 Seabank
93600918 ShopeePay
93600153 Sinarmas
93600816 SPIN
93600451 Syariah Indonesia
93600898 T-Money
93600828 TrueMoney
93600835 Virgo
93600830 YODU
93600817 Yukk
93600825 Zipay

Errors

Respon HTTP

Kode Error Nama Error Keterangan
400 Bad Request Ada kesalahan pada saat mengirimkan permohonan pada API.
400 Amount is different please try again later. Error berikut ini terjadi karena anda mencoba untuk mengirim request ulang atau membuat ulang invoice di satu waktu yang sama dan dengan order ID yang sama namun nominal yang berbeda.
401 Unauthorized Akses di tolak batasan kewenangan.
404 Not Found Halaman atau API yang di request tidak di temukan.
409 The transaction is still in progress. Error berikut ini terjadi karena anda mencoba untuk mengirim request ulang atau membuat ulang invoice di satu waktu yang sama dan dengan order ID yang sama. (Disaat request pertama masih dalam proses).
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.

Jenius Pay

E-mail Password CashTag OTP
[email protected] P@ssw0rd123 $testjenpay4 6 digit angka acak

Untuk pengetesan transaksi Jenius Pay, hanya ada dalam website Jenius yang dapat diakses di sini

QRIS

Untuk Shopee QRIS gunakan Shopeeapp seperti shopee e-money. Untuk Gudang Voucher dapat menggunakan demo sukses virtual account.

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.