NAV Navbar
php shell

Langkah Awal

Selamat datang di halaman dokumentasi API Duitku. Integrasikan API ini untuk mulai bertransaksi menggunakan Duitku di situs anda. API Duitku adalah sebuah third party API yang berguna sebagai sistem payment gateway. API Duitku membantu anda dalam hal menerima pembayaran online dari pelanggan anda. Cukup dengan satu API Duitku anda dapat menerima pembayaran dari berbagai macam metode pembayaran yang tersedia.

Integration flowchart

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 di sini.

API 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.

Postman Collection

Jika anda terbiasa dengan postman, kami juga menyediakan postman collection yang dapat membantu anda memahami bagaimana API Duitku berinteraksi.

Run in Postman

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:

Get Payment Method

Proses ini digunakan untuk mendapatkan metode pembayaran yang aktif dari proyek merchant (anda). API ini berisi nama metode pembayaran, biaya dan URL ke gambar metode pembayaran. Anda dapat menggunakan sebagai daftar channel pembayaran pada proyek anda dan anda akan mendapatkan paymentMethod yang berguna untuk diteruskan ke proses request transaksi. Proses ini opsional, anda dapat melewatinya menuju Permintaan Transaksi.

Request HTTP Get Payment Method

Method : HTTP POST

Type : application/json

Development : https://sandbox.duitku.com/webapi/api/merchant/paymentmethod/getpaymentmethod

Production : https://passport.duitku.com/webapi/api/merchant/paymentmethod/getpaymentmethod

Parameter Request Get Payment Method

curl -X POST https://sandbox.duitku.com/webapi/api/merchant/paymentmethod/getpaymentmethod
-H "Content-Type: application/json"
-d "{
    \"merchantcode\": \"DXXXX\",
    \"amount\": \"10000\",
    \"datetime\": \"2022-01-25 16:23:08\",
    \"signature\": \"497fbf783f6d17d4b1e1ef468917bdc8\"
    }"
<?php

    // Set kode merchant anda 
    $merchantCode = "DXXXX"; 
    // Set merchant key anda 
    $apiKey = "DXXXXCX80TZJ85Q70QCI";
    // catatan: environtment untuk sandbox dan passport berbeda 

    $datetime = date('Y-m-d H:i:s');  
    $paymentAmount = 10000;
    $signature = hash('sha256',$merchantCode . $paymentAmount . $datetime . $apiKey);

    $params = array(
        'merchantcode' => $merchantCode,
        'amount' => $paymentAmount,
        'datetime' => $datetime,
        'signature' => $signature
    );

    $params_string = json_encode($params);

    $url = 'https://sandbox.duitku.com/webapi/api/merchant/paymentmethod/getpaymentmethod'; 

    $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))                                                                       
    );   
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

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

    if($httpCode == 200)
    {
        $results = json_decode($request, true);
        print_r($results, false);
    }
    else{
        $request = json_decode($request);
        $error_message = "Server Error " . $httpCode ." ". $request->Message;
        echo $error_message;
    }
?>
Nama Tipe Wajib Keterangan Contoh
merchantcode string(50)

Kode merchant dari duitku. DXXXX
amount integer

Nominal transaksi. Tidak ada kode desimal (.) dan tidak ada digit desimal. 10000
datetime date

Format: (yyyy-MM-dd HH:mm:ss). 2022-01-25 16:23:08
signature string(255)

Formula: Sha256(merchantcode + paymentAmount + datetime + apiKey). 497fbf783f6d17d4b1e1ef468917bdc8

Parameter Respon Get Payment Method

Type : application/json

{
    "paymentFee": [        
        {
            "paymentMethod": "VA",
            "paymentName": "MAYBANK VA",
            "paymentImage": "https://images.duitku.com/hotlink-ok/VA.PNG",
            "totalFee": "0"
        },
        {
            "paymentMethod": "BT",
            "paymentName": "PERMATA VA",
            "paymentImage": "https://images.duitku.com/hotlink-ok/PERMATA.PNG",
            "totalFee": "0"
        },
    ],
    "responseCode": "00",
    "responseMessage": "SUCCESS"
}
Nama Tipe Keterangan
paymentFee paymentFee Berisikan daftar pembayaran.
responseCode string Kode respon.
responseMessage string Keterangan hasil dari respon.

Permintaan Transaksi

Berikut ini adalah langkah utama pada proses transaksi diawali dengan melakukan request transaksi ke sistem Duitku. Proses ini akan diperuntukan untuk membuat pembayaran (melalui nomor virtual account, QRIS, e-wallet, dsb). Anda dapat membuat suatu halaman pembayaran yang berguna mengarahkan pelanggan membayar tagihan transaksinya kepada anda. Silahkan untuk membuat request transaksi dengan membuat HTTP request seperti berikut. Jika anda melewati Get Payment Method, anda dapat mengisi paymentMethod dengan referensi Metode Pembayaran.

Request HTTP Transaksi

Method : HTTP POST

Type : application/json

Development : https://sandbox.duitku.com/webapi/api/merchant/v2/inquiry

Production : https://passport.duitku.com/webapi/api/merchant/v2/inquiry

Parameter Request Transaksi

<?php
    $merchantCode = 'DXXXXX'; // dari duitku
    $apiKey = 'XXXXXXXXXX7968XXXXXXXXXFB05332AF'; // dari duitku
    $paymentAmount = 40000;
    $paymentMethod = 'VC'; // VC = Credit Card
    $merchantOrderId = time() . ''; // dari merchant, unik
    $productDetails = 'Tes pembayaran menggunakan Duitku';
    $email = '[email protected]'; // email pelanggan anda
    $phoneNumber = '08123456789'; // nomor telepon pelanggan anda (opsional)
    $additionalParam = ''; // opsional
    $merchantUserInfo = ''; // opsional
    $customerVaName = 'John Doe'; // tampilan nama pada tampilan konfirmasi bank
    $callbackUrl = 'http://example.com/callback'; // url untuk callback
    $returnUrl = 'http://example.com/return'; // url untuk redirect
    $expiryPeriod = 10; // atur waktu kadaluarsa dalam hitungan menit
    $signature = md5($merchantCode . $merchantOrderId . $paymentAmount . $apiKey);

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

    // Address
    $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 OL dan SL
    $accountLink = array (
        'credentialCode' => '7cXXXXX-XXXX-XXXX-9XXX-944XXXXXXX8',
        'ovo' => array (
            'paymentDetails' => array ( 
                0 => array (
                    'paymentType' => 'CASH',
                    'amount' => 40000,
                ),
            ),
        ),
        'shopee' => array (
            'useCoin' => false,
            'promoId' => '',
        ),
    );*/

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

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

    $params_string = json_encode($params);
    //echo $params_string;
    $url = 'https://sandbox.duitku.com/webapi/api/merchant/v2/inquiry'; // Sandbox
    // $url = 'https://passport.duitku.com/webapi/api/merchant/v2/inquiry'; // Production
    $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))                                                                       
    );   
    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']);
        echo "paymentUrl :". $result['paymentUrl'] . "<br />";
        echo "merchantCode :". $result['merchantCode'] . "<br />";
        echo "reference :". $result['reference'] . "<br />";
        echo "vaNumber :". $result['vaNumber'] . "<br />";
        echo "amount :". $result['amount'] . "<br />";
        echo "statusCode :". $result['statusCode'] . "<br />";
        echo "statusMessage :". $result['statusMessage'] . "<br />";
    }
    else
    {
        $request = json_decode($request);
        $error_message = "Server Error " . $httpCode ." ". $request->Message;
        echo $error_message;
    }
?>
curl --location --request POST 'https://sandbox.duitku.com/webapi/api/merchant/v2/inquiry' \
--header 'Content-Type: application/json' \
--data 
'{ 
   "merchantCode":"DXXXX",
   "paymentAmount":40000,
   "paymentMethod":"VC",
   "merchantOrderId":"abcde12345",
   "productDetails":"Pembayaran untuk Toko Contoh",
   "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\/callback",
   "returnUrl":"http:\/\/example.com\/return",
   "signature":"506f88f1000dfb4a6541ff94d9b8d1e6",
   "expiryPeriod":10
}

Parameter Tipe Wajib Keterangan Contoh
merchantCode string(50)

Kode merchant, adalah kode proyek untuk bertransaksi. DXXXX
paymentAmount integer

Jumlah nominal transaksi. 40000
merchantOrderId string(50)

Nomor transaksi dari merchant. abcde12345
productDetails string(255)

Keterangan produk/jasa yang diperjual belikan. Pembayaran untuk Toko Contoh
email string(255)

Alamat email pelanggan anda. [email protected]
additionalParam string(255)

Parameter tambahan (opsional).
paymentMethod string(2)

Kode metode pembayaran yang digunakan. VC
merchantUserInfo string(255)

Username atau email pelanggan di situs merchant (opsional).
customerVaName string(20)

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

Nomor telepon pelanggan (opsional). 08123456789
itemDetails ItemDetails

Detail barang (opsional).
customerDetail CustomerDetail

Detail pelanggan.
returnUrl string(255)

Tautan untuk mengarahkan setelah transaksi selesai atau dibatalkan. http://www.contoh.com/return
callbackUrl string(255)

Tautan untuk callback transaksi. http://www.contoh.com/callback
signature string(255)

Kode identifikasi transaksi. Formula: MD5(merchantCode + merchantOrderId + paymentAmount + apiKey). 506XXXf1XXXdfb4aXXX1ffXXX9b8d1e6
expiryPeriod int

Masa berlaku transaksi sebelum kedaluwarsa. Berbentuk satuan angka dalam menit. Untuk detail expiryPeriod bisa dilihat disini. 10
accountLink AccountLink

Detail parameter untuk metode pembayaran accountlink (opsional).
creditCardDetail creditCardDetail

Detail parameter untuk pembayaran kartu kredit (opsional).

Fixed VA

Fixed Virtual Account adalah nomor virtual account yang dapat dikustomisasi oleh merchant sehingga menjadi statik atau sesuai dengan keinginan mereka. Merchant dapat menyesuaikan nomor ini setelah angka prefix VA yang diberikan oleh Duitku. Dengan syarat bahwa angka yang ditambahkan tidak melebihi panjang digit maksimal untuk nomor VA tersebut.

Untuk integrasi menggunakan Fixed Virtual Account anda dapat menggunakan API SNAP kami, untuk melihat dokumentasi nya klik disini.

OVO H2H

Parameter Respon Request Transaksi

Setelah request transaksi ke API Duitku. Server Duitku akan memberikan respon. Respon ini dapat anda jadikan sebagai data pembayaran untuk pelanggan anda.

{
  "merchantCode": "DXXXX",
  "reference": "DXXXXCX80TZJ85Q70QCI",
  "paymentUrl": "https://sandbox.duitku.com/topup/topupdirectv2.aspx?ref=BCA7WZ7EIDXXXXWEC",
  "vaNumber": "7007014001444348",
  "qrString": "00020101021226660014ID.LINKAJA.WWW011893600911002151500102152006170915150010303UME51450015ID.OR.GPNQR.WWW02150000000000000000303UME520454995802ID5911Toko Jualan6013Jakarta Barat61051153062210117LQKI2LPMJQPKCIIS553033605405400006304502A",
  "amount": "40000",
  "statusCode": "00",
  "statusMessage": "SUCCESS"
}
Parameter Tipe Keterangan Contoh
merchantCode string(50) Kode merchant, kode proyek anda yang dikembalikan dari server Duitku. Menandakan proyek mana yang anda gunakan dalam transaksi. DXXXX
reference string(255) Referensi dari Duitku (perlu disimpan di sistem anda). DXXXXCX80TXXX5Q70QCI
paymentUrl string(255) Tautan halaman pembayaran jika ingin menggunakan halaman Duitku. https://sandbox.duitku.com/topup/topupdirectv2.aspx?ref=BCA7WZ7EIDXXX7WEC
vaNumber string(20) Nomor pembayaran atau virtual account. 7007014001444348
amount integer Nominal pembayaran. 40000
qrString string(255) QR string digunakan jika anda menggunakan pembayaran QRIS (anda perlu membuat kode QR dari string ini).

Callback

<?php
$apiKey = 'XXXXXXXXXX7968XXXXXXXXXFB05332AF'; // 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; 
$paymentMethod = 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', "* Success *\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\/callback' \
--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'

Parameter callbackUrl yang berada di transaksi request akan digunakan oleh Duitku untuk konfirmasi pembayaran yang telah dilakukan oleh pelanggan anda. Pada saat pelanggan anda berhasil melakukan pembayaran, Duitku akan mengirimkan HTTP POST yang menyertakan hasil pembayaran suatu tagihan dari pelanggan. Anda perlu menyediakan halaman untuk menerima request callback tersebut. Agar dapat memproses hasil transaksi yang telah dilakukan oleh pelanggan.

Parameter Callback

Method : HTTP POST

Type : x-www-form-urlencoded

Parameter Keterangan Contoh
merchantCode Kode merchant, dikirimkan oleh server Duitku untuk memberitahu kode proyek yang digunakan. DXXXX
amount Jumlah nominal transaksi. 150000
merchantOrderId Nomor transaksi dari merchant. abcde12345
productDetail Keterangan detail produk. Pembayaran untuk Toko Contoh
additionalParam Parameter tambahan yang anda kirimkan pada saat awal request transaksi.
paymentCode Metode Pembayaran. VC
resultCode Pemberitahuan callback hasil transaksi.
00 - Success
01 - Failed
00
merchantUserId Username atau email pelanggan di situs anda. [email protected]
reference Nomor referensi transaksi dari Duitku. Mohon disimpan untuk keperluan pencatatan atau pelacakan transaksi. DXXXXCX80TXXX5Q70QCI
signature Kode identifikasi transaksi. Berisikan parameter-parameter transaksi yang di-hash menggunakan metode hashing MD5. Parameter keamanan sebagai acuan bahwa request yang diterima berasal dari server Duitku. Formula: MD5(merchantcode + amount + merchantOrderId + apiKey) 506f88f1000dfb4a6541ff94d9b8d1e6
publisherOrderId Nomor unik pembayaran transaksi dari Duitku. Mohon disimpan untuk keperluan pencatatan atau pelacakan transaksi. MGUHWKJX3M1KMSQN5
spUserHash Di kirim melalui callback jika pembayaran menggunakan metode pembayaran ShopeePay(QRIS, App, dan Account Link). Jika berisi string dengan kombinasi angka dan huruf, maka menandakan pembayaran menggunakan Shopee itu sendiri. 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

Redirect

Pada saat mengirimkan transaksi request bersamaan dengan parameter callbackUrl, anda juga mengirimkan parameter returnUrl. Berbeda dengan callback yang berguna untuk menerima status pembayaran yang dilakukan pelanggan. Redirect berguna pada saat setelah anda mengarahkan pelanggan ke paymentUrl pelanggan akan diarahkan kembali ke situs atau halaman toko anda. Setelah transaksi berhasil atau dibatalkan, Duitku akan mengarahkan pelanggan kembali ke situs anda menggunakan URL beserta parameter berikut.

Contoh

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

Parameters

Parameter Keterangan Contoh
merchantOrderId Nomor transaksi dari merchant. abcde12345
reference Nomor referensi transaksi dari Duitku. DXXXXCX80TXXX5Q70QCI
resultCode Kode hasil dari transaksi.
00 - Success
01 - Pending
02 - Canceled
00

Cek Transaksi

Setelah request transaksi, anda dapat melakukan langkah untuk melihat status pembayaran pada order ID tertentu. Anda juga dapat menampilkan pada pelanggan anda status tersebut. Ataupun, anda juga dapat menggunakannya sebagai API untuk verfikasi transaksi. Untuk menjamin bahwa informasi transaksi benar telah berubah. Anda dapat menyisipkan cek transaksi pada saat menerima callback agar pembayaran lebih terjamin statusnya.

Request HTTP Cek Transaksi

Method : HTTP POST

Type : x-www-form-urlencoded

Development : https://sandbox.duitku.com/webapi/api/merchant/transactionStatus

Production : https://passport.duitku.com/webapi/api/merchant/transactionStatus

Parameter Request Cek Transaksi

<?php
    $merchantCode = 'DXXXX'; // dari duitku
    $apiKey = 'XXXXXXXXXX7968XXXXXXXXXFB05332AF'; // dari duitku
    $merchantOrderId = 'abcde12345'; // dari anda (merchant), bersifat unik

    $signature = md5($merchantCode . $merchantOrderId . $apiKey);

    $params = array(
        'merchantCode' => $merchantCode,
        'merchantOrderId' => $merchantOrderId,
        'signature' => $signature
    );

    $params_string = json_encode($params);
    $url = 'https://sandbox.duitku.com/webapi/api/merchant/transactionStatus';
    $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))                                                                       
    );   
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

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

    if($httpCode == 200)
    {
        $results = json_decode($request, true);
        print_r($results, false);
        // echo "merchantOrderId :". $results['merchantOrderId'] . "<br />";
        // echo "reference :". $results['reference'] . "<br />";
        // echo "amount :". $results['amount'] . "<br />";
        // echo "fee :". $results['fee'] . "<br />";
        // echo "statusCode :". $results['statusCode'] . "<br />";
        // echo "statusMessage :". $results['statusMessage'] . "<br />";
    }
    else
    {
        $request = json_decode($request);
        $error_message = "Server Error " . $httpCode ." ". $request->Message;
        echo $error_message;
    }
?>
curl -X POST https://sandbox.duitku.com/webapi/api/merchant/transactionStatus
     -H "Content-Type: application/json" 
     -d "{\"merchantcode\": \"DXXXX\",
  \"merchantOrderId\": \"abcde12345\",
  \"signature\": \"497fbf783f6d17d4b1e1ef468917bdc8\"
  }"
Parameter Keterangan Contoh
merchantCode Kode merchant, didapatkan dari halaman merchant Duitku. DXXXX
merchantOrderId Nomor transaksi dari merchant. abcde12345
signature Kode identifikasi transaksi. Berisikan parameter-parameter transaksi yang di-hash menggunakan metode hashing MD5. Formula : md5(merchantCode + merchantOrderId + apiKey). 497fbf783f6d17d4b1e1ef468917bdc8

Parameter Respon Cek Transaksi

{
  "merchantOrderId": "abcde12345",
  "reference": "DXXXXCX80TZJ85Q70QCI",
  "amount": "100000",
  "fee":"0.00",
  "statusCode": "00",
  "statusMessage": "SUCCESS"
}
Parameter Keterangan
merchantOrderId Order ID dari merchant.
reference Reference yaitu referensi transaksi dari Duitku.
amount Nominal transaksi.
fee Biaya transaksi.
statusCode Kode status transaksi.
00 - Success
01 - Pending
02 - Canceled
statusMessage Pesan Pembayaran

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

JSON Object

Daftar objek JSON yang dimiliki Duitku.

Item Details

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

Nama barang yang dibeli. Apel
quantity integer

Jumlah barang dibeli. 10
price integer

Harga barang. Catatan: Jangan tambahkan desimal. 50000

Customer Detail

"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"
    }
}
Parameter Tipe Wajib Keterangan Contoh
firstName string(255)

Nama pertama pelanggan. John
lastName string(255)

Nama belakang pelanggan. Doe
email string(255)

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

Nomor telepon pelanggan. 08123456789
billingAddress Address

Alamat tagihan pelanggan.
shippingAddress Address

Alamat pengiriman pelanggan.

Address

{
  "firstName": "John",
  "lastName": "Doe",
  "address": "Jl. Kembangan Raya",
  "city": "Jakarta",
  "postalCode": "11530",
  "phone": "08123456789",
  "countryCode": "ID"
}
Parameter Tipe Wajib Keterangan Contoh
firstName string(255)

Nama pertama pelanggan. John
lastName string(255)

Nama belakang pelanggan. Doe
address string(255)

Alamat tagihan atau pengiriman pelanggan. Jl. Kembangan Raya
city string(255)

Keterangan alamat kota. Jakarta
postalCode string(255)

Kode Pos alamat. 11530
phone string(255)

Nomor Telepon Tagihan atau Pengiriman Pelanggan. 08123456789
countryCode string(255)

ISO 3166-1 alpha-3. ID

Parameter khusus untuk metode pembayaran yang menggunakan OVO Account Link dan Shopee Account Link.

"accountLink": {
    "credentialCode": "A0F22572-4AF1-E111-812C-B01224449936",
    "ovo": {
        "paymentDetails": [{
            "paymentType": "CASH",
            "amount": "10000"
        }]
    },
    "shopee": {
        "useCoin": false,
        "promoId": ""
    }
},

Parameter Tipe Wajib Keterangan Contoh
credentialCode string(50)

Kode kredensial dari Duitku. B3A72721-7FFB-EC11-812D-B4617B397E08
ovo OVO

Wajib untuk pembayaran melalui OVO.
shopee Shopee

Wajib untuk pembayaran melalui Shopee.

Ovo Detail

"ovo": {
    "paymentDetails": [
        {
            "paymentType": "CASH",
            "amount": "10000"
        }
    ]
}

Parameter Tipe Wajib Keterangan Contoh
paymentDetails array object

Parameter untuk request pembayaran OVO.
paymentType string(10)

Tipe pembayaran yang dilakukan. CASH
amount int

Jumlah nominal transaksi. 10000

Shopee Detail

"shopee": {
  "promo_ids": "",
  "useCoin": false,
}
Parameter Tipe Wajib Keterangan Contoh
promo_ids string(50)

Kode voucher. campaign111
useCoin boolean

Jika pembayaran ingin menggunakan koin shopee dari akun shopee yang terhubung (Khusus payment method SL). false

Payment Fee

{
  "paymentMethod": "VA",
  "paymentName": "MAYBANK VA",
  "paymentImage": "https://images.duitku.com/hotlink-ok/VA.PNG",
  "totalFee": "0"
}
Parameter Tipe Keterangan
paymentMethod String(2) Kode metode pembayaran.
paymentName String(255) Nama metode pembayaran.
paymentImage String(255) URL gambar metode pembayaran.
totalFee String(255) Biaya transaksi.

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

Metode Pembayaran

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

BV

BSI Virtual Account
Ritel

FT

Pegadaian/ALFA/Pos

IR

Indomaret
E-Wallet

OV

OVO (Support Void)

SA

Shopee Pay Apps (Support Void)

LF

LinkAja Apps (Fixed Fee)

LA

LinkAja Apps (Percentage Fee)

DA

DANA

SL

Shopee Pay Account Link

OL

OVO Account Link

JP

Jenius Pay
QRIS

SP

Shopee Pay

LQ

LinkAja

NQ

Nobu

DQ

Dana

GQ

Gudang Voucher

SQ

Nusapay
Kredit*

DN

Indodana Paylater

AT

ATOME

Expiry Period

Daftar value dari parameter expiryPeriod jika Default atau NULL. Berbentuk satuan angka dalam menit.

Jenis Pembayaran Default Expiry Period Maksimal Expiry Period
Credit Card 30 menit*
Virtual Account 1440 menit >1440 minutes
Retail 1440 menit >1440 minutes
OVO 10 menit** 1440 minutes
Shopee Pay Apps 10 menit 60 minutes
LinkAja Apps 24 menit* 1440 minutes
DANA 1440 menit 1440 minutes
Shopee Pay Account Link 30 menit*
OVO Account Link 15 menit*
QRIS Payment 10 menit 60 minutes
NOBU QRIS Payment 24 menit 1440 minutes
Indodana Paylater 1440 menit 1440 minutes
ATOME 720 menit 720 minutes
Jenius Pay 10 menit 10 minutes
Nusapay 10 minutes

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

HTTP Code

Kode Pesan Keterangan
200 SUCCESS Proses anda berhasil.
400 Minimum Payment 10000 IDR Pembayaran anda kurang dari ketentuan.
Maximum Payment exceeded Pembayaran anda melebihi ketentuan.
paymentMethod is mandatory Cek parameter paymentMethod anda.
merchantOrderId is mandatory Cek parameter merchantOrderId anda.
length of merchantOrderId can't > 50 Parameter merchantOrderId anda melebihi batas ketentuan.
Invalid Email Address Cek parameter email anda.
length of email can't > 50 Cek parameter email anda.
length of phoneNumber can't > 50 Cek parameter phoneNumber anda.
401 Wrong signature Cek parameter signature anda dan parameter lain yang berkaitan.
404 Merchant not found Cek parameter Merchant Code anda.
Payment channel not available Metode pembayaran yang anda gunakan belum aktif. Hubungi live chat atau melalui [email protected].
409 Payment amount must be equal to all item price Terdapat selisih pada paymentAmount dan total price dalam itemDetails.

Changelog

Version 2.0

Jul 2024

Jun 2024

Mar 2024

Nov 2023

Okt 2023

Agt 2023

Jan 2023

Okt 2022

Aug 2022

April 2022

Maret 2022

September 2021

Agustus 2021

Juni 2021

Februari 2021

Januari 2020

Januari 2019

Version 1.0