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": "BK",
            "paymentName": "BCA KlikPay",
            "paymentImage": "https://images.duitku.com/hotlink-ok/BK.PNG",
            "totalFee": "0"
        }, {
            "paymentMethod": "VA",
            "paymentName": "VA MAYBANK",
            "paymentImage": "https://images.duitku.com/hotlink-ok/VA.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' => '',
        ),
    );*/

    $params = array(
        'merchantCode' => $merchantCode,
        'paymentAmount' => $paymentAmount,
        'paymentMethod' => $paymentMethod,
        'merchantOrderId' => $merchantOrderId,
        'productDetails' => $productDetails,
        'additionalParam' => $additionalParam,
        'merchantUserInfo' => $merchantUserInfo,
        'customerVaName' => $customerVaName,
        'email' => $email,
        'phoneNumber' => $phoneNumber,
        // 'accountLink' => $accountLink,
        '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. 10
accountLink AcountLink

Detail parameter untuk metode pembayaran accountlink (opsional).

Fix VA

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; 

//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'

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

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",
  "statusCode": "00",
  "statusMessage": "SUCCESS"
}
Parameter Keterangan
merchantOrderId Order ID dari merchant.
reference Reference yaitu referensi transaksi dari Duitku.
amount Nominal transaksi.
statusCode Kode status transaksi.
00 - Success
01 - Pending
02 - Canceled
statusMessage Pesan Pembayaran

Uji Coba

Setelah anda melewati langkah-langkah integrasi di atas, anda dapat melakukan pengecekan pembayaran. Berikut adalah daftar uji coba pembayaran yang dapat digunakan di Sandbox Environtment:

Credit Card

3D Secure Transaction

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

Virtual Account

Demo pembayaran transaksi virtual account pada sandbox klik di sini.

Indodana Pay Later

Nomor Telepon PIN
081282325566 000000

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": "BK",
  "paymentName": "BCA KlikPay",
  "paymentImage": "https://images.duitku.com/hotlink-ok/BK.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.

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
Ritel FT Pegadaian/ALFA/Pos
A2 POS Indonesia
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
QRIS SP Shopee Pay
LQ LinkAja
NQ Nobu
Kredit DN Indodana Paylater

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

Aug 2022

April 2022

Maret 2022

September 2021

Agustus 2021

Juni 2021

Februari 2021

Januari 2020

Januari 2019

Version 1.0