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
- Pelanggan melakukan checkout pembayaran.
- Server merchant melakukan request transaksi ke API Duitku untuk mendapatkan DUITKU_REFERENCE.
- API Duitku merespon request dengan memberikan DUITKU_REFERENCE.
- Server merchant menampilkan halaman pembayaran pada situs mereka untuk ditampilkan pada pelanggan.
- Pelanggan memverifikasi detail transaksi dan klik tombol pembayaran. Sistem merchant memanggil fungsi checkout.process(DUITKU_REFERENCE, options).
- Sistem pembayaran Duitku memproses transaksi dan merespon status pembayaran. Duitku JS lalu melakukan callback yang telah disediakan di sisi merchant.
- Sistem pembayaran Duitku memberikan notifikasi status transaksi pada server merchant.
Langkah Integrasi
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
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
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
Merchant code adalah ID proyek yang telah dibuat dan didaftarkan di halaman merchant Duitku.
Endpoint
- HTTP Method:
POST
- Production:
https://api-prod.duitku.com/api/merchant/createInvoice
- Sandbox:
https://api-sandbox.duitku.com/api/merchant/createInvoice
Request Headers
Untuk membuat HTTP request, merchant harus menyertakan header seperti berikut:
Accept: application/json
Content-Type: application/json
x-duitku-signature: FORMAT SHA256(<MERCHANT_CODE_ANDA> - <TIMESTAMP_JAKARTA> - <API_KEY_ANDA>)
x-duitku-timestamp: <TIMESTAMP_JAKARTA>(Milliseconds)
x-duitku-merchantcode: <YOUR_MERCHANT_CODE_HERE>
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";
// Detail 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 |
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 |
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 |
amount | 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.
- Production:
<script src="https://app-prod.duitku.com/lib/js/duitku.js"></script>
- Sandbox:
<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
- id - Bahasa Indonesia
- en - Bahasa Inggris
Selain dari pengaturan bahasa duitku memiliki pengaturan dalam konversi mata uang. Anda dapat menambahkan ¤cy=USD
query. Duitku mendukung 2 konversi yaitu :
- USD - (dolar amerika)
- EUR - (Euro)
*Konversi berikut hanya bersifat estimasi. Rate dapat berubah sewaktu waktu.
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 | |
BV |
BSI 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
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.