Selamat datang di halaman Dokumentasi API. Disini telah disediakan penjelasan lengkap mengenai daftar API yang tersedia dan cara akses/penggunaan dari masing-masing API
Channel pembayaran kami terbagi menjadi 2 jenis yaitu Open Payment & Closed Payment.
Open Payment :
Closed Payment :
Daftar Channel Pembayaran
Kode | Nama Channel | Tipe | Biaya Admin * |
---|---|---|---|
MYBVA |
Maybank Virtual Account
Closed Payment Open Payment |
DIRECT | Rp 3.750 |
PERMATAVA |
Permata Virtual Account
Closed Payment Open Payment |
DIRECT | Rp 3.750 |
BNIVA |
BNI Virtual Account
Closed Payment Open Payment |
DIRECT | Rp 3.750 |
BRIVA |
BRI Virtual Account
Closed Payment Open Payment |
DIRECT | Rp 1.750 |
MANDIRIVA |
Mandiri Virtual Account
Closed Payment Open Payment |
DIRECT | Rp 2.750 |
BCAVA |
BCA Virtual Account
Closed Payment Open Payment |
DIRECT | Rp 3.850 |
SMSVA |
Sinarmas Virtual Account
Closed Payment Open Payment |
DIRECT | Rp 3.750 |
BRIVAOP |
BRI Virtual Account (Open Payment)
Closed Payment Open Payment |
DIRECT | Rp 4.500 |
CIMBVAOP |
CIMB Niaga Virtual Account (Open Payment)
Closed Payment Open Payment |
DIRECT | Rp 4.500 |
BCAVAOP |
BCA Virtual Account (Open Payment)
Closed Payment Open Payment |
DIRECT | Rp 3.850 |
BNIVAOP |
BNI Virtual Account (Open Payment)
Closed Payment Open Payment |
DIRECT | Rp 3.750 |
ALFAMART |
Alfamart
Closed Payment Open Payment |
DIRECT | Rp 1.250 |
ALFAMIDI |
Alfamidi
Closed Payment Open Payment |
DIRECT | Rp 1.250 |
QRIS |
QRIS
Closed Payment Open Payment |
DIRECT | Rp 750 + 0,70% |
* Biaya admin standar, merchant Anda mungkin memiliki biaya yang berbeda dari biaya standar
Pada bagian ini kami akan menjelaskan alur proses yang akan berjalan saat menggunakan layanan kami mulai dari proses pelanggan melakukan checkout hingga pembayaran masuk ke akun Anda.
Pada layanan kami, channel pembayaran terbagi menjadi 2 jenis yakni tipe DIRECT dan REDIRECT. Pada tipe Direct, semua proses transaksi dapat dilakukan di situs Anda sendiri tanpa perlu dialihkan ke situs lain sehingga Anda dapat dengan leluasa mendesain halaman pembayaran Anda sendiri. Sedangkan pada tipe Redirect, Anda perlu mengalihkan pelanggan menuju ke URL pembayaran yang kami sediakan untuk dapat menyelesaikan proses pembayaran.
API ini digunakan untuk mendapatkan daftar semua channel pembayaran yang tersedia beserta informasi lengkap termasuk biaya transaksi dari masing-masing channel
Method | GET |
Sandbox URL | https://payment.tripay.co.id/api-sandbox/payment/channel |
Production URL | https://payment.tripay.co.id/api/payment/channel |
Key | Value | Keterangan |
---|---|---|
Authorization | Bearer {api_key} | Ganti {api_key} dengan API Key merchant Anda |
Parameter | Tipe | Contoh Nilai | Wajib | Keterangan |
---|---|---|---|---|
code | String | BRIVA | TIDAK | Kode channel pembayaran. Jika parameter ini kosong maka result yang dihasilkan adalah daftar semua channel pembayaran yang tersedia |
<?php
$apiKey = 'api_key_anda';
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_FRESH_CONNECT => true,
CURLOPT_URL => "https://payment.tripay.co.id/api/payment/channel",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HEADER => false,
CURLOPT_HTTPHEADER => array(
"Authorization: Bearer ".$apiKey
),
CURLOPT_FAILONERROR => false
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
echo !empty($err) ? $err : $response;
?>
import requests
apiKey = "api_key_anda"
try:
headers = {
"Authorization": "Bearer " + apiKey
}
result = requests.get(url="https://payment.tripay.co.id/api/payment/channel", data=None, headers=headers)
response = result.text
print(response)
except Exception as e:
print("Request Error: " + str(e))
const axios = require('axios') // using Axios library
var apiKey = "api_key_anda";
axios.get('https://payment.tripay.co.id/api/payment/channel', {
headers: {
'Authorization': 'Bearer ' + apiKey
}
})
.then((res) => {
console.log(res)
})
.catch((error) => {
console.error(error)
});
{
"success": true,
"message": "",
"data": [
{
"group_id": 1,
"group_name": "Virtual Account",
"payment": [
{
"code": "BRIVA",
"name": "BRI Virtual Account",
"type": "direct",
"description": "BRI Virtual Account",
"instructions": [
{
"title": "Internet Banking",
"steps": [
"Login ke internet banking Bank BRI Anda",
"Pilih menu <b>Pembayaran</b> lalu klik menu <b>BRIVA</b>",
"Pilih rekening sumber dan masukkan Kode Bayar (<b>[*pay_code*]</b>) lalu klik <b>Kirim</b>",
"Detail transaksi akan ditampilkan, pastikan data sudah sesuai",
"Masukkan kata sandi ibanking lalu klik <b>Request</b> untuk mengirim m-PIN ke nomor HP Anda",
"Periksa HP Anda dan masukkan m-PIN yang diterima lalu klik <b>Kirim</b>",
"Transaksi sukses, simpan bukti transaksi Anda"
]
},
{
"title": "Aplikasi BRImo",
"steps": [
"Login ke aplikasi BRImo Anda",
"Pilih menu <b>BRIVA</b>",
"Pilih sumber dana dan masukkan Nomor Pembayaran (<b>[*pay_code*]</b>) lalu klik <b>Lanjut</b>",
"Klik <b>Lanjut</b>",
"Detail transaksi akan ditampilkan, pastikan data sudah sesuai",
"Klik <b>Konfirmasi</b>",
"Klik <b>Lanjut</b>",
"Masukkan kata sandi ibanking Anda",
"Klik <b>Lanjut</b>",
"Transaksi sukses, simpan bukti transaksi Anda"
]
}
],
"fee": {
"flat": 1500,
"percent": "0.00"
}
}
]
},
{
"group_id": 4,
"group_name": "Offline Retail",
"payment": [
{
"code": "ALFAMART",
"name": "Alfamart",
"type": "direct",
"description": null,
"instructions": [
{
"title": "Pembayaran via ALFAMART",
"steps": [
"Datang ke Alfamart",
"Sampaikan ke kasir ingin melakukan pembayaran plasamall",
"Berikan kode bayar (<b>[*pay_code*]</b>) ke kasir",
"Bayar sesuai jumlah yang diinfokan oleh kasir",
"SImpan struk bukti pembayaran Anda"
]
}
],
"fee": {
"flat": 1000,
"percent": "0.00"
}
},
{
"code": "INDOMARET",
"name": "Indomaret",
"type": "direct",
"description": null,
"instructions": [
{
"title": "Pembayaran via INDOMARET",
"steps": [
"Datang ke Indomaret",
"Sampaikan ke kasir ingin melakukan pembayaran plasamall",
"Berikan kode bayar (<b>[*pay_code*]</b>) ke kasir",
"Bayar sesuai jumlah yang diinfokan oleh kasir",
"SImpan struk bukti pembayaran Anda"
]
}
],
"fee": {
"flat": 1000,
"percent": "0.00"
}
}
]
}
]
}
{
"success": false,
"message": "Invalid API Key"
}
API ini digunakan untuk mengambil instruksi pembayaran dari masing-masing channel
Method | GET |
Sandbox URL | https://payment.tripay.co.id/api-sandbox/payment/instruction |
Production URL | https://payment.tripay.co.id/api/payment/instruction |
Key | Value | Keterangan |
---|---|---|
Authorization | Bearer {api_key} | Ganti {api_key} dengan API Key merchant Anda |
Parameter | Contoh Nilai | Tipe | Wajib | Keterangan |
---|---|---|---|---|
code | BRIVA | String | YA | Kode channel pembayaran |
pay_code | 1234567890 | String | TIDAK | Untuk memasukkan kode bayar/nomor VA ke dalam respon instruksi |
amount | 10000 | Integer | TIDAK | Untuk memasukkan nominal ke dalam respon instruksi |
allow_html | 1 | Integer | TIDAK | Untuk mengizinkan tag html pada instruksi 0 = Tidak diizinkan 1 = Diizinkan default = 1 |
<?php
$apiKey = 'api_key_anda';
$payload = [
'code' => 'BRIVA'
];
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_FRESH_CONNECT => true,
CURLOPT_URL => "https://payment.tripay.co.id/api/payment/instruction?".http_build_query($payload),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HEADER => false,
CURLOPT_HTTPHEADER => array(
"Authorization: Bearer ".$apiKey
),
CURLOPT_FAILONERROR => false,
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
echo !empty($err) ? $err : $response;
?>
import requests
apiKey = "api_key_anda"
try:
payload = {
"code": "BRIVA"
}
headers = {
"Authorization": "Bearer " + apiKey
}
result = requests.get(url="https://payment.tripay.co.id/api/payment/instruction", params=payload, headers=headers)
response = result.text
print(response)
except Exception as e:
print("Request Error: " + str(e))
const axios = require('axios'); // using Axios library
var apiKey = "api_key_anda";
axios.get('https://payment.tripay.co.id/api/payment/instruction?code=BRIVA', {
headers: {
'Authorization': 'Bearer ' + apiKey
}
})
.then((res) => {
console.log(res)
})
.catch((error) => {
console.error(error)
});
{
"success": true,
"message": "",
"data": [
{
"title": "Internet Banking",
"steps": [
"Login ke internet banking Bank BRI Anda",
"Pilih menu <b>Pembayaran</b> lalu klik menu <b>BRIVA</b>",
"Pilih rekening sumber dan masukkan Kode Bayar (<b>{{pay_code}}</b>) lalu klik <b>Kirim</b>",
"Detail transaksi akan ditampilkan, pastikan data sudah sesuai",
"Masukkan kata sandi ibanking lalu klik <b>Request</b> untuk mengirim m-PIN ke nomor HP Anda",
"Periksa HP Anda dan masukkan m-PIN yang diterima lalu klik <b>Kirim</b>",
"Transaksi sukses, simpan bukti transaksi Anda"
]
},
{
"title": "Aplikasi BRImo",
"steps": [
"Login ke aplikasi BRImo Anda",
"Pilih menu <b>BRIVA</b>",
"Pilih sumber dana dan masukkan Nomor Pembayaran (<b>{{pay_code}}</b>) lalu klik <b>Lanjut</b>",
"Klik <b>Lanjut</b>",
"Detail transaksi akan ditampilkan, pastikan data sudah sesuai",
"Klik <b>Konfirmasi</b>",
"Klik <b>Lanjut</b>",
"Masukkan kata sandi ibanking Anda",
"Klik <b>Lanjut</b>",
"Transaksi sukses, simpan bukti transaksi Anda"
]
}
]
}
{
"success": false,
"message": "Invalid API Key"
}
API ini digunakan untuk mendapatkan daftar channel pembayaran yang tersedia pada akun Merchant Anda beserta informasi lengkap termasuk biaya transaksi dari masing-masing channel
Method | GET |
Sandbox URL | https://payment.tripay.co.id/api-sandbox/merchant/payment-channel |
Production URL | https://payment.tripay.co.id/api/merchant/payment-channel |
Key | Value | Keterangan |
---|---|---|
Authorization | Bearer {api_key} | Ganti {api_key} dengan API Key merchant Anda |
Parameter | Tipe | Contoh Nilai | Wajib | Keterangan |
---|---|---|---|---|
code | String | BRIVA | TIDAK | Kode channel pembayaran. Jika parameter ini kosong maka result yang dihasilkan adalah daftar semua channel pembayaran yang tersedia |
<?php
$apiKey = 'api_key_anda';
$payload = [
'code' => 'BRIVA'
];
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_FRESH_CONNECT => true,
CURLOPT_URL => "https://payment.tripay.co.id/api/merchant/payment-channel?".http_build_query($payload),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HEADER => false,
CURLOPT_HTTPHEADER => array(
"Authorization: Bearer ".$apiKey
),
CURLOPT_FAILONERROR => false
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
echo !empty($err) ? $err : $response;
?>
import requests
apiKey = "api_key_anda"
try:
payload = {
"code": "BRIVA"
}
headers = {
"Authorization": "Bearer " + apiKey
}
result = requests.get(url="https://payment.tripay.co.id/api/merchant/payment-channel", params=payload, headers=headers)
response = result.text
print(response)
except Exception as e:
print("Request Error: " + str(e))
const axios = require('axios') // using Axios library
var apiKey = "api_key_anda";
axios.get('https://payment.tripay.co.id/api/merchant/payment-channel?code=BRIVA', {
headers: {
'Authorization': 'Bearer ' + apiKey
}
})
.then((res) => {
console.log(res)
})
.catch((error) => {
console.error(error)
});
{
"success": true,
"message": "",
"data": [
{
"group": "Virtual Account",
"code": "BRIVA",
"name": "BRI Virtual Account",
"type": "direct",
"charged_to": "merchant",
"fee": {
"flat": 1500,
"percent": "0.00"
},
"active": true
}
]
}
{
"success": false,
"message": "Invalid API Key"
}
API ini digunakan untuk mendapatkan rincian perhitungan biaya transaksi untuk masing-masing channel berdasarkan nominal yang ditentukan
Method | GET |
Sandbox URL | https://payment.tripay.co.id/api-sandbox/merchant/fee-calculator |
Production URL | https://payment.tripay.co.id/api/merchant/fee-calculator |
Key | Value | Keterangan |
---|---|---|
Authorization | Bearer {api_key} | Ganti {api_key} dengan API Key merchant Anda |
Parameter | Tipe | Contoh Nilai | Wajib | Keterangan |
---|---|---|---|---|
amount | Integer | 100000 | YA | Nominal transaksi |
code | String | BRIVA | TIDAK | Kode channel pembayaran. Jika parameter ini kosong maka result yang dihasilkan adalah daftar semua channel pembayaran yang tersedia |
<?php
$apiKey = 'api_key_anda';
$payload = [
'code' => 'QRIS',
'amount' => 100000
];
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_FRESH_CONNECT => true,
CURLOPT_URL => "https://payment.tripay.co.id/api/merchant/fee-calculator?".http_build_query($payload),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HEADER => false,
CURLOPT_HTTPHEADER => array(
"Authorization: Bearer ".$apiKey
),
CURLOPT_FAILONERROR => false
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
echo !empty($err) ? $err : $response;
?>
import requests
apiKey = "api_key_anda"
try:
payload = {
"code": "QRIS",
"amount": 100000
}
headers = {
"Authorization": "Bearer " + apiKey
}
result = requests.get(url="https://payment.tripay.co.id/api/merchant/fee-calculator", params=payload, headers=headers)
response = result.text
print(response)
except Exception as e:
print("Request Error: " + str(e))
const axios = require('axios') // using Axios library
var apiKey = "api_key_anda";
axios.get('https://payment.tripay.co.id/api/merchant/fee-calculator?code=QRIS&amount=100000', {
headers: {
'Authorization': 'Bearer ' + apiKey
}
})
.then((res) => {
console.log(res)
})
.catch((error) => {
console.error(error)
});
{
"success": true,
"message": "",
"data": [
{
"code": "QRIS",
"name": "QRIS",
"fee": {
"flat": 750,
"percent": "0.70",
"min": null,
"max": null
},
"total_fee": {
"merchant": 1450,
"customer": 0
}
}
]
}
{
"success": false,
"message": "Invalid API Key"
}
Untuk melakukan request transaksi, Anda harus membuat signature yang akan divalidasi sistem TriPay untuk memastikan integritas data dan pengirim saat ditransmisikan ke sistem TriPay. Pada permintaan request Transaksi baru, signature ini dibuat dari kombinasi Kode Merchant, Nomor referensi dari sistem merchant, dan nominal transaksi
Ketiga data tersebut di-hash menggunakan jenis algoritma HMAC-SHA256 yang dikunci dengan Private Key Merchant. Berikut adalah contoh pembuatan signature.
<?php
$privateKey = 'ytf6ooi2gmlNPfpchd94jDOk8hRWOu';
$merchantCode = 'T0001';
$merchantRef = 'INV55567';
$amount = 1500000;
$signature = hash_hmac('sha256', $merchantCode.$merchantRef.$amount, $privateKey);
// result
// 9f167eba844d1fcb369404e2bda53702e2f78f7aa12e91da6715414e65b8c86a
?>
import hmac
import hashlib
privateKey = "ytf6ooi2gmlNPfpchd94jDOk8hRWOu"
merchant_code = "T0001"
merchant_ref = "INV55567"
amount = 1500000
signStr = "{}{}{}".format(merchant_code, merchant_ref, amount)
signature = hmac.new(bytes(privateKey,'latin-1'), bytes(signStr,'latin-1'), hashlib.sha256).hexdigest()
# result
# 9f167eba844d1fcb369404e2bda53702e2f78f7aa12e91da6715414e65b8c86a
const crypto = require('crypto')
var privateKey = "ytf6ooi2gmlNPfpchd94jDOk8hRWOu";
var merchant_code = "T0001";
var merchant_ref = "INV55567";
var amount = 1500000;
var signature = crypto.createHmac('sha256', privateKey).update(merchant_code + merchant_ref + amount).digest('hex');
// result
// 9f167eba844d1fcb369404e2bda53702e2f78f7aa12e91da6715414e65b8c86a
API ini digunakan untuk membuat transaksi baru atau melakukan generate kode pembayaran
Method | POST |
Sandbox URL | https://payment.tripay.co.id/api-sandbox/transaction/create |
Production URL | https://payment.tripay.co.id/api/transaction/create |
Key | Value | Keterangan |
---|---|---|
Authorization | Bearer {api_key} | Ganti {api_key} dengan API Key merchant Anda |
Parameter | Contoh Nilai | Tipe | Wajib | Keterangan |
---|---|---|---|---|
method | BRIVA | String | YA | Kode channel pembayaran |
merchant_ref | INV345675 | String | TIDAK | Kode referensi transaksi dari sistem Anda. Kami akan mengirim balik nomor referensi ini ketika mengirim notifikasi status transaksi |
amount | 1000000 | Integer | YA | Jumlah total pembayaran |
customer_name | Nama Pelanggan | String | YA (TIDAK untuk merchant khusus) | Nama Pelanggan |
customer_email | [email protected] | String | YA (TIDAK untuk merchant khusus) | Email Pelanggan |
customer_phone | 081234567890 | String | TIDAK (YA untuk beberapa channel) | Nomor HP Pelanggan |
order_items | (Lihat tab Contoh Request) | Array | YA (TIDAK untuk merchant khusus) | Rincian produk. Parameter ini harus berisi Array dengan key yang wajib: name, price, quantity |
callback_url | https://domainanda.com/callback | String | TIDAK | URL untuk menerima callback notifikasi transaksi. Jika parameter ini kosong, maka akan menggunakan URL callback default pada menu Merchant |
return_url | https://domainanda.com/redirect | String | TIDAK | URL untuk mengalihkan pelanggan Anda kembali |
expired_time | 1582855837 | Integer | TIDAK | Batas waktu pembayaran dalam format unix timestamp (https://www.unixtimestamp.com). Jika parameter ini tidak diisi, maka akan menggunakan batas waktu default yakni 24 jam |
signature | fwehf874g547744b5ybnfhf | String | YA | Signature dibuat menggunakan hash SHA256 yang dikunci dengan Private Key. (lihat pada tab Buat Signature) |
<?php
$apiKey = 'api_key_anda';
$privateKey = 'private_key_anda';
$merchantCode = 'kode merchant anda';
$merchantRef = 'nomor referensi merchant anda';
$amount = 1000000;
$data = [
'method' => 'BRIVA',
'merchant_ref' => $merchantRef,
'amount' => $amount,
'customer_name' => 'Nama Pelanggan',
'customer_email' => '[email protected]',
'customer_phone' => '081234567890',
'order_items' => [
[
'sku' => 'PRODUK1',
'name' => 'Nama Produk 1',
'price' => $amount,
'quantity' => 1
]
],
'callback_url' => 'https://domainanda.com/callback',
'return_url' => 'https://domainanda.com/redirect',
'expired_time' => (time()+(24*60*60)), // 24 jam
'signature' => hash_hmac('sha256', $merchantCode.$merchantRef.$amount, $privateKey)
];
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_FRESH_CONNECT => true,
CURLOPT_URL => "https://payment.tripay.co.id/api/transaction/create",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HEADER => false,
CURLOPT_HTTPHEADER => array(
"Authorization: Bearer ".$apiKey
),
CURLOPT_FAILONERROR => false,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query($data)
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
echo !empty($err) ? $err : $response;
?>
import requests
import time
import hmac
import hashlib
try:
apiKey = "api_key_anda"
privateKey = "private_key_anda"
merchant_code = "T0001"
merchant_ref = "INV345675"
amount = 1000000
expiry = int(time.time() + (24*60*60)) # 24 jam
signStr = "{}{}{}".format(merchant_code, merchant_ref, amount)
signature = hmac.new(bytes(privateKey,'latin-1'), bytes(signStr,'latin-1'), hashlib.sha256).hexdigest()
payload = {
'method': 'BRIVA',
'merchant_ref': merchant_ref,
'amount': amount,
'customer_name': 'Nama Pelanggan',
'customer_email': '[email protected]',
'customer_phone': '081234567890',
'callback_url': 'https://domainanda.com/callback',
'return_url': 'https://domainanda.com/redirect',
'expired_time': expiry,
'signature': signature
}
order_items = [
{
'sku': 'PRODUK1',
'name': 'Nama Produk 1',
'price': 500000,
'quantity': 1
},
{
'sku': 'PRODUK2',
'name': 'Nama Produk 2',
'price': 500000,
'quantity': 1
}
]
i = 0
for item in order_items:
for k in item:
payload['order_items['+ str(i) +']['+ str(k) +']'] = item[k]
i += 1
headers = {
"Authorization": "Bearer " + apiKey
}
result = requests.post(url="https://payment.tripay.co.id/api/transaction/create", data=payload, headers=headers)
response = result.text
print(response)
except Exception as e:
print("Request Error: " + str(e))
const axios = require('axios'); // using Axios library
const crypto = require('crypto');
var apiKey = "api_key_anda";
var privateKey = "private_key_anda";
var merchant_code = "T0001";
var merchant_ref = "INV345675";
var amount = 1000000;
var expiry = parseInt(Math.floor(new Date()/1000) + (24*60*60)); # 24 jam
var signature = crypto.createHmac('sha256', privateKey).update(merchant_code + merchant_ref + amount).digest('hex');
var payload = {
'method': 'BRIVA',
'merchant_ref': merchant_ref,
'amount': amount,
'customer_name': 'Nama Pelanggan',
'customer_email': '[email protected]',
'customer_phone': '081234567890',
'order_items': [
{
'sku': 'PRODUK1',
'name': 'Nama Produk 1',
'price': 500000,
'quantity': 1
},
{
'sku': 'PRODUK2',
'name': 'Nama Produk 2',
'price': 500000,
'quantity': 1
}
],
'callback_url': 'https://domainanda.com/callback',
'return_url': 'https://domainanda.com/redirect',
'expired_time': expiry,
'signature': signature
}
axios.post('https://payment.tripay.co.id/api/transaction/create', payload, {
headers: {
'Authorization': 'Bearer ' + apiKey
}
})
.then((res) => {
console.log(res)
})
.catch((error) => {
console.error(error)
});
{
"success": true,
"message": "",
"data": {
"reference": "T0001000000000000006",
"merchant_ref": "INV345675",
"payment_selection_type": "static",
"payment_method": "BRIVA",
"payment_name": "BRI Virtual Account",
"customer_name": "Nama Pelanggan",
"customer_email": "[email protected]",
"customer_phone": "081234567890",
"callback_url": "https://domainanda.com/callback",
"return_url": "https://domainanda.com/redirect",
"amount": 1000000,
"fee": 1500,
"is_customer_fee": 0,
"amount_received": 998500,
"pay_code": "57585748548596587",
"pay_url": null,
"checkout_url": "https://payment.tripay.co.id/checkout/T0001000000000000006",
"status": "UNPAID",
"expired_time": 1582855837,
"order_items": [
{
"sku": "PRODUK1",
"name": "Nama Produk 1",
"price": 500000,
"quantity": 1,
"subtotal": 500000
},
{
"sku": "PRODUK2",
"name": "Nama Produk 2",
"price": 500000,
"quantity": 1,
"subtotal": 500000
}
],
"instructions": [
{
"title": "Internet Banking",
"steps": [
"Login ke internet banking Bank BRI Anda",
"Pilih menu <b>Pembayaran</b> lalu klik menu <b>BRIVA</b>",
"Pilih rekening sumber dan masukkan Kode Bayar (<b>57585748548596587</b>) lalu klik <b>Kirim</b>",
"Detail transaksi akan ditampilkan, pastikan data sudah sesuai",
"Masukkan kata sandi ibanking lalu klik <b>Request</b> untuk mengirim m-PIN ke nomor HP Anda",
"Periksa HP Anda dan masukkan m-PIN yang diterima lalu klik <b>Kirim</b>",
"Transaksi sukses, simpan bukti transaksi Anda"
]
}
]
}
}
{
"success": false,
"message": "Invalid API Key"
}
API ini digunakan untuk mengambil detail transaksi yang pernah dibuat. Dapat juga digunakan untuk cek status pembayaran
Method | GET |
Sandbox URL | https://payment.tripay.co.id/api-sandbox/transaction/detail |
Production URL | https://payment.tripay.co.id/api/transaction/detail |
Key | Value | Keterangan |
---|---|---|
Authorization | Bearer {api_key} | Ganti {api_key} dengan API Key merchant Anda |
Parameter | Contoh Nilai | Tipe | Wajib | Keterangan |
---|---|---|---|---|
reference | T0001000000000000006 | String | YA | Kode referensi transaksi |
<?php
$apiKey = 'api_key_anda';
$payload = [
'reference' => 'T0001000000000000006'
];
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_FRESH_CONNECT => true,
CURLOPT_URL => "https://payment.tripay.co.id/api/transaction/detail?".http_build_query($payload),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HEADER => false,
CURLOPT_HTTPHEADER => array(
"Authorization: Bearer ".$apiKey
),
CURLOPT_FAILONERROR => false,
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
echo !empty($err) ? $err : $response;
?>
import requests
apiKey = "api_key_anda"
try:
payload = {
"reference": "T0001000000000000006"
}
headers = {
"Authorization": "Bearer " + apiKey
}
result = requests.get(url="https://payment.tripay.co.id/api/transaction/detail", params=payload, headers=headers)
response = result.text
print(response)
except Exception as e:
print("Request Error: " + str(e))
const axios = require('axios'); // using Axios library
var apiKey = "api_key_anda";
axios.get('https://payment.tripay.co.id/api/transaction/detail?reference=T0001000000000000006', {
headers: {
'Authorization': 'Bearer ' + apiKey
}
})
.then((res) => {
console.log(res)
})
.catch((error) => {
console.error(error)
});
{
"success": true,
"message": "",
"data": {
"reference": "T0001000000000000006",
"merchant_ref": "INV345675",
"payment_selection_type": "static",
"payment_method": "BRIVA",
"payment_name": "BRI Virtual Account",
"customer_name": "Nama Pelanggan",
"customer_email": "[email protected]",
"customer_phone": "081234567890",
"callback_url": "https://domainanda.com/callback",
"return_url": "https://domainanda.com/redirect",
"amount": 1000000,
"fee": 1500,
"is_customer_fee": 0,
"amount_received": 998500,
"pay_code": "57585748548596587",
"pay_url": null,
"checkout_url": "https://payment.tripay.co.id/checkout/T0001000000000000006",
"status": "PAID",
"paid_time": "1582856000",
"expired_time": 1582855837,
"order_items": [
{
"sku": "PRODUK1",
"name": "Nama Produk 1",
"price": 500000,
"quantity": 1,
"subtotal": 500000
},
{
"sku": "PRODUK2",
"name": "Nama Produk 2",
"price": 500000,
"quantity": 1,
"subtotal": 500000
}
],
"instructions": [
{
"title": "Internet Banking",
"steps": [
"Login ke internet banking Bank BRI Anda",
"Pilih menu <b>Pembayaran</b> lalu klik menu <b>BRIVA</b>",
"Pilih rekening sumber dan masukkan Kode Bayar (<b>57585748548596587</b>) lalu klik <b>Kirim</b>",
"Detail transaksi akan ditampilkan, pastikan data sudah sesuai",
"Masukkan kata sandi ibanking lalu klik <b>Request</b> untuk mengirim m-PIN ke nomor HP Anda",
"Periksa HP Anda dan masukkan m-PIN yang diterima lalu klik <b>Kirim</b>",
"Transaksi sukses, simpan bukti transaksi Anda"
]
},
{
"title": "Aplikasi BRImo",
"steps": [
"Login ke aplikasi BRImo Anda",
"Pilih menu <b>BRIVA</b>",
"Pilih sumber dana dan masukkan Nomor Pembayaran (<b>57585748548596587</b>) lalu klik <b>Lanjut</b>",
"Klik <b>Lanjut</b>",
"Detail transaksi akan ditampilkan, pastikan data sudah sesuai",
"Klik <b>Konfirmasi</b>",
"Klik <b>Lanjut</b>",
"Masukkan kata sandi ibanking Anda",
"Klik <b>Lanjut</b>",
"Transaksi sukses, simpan bukti transaksi Anda"
]
}
]
}
}
{
"success": false,
"message": "Invalid API Key"
}
Untuk melakukan request transaksi open payment, Anda harus membuat signature yang akan divalidasi sistem TriPay untuk memastikan integritas data dan pengirim saat ditransmisikan ke sistem TriPay. Pada permintaan request Transaksi baru, signature ini dibuat dari kombinasi Kode Merchant, Kode channel pembayaran, dan Nomor referensi dari sistem merchant
Ketiga data tersebut di-hash menggunakan jenis algoritma HMAC-SHA256 yang dikunci dengan Private Key Merchant. Berikut adalah contoh pembuatan signature.
<?php
$privateKey = 'ytf6ooi2gmlNPfpchd94jDOk8hRWOu';
$merchantCode = 'T0001';
$channel = 'BCAVA';
$merchantRef = 'INV55567';
$signature = hash_hmac('sha256', $merchantCode.$channel.$merchantRef, $privateKey);
// result
// d239007921976248f10959295cbc0b45bbe2435f29c12d216cae0b6a1903f95e
?>
import hmac
import hashlib
privateKey = "ytf6ooi2gmlNPfpchd94jDOk8hRWOu"
merchant_code = "T0001"
merchant_ref = "INV55567"
channel = "BCAVA"
signStr = "{}{}{}".format(merchant_code, channel, merchant_ref)
signature = hmac.new(bytes(privateKey,'latin-1'), bytes(signStr,'latin-1'), hashlib.sha256).hexdigest()
# result
# d239007921976248f10959295cbc0b45bbe2435f29c12d216cae0b6a1903f95e
const crypto = require('crypto')
var privateKey = "ytf6ooi2gmlNPfpchd94jDOk8hRWOu";
var merchant_code = "T0001";
var merchant_ref = "INV55567";
var channel = "BCAVA";
var signature = crypto.createHmac('sha256', privateKey).update(merchant_code + channel + merchant_ref).digest('hex');
// result
// 9f167eba844d1fcb369404e2bda53702e2f78f7aa12e91da6715414e65b8c86a
API ini digunakan untuk membuat transaksi baru atau melakukan generate kode pembayaran untuk jenis Open Payment
Method | POST |
Sandbox URL | - |
Production URL | https://payment.tripay.co.id/api/open-payment/create |
Key | Value | Keterangan |
---|---|---|
Authorization | Bearer {api_key} | Ganti {api_key} dengan API Key merchant Anda |
Parameter | Contoh Nilai | Tipe | Wajib | Keterangan |
---|---|---|---|---|
method | BCAVA | String | YA | Kode channel pembayaran |
merchant_ref | INV345675 | String | TIDAK | Kode referensi transaksi dari sistem Anda. Kami akan mengirim balik nomor referensi ini ketika mengirim notifikasi status transaksi |
customer_name | Nama Pelanggan | String | TIDAK | Nama Pelanggan |
signature | fwehf874g547744b5ybnfhf | String | YA | Signature dibuat menggunakan hash SHA256 yang dikunci dengan Private Key. (lihat pada tab Buat Signature) |
<?php
$apiKey = 'api_key_anda';
$privateKey = 'private_key_anda';
$merchantCode = 'kode merchant anda';
$merchantRef = 'nomor referensi merchant anda';
$method = 'BCAVA';
$data = [
'method' => $method,
'merchant_ref' => $merchantRef,
'customer_name' => 'Nama Pelanggan',
'signature' => hash_hmac('sha256', $merchantCode.$method.$merchantRef, $privateKey)
];
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_FRESH_CONNECT => true,
CURLOPT_URL => "https://payment.tripay.co.id/api/open-payment/create",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HEADER => false,
CURLOPT_HTTPHEADER => array(
"Authorization: Bearer ".$apiKey
),
CURLOPT_FAILONERROR => false,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query($data)
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
echo !empty($err) ? $err : $response;
?>
import requests
import time
import hmac
import hashlib
try:
apiKey = "api_key_anda"
privateKey = "private_key_anda"
merchant_code = "T0001"
merchant_ref = "INV345675"
method = "BCAVA"
signStr = "{}{}{}".format(merchant_code, method, merchant_ref)
signature = hmac.new(bytes(privateKey,'latin-1'), bytes(signStr,'latin-1'), hashlib.sha256).hexdigest()
payload = {
'method': method,
'merchant_ref': merchant_ref,
'customer_name': 'Nama Pelanggan',
'signature': signature
}
headers = {
"Authorization": "Bearer " + apiKey
}
result = requests.post(url="https://payment.tripay.co.id/api/open-payment/create", data=payload, headers=headers)
response = result.text
print(response)
except Exception as e:
print("Request Error: " + str(e))
const axios = require('axios'); // using Axios library
const crypto = require('crypto');
var apiKey = "api_key_anda";
var privateKey = "private_key_anda";
var merchant_code = "T0001";
var merchant_ref = "INV345675";
var method = "BCAVA";
var expiry = parseInt(Math.floor(new Date()/1000) + (24*60*60)); # 24 jam
var signature = crypto.createHmac('sha256', privateKey).update(merchant_code + method + merchant_ref).digest('hex');
var payload = {
'method': method,
'merchant_ref': merchant_ref,
'customer_name': 'Nama Pelanggan',
'signature': signature
}
axios.post('https://payment.tripay.co.id/api/open-payment/create', payload, {
headers: {
'Authorization': 'Bearer ' + apiKey
}
})
.then((res) => {
console.log(res)
})
.catch((error) => {
console.error(error)
});
{
"success": true,
"message": "",
"data": {
"uuid": "T0001OP9376HnpS",
"merchant_ref": "INV345675",
"customer_name": "Nama Pelanggan",
"payment_name": "BCA Virtual Account",
"payment_method": "BCAVA",
"pay_code": "1234567890",
"qr_url": null
}
}
{
"success": false,
"message": "Invalid API Key"
}
API ini digunakan untuk mengambil detail transaksi open payment yang pernah dibuat
Method | GET |
Sandbox URL | - |
Production URL | https://payment.tripay.co.id/api/open-payment/{uuid}/detail |
Key | Value | Keterangan |
---|---|---|
Authorization | Bearer {api_key} | Ganti {api_key} dengan API Key merchant Anda |
Parameter | Contoh Nilai | Tipe | Wajib | Keterangan |
---|---|---|---|---|
- |
<?php
$apiKey = 'api_key_anda';
$uuid = "T0001OP9376HnpS";
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_FRESH_CONNECT => true,
CURLOPT_URL => "https://payment.tripay.co.id/api/open-payment/".$uuid."/detail",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HEADER => false,
CURLOPT_HTTPHEADER => array(
"Authorization: Bearer ".$apiKey
),
CURLOPT_FAILONERROR => false,
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
echo !empty($err) ? $err : $response;
?>
import requests
apiKey = "api_key_anda"
try:
uuid = "T0001OP9376HnpS"
headers = {
"Authorization": "Bearer " + apiKey
}
result = requests.get(url="https://payment.tripay.co.id/api/open-payment/" + uuid + "/detail", headers=headers)
response = result.text
print(response)
except Exception as e:
print("Request Error: " + str(e))
const axios = require('axios'); // using Axios library
var apiKey = "api_key_anda";
var uuid = "T0001OP9376HnpS";
axios.get('https://payment.tripay.co.id/api/open-payment/' + uuid + '/detail', {
headers: {
'Authorization': 'Bearer ' + apiKey
}
})
.then((res) => {
console.log(res)
})
.catch((error) => {
console.error(error)
});
{
"success": true,
"message": "",
"data": {
"uuid": "T0001OP9376HnpS",
"merchant_ref": "INV345675",
"customer_name": "Nama Pelanggan",
"payment_name": "BCA Virtual Account",
"payment_method": "BCAVA",
"pay_code": "1234567890"
}
}
{
"success": false,
"message": "Invalid API Key"
}
API ini digunakan untuk mengambil daftar pembayaran yang masuk pada open payment
Method | GET |
Sandbox URL | - |
Production URL | https://payment.tripay.co.id/api/open-payment/{uuid}/transactions |
Key | Value | Keterangan |
---|---|---|
Authorization | Bearer {api_key} | Ganti {api_key} dengan API Key merchant Anda |
Parameter | Contoh Nilai | Tipe | Wajib | Keterangan |
---|---|---|---|---|
reference | T0001000000000000006 | String | Tidak | Nomor referensi transaksi |
merchant_ref | INV345675 | String | Tidak | Nomor referensi dari sistem merchant |
start_date | 2020-11-23 00:00:00 | String | Tidak | Tanggal awal transaksi. Format: Y-m-d H:i:s |
end_date | 2020-11-23 23:59:59 | String | Tidak | Tanggal akhir transaksi. Format: Y-m-d H:i:s |
per_page | 25 | Integer | Tidak | Jumlah data per halaman (default: 25, max: 100) |
<?php
$apiKey = 'api_key_anda';
$uuid = "T0001OP9376HnpS";
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_FRESH_CONNECT => true,
CURLOPT_URL => "https://payment.tripay.co.id/api/open-payment/".$uuid."/transactions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HEADER => false,
CURLOPT_HTTPHEADER => array(
"Authorization: Bearer ".$apiKey
),
CURLOPT_FAILONERROR => false,
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
echo !empty($err) ? $err : $response;
?>
import requests
apiKey = "api_key_anda"
try:
uuid = "T0001OP9376HnpS"
headers = {
"Authorization": "Bearer " + apiKey
}
result = requests.get(url="https://payment.tripay.co.id/api/open-payment/" + uuid + "/transactions", headers=headers)
response = result.text
print(response)
except Exception as e:
print("Request Error: " + str(e))
const axios = require('axios'); // using Axios library
var apiKey = "api_key_anda";
var uuid = "T0001OP9376HnpS";
axios.get('https://payment.tripay.co.id/api/open-payment/' + uuid + '/transactions', {
headers: {
'Authorization': 'Bearer ' + apiKey
}
})
.then((res) => {
console.log(res)
})
.catch((error) => {
console.error(error)
});
{
"success": true,
"message": "",
"data": [
{
"reference": "T0001000000000000006",
"merchant_ref": "INV345675",
"payment_method": "BCAVA",
"payment_name": "BCA Virtual Account",
"customer_name": "Nama Pelanggan",
"amount": 10000,
"fee": 4250,
"amount_received": 5750,
"checkout_url": "https://payment.tripay.co.id/checkout/T0001000000000000006",
"status": "PAID",
"paid_at": 1605967886
},
{
"reference": "T0001000000000000007",
"merchant_ref": "INV345675",
"payment_method": "BCAVA",
"payment_name": "BCA Virtual Account",
"customer_name": "Nama Pelanggan",
"amount": 10000,
"fee": 4250,
"amount_received": 5750,
"checkout_url": "https://payment.tripay.co.id/checkout/T0001000000000000007",
"status": "PAID",
"paid_at": 1605975843
}
],
"pagination": {
"total": 2,
"data_from": 1,
"data_to": 2,
"per_page": 100,
"current_page": 1,
"last_page": 1,
"next_page": null
}
}
{
"success": false,
"message": "Invalid API Key"
}
Callback adalah metode pengiriman notifikasi transaksi dari server TriPay ke server pengguna. Pada saat pembayaran dari pelanggan diselesaikan, maka sistem TriPay akan memberikan notifikasi yang berisi data transaksi yang kemudian dapat dikelola lebih lanjut oleh sistem pengguna.
Selain dikirim pada saat pembayaran sukses, callback juga akan dikirim ketika terjadi perubahan status transaksi sehingga sistem pengguna dapat mengambil tindakan yang sesuai dengan status pembayaran
Callback diamankan dengan adanya tanda tangan (signature) yang wajib Anda validasi untuk memastikan bahwa callback dikirim dari sistem kami dan data callback tidak berubah sewaktu dikirim. Dibawah ini adalah contoh pembuatan signature yang nantinya harus Anda cocokkan dengan X-Callback-Signature yang terkirim bersama dengan notifikasi transaksi.
<?php
$privateKey = 'ytf6ooi2gmlNPfpchd94jDOk8hRWOu';
// ambil data json callback notifikasi
$json = file_get_contents("php://input");
$signature = hash_hmac('sha256', $json, $privateKey);
// result
// 9f167eba844d1fcb369404e2bda53702e2f78f7aa12e91da6715414e65b8c86a
?>
from flask import Flask, request, jsonify # we are using Flask
import hmac
import hashlib
privateKey = "ytf6ooi2gmlNPfpchd94jDOk8hRWOu";
jsonString = jsonify(request.get_json(force=True))
signature = hmac.new(bytes(privateKey,'latin-1'), bytes(jsonString,'latin-1'), hashlib.sha256).hexdigest()
# result
# 9f167eba844d1fcb369404e2bda53702e2f78f7aa12e91da6715414e65b8c86a
Method | POST |
URL | URL callback yang diatur di halaman Merchant atau pada saat request transaksi |
Key | Contoh Nilai | Keterangan |
---|---|---|
Content-Type | application/json | Data callback dikirim menggunakan format JSON |
X-Callback-Signature | 85d99ec90d36c93dad61a98928ef63 | Signature callback |
X-Callback-Event | payment_status | Event callback. Contoh: payment_status, dispute |
Parameter | Contoh Nilai | Tipe | Keterangan |
---|---|---|---|
reference | T0001000000000000006 | String | Kode referensi transaksi |
merchant_ref | INV364654 | String|Null | Kode referensi dari sistem merchant |
payment_method | BRI Virtual Account | String | Nama channel pembayaran yang digunakan |
payment_method_code | BRIVA | String | Kode channel pembayaran yang digunakan |
amount_received | 198000 | Integer | Jumlah bersih yang diterima merchant |
fee | 2000 | Integer | Jumlah biaya yang dikenakan |
total_amount | 200000 | Integer | Jumlah pembayaran yang dibayar pelanggan |
is_customer_fee | 1 | Integer | 0 = Biaya ditanggung Merchant 1 = Biaya ditanggung Pelanggan |
is_closed_payment | 1 | Integer | 0 = Open Payment 1 = Closed Payment |
status | PAID | String | Status transaksi |
paid_at | 1585574209 | Integer|Null | Timestamp waktu pembayaran sukses |
note | Transaksi sukses | String|Null | Keterangan tambahan |
{
"reference": "T0001000023000XXXXX",
"merchant_ref": "INV123456",
"payment_method": "BCA Virtual Account",
"payment_method_code": "BCAVA",
"amount_received": 119400,
"fee": 3850,
"total_amount": 123250,
"is_customer_fee": 0,
"is_closed_payment": 1,
"status": "PAID",
"paid_at": 1608133017,
"note": null
}
Ketika sistem Anda berhasil menerima callback dari kami, sistem Anda harus merespon dengan format JSON yang telah ditentukan. Apabila sistem kami tidak menerima respon yang sesuai, maka akan dianggap gagal dan sistem kami akan mencoba mengirimkan ulang callback dengan jeda waktu 5 menit hingga maksimal 3 kali.
{
"success": true
}
<?php
// include file koneksi database
require('database.php');
// ambil data JSON
$json = file_get_contents("php://input");
// ambil callback signature
$callbackSignature = isset($_SERVER['HTTP_X_CALLBACK_SIGNATURE']) ? $_SERVER['HTTP_X_CALLBACK_SIGNATURE'] : '';
// generate signature untuk dicocokkan dengan X-Callback-Signature
$signature = hash_hmac('sha256', $json, 'private_key_anda');
// validasi signature
if( $callbackSignature !== $signature ) {
exit("Invalid Signature"); // signature tidak valid, hentikan proses
}
$data = json_decode($json);
$event = $_SERVER['HTTP_X_CALLBACK_EVENT'];
if( $event == 'payment_status' )
{
if( $data->status == 'PAID' )
{
$merchantRef = $db->real_escape_string($data->merchant_ref);
// pembayaran sukses, lanjutkan proses sesuai sistem Anda, contoh:
$sql = "SELECT * FROM tbl_invoices WHERE ref = '".$merchantRef."' AND status = 'UNPAID' LIMIT 1";
if( ($getInvoice = $db->query($sql)) )
{
while( $invoice = $getInvoice->fetch_object() )
{
$update = "UPDATE tbl_invoices SET status = 'PAID' WHERE id = {$invoice->id}";
$db->query($update) or die($db->error);
}
}
}
}
echo json_encode(['success' => true]); // berikan respon yang sesuai
?>