API Developer Guide

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 :

  • Nominal pembayaran tidak ditentukan oleh merchant, pelanggan dapat memasukkan nominal berapapun
  • 1 Kode Bayar/Nomor Virtual Account dapat digunakan berkali-kali

Closed Payment :

  • Nominal pembayaran ditentukan oleh merchant
  • 1 Kode Bayar/Nomor Virtual Account hanya dapat digunakan sekali

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

DIRECT

  1. Pelanggan melakukan checkout di situs Anda dan memilih metode pembayaran dari channel yang kami sediakan
  2. Sistem Anda melakukan request transaksi ke API kami
  3. Sistem kami memberikan kode bayar/nomor VA
  4. Sistem Anda menginformasikan kode bayar/nomor VA ke pelanggan dan menginstruksikan pelanggan untuk membayar
  5. Pelanggan melakukan pembayaran
  6. Sistem kami menerima status penyelesaian pembayaran pelanggan Anda
  7. Dana masuk ke akun Anda dan sistem kami mengirimkan notifikasi ke sistem Anda
  8. Sistem Anda memproses notifikasi yang dikirim dan melakukan validasi pembayaran
  9. Pembayaran tervalidasi, sistem Anda memproses pesanan ke pelanggan

REDIRECT

  1. Pelanggan melakukan checkout di situs Anda dan memilih metode pembayaran dari channel yang kami sediakan
  2. Sistem Anda melakukan request transaksi ke API kami
  3. Sistem kami memberikan URL pembayaran
  4. Sistem Anda mengalihkan pelanggan menuju ke URL pembayaran
  5. Pelanggan menyelesaikan proses pembayaran
  6. Sistem kami menerima status penyelesaian pembayaran pelanggan Anda
  7. Dana masuk ke akun Anda dan sistem kami mengirimkan notifikasi ke sistem Anda
  8. Sistem Anda memproses notifikasi yang dikirim dan melakukan validasi pembayaran
  9. Pembayaran tervalidasi, sistem Anda memproses pesanan ke pelanggan

API ini digunakan untuk mendapatkan daftar semua channel pembayaran yang tersedia beserta informasi lengkap termasuk biaya transaksi dari masing-masing channel

Request

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)
});

Response

{
  "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 mendapatkan daftar channel pembayaran yang tersedia pada akun Merchant Anda beserta informasi lengkap termasuk biaya transaksi dari masing-masing channel

Request

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)
});

Response

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

Request

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)
});

Response

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

Request

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 YA 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)
});

Response

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

Request

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)
});

Response

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

Request

Method POST
Sandbox URL -
Production URL https://payment.tripay.co.id/api/transaction/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/transaction/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/transaction/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/transaction/open-payment/create', payload, {
  headers: {
    'Authorization': 'Bearer ' + apiKey
  }
})
.then((res) => {
  console.log(res)
})
.catch((error) => {
  console.error(error)
});

Response

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

Request

Method GET
Sandbox URL -
Production URL https://payment.tripay.co.id/api/transaction/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/transaction/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/transaction/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/transaction/open-payment/' + uuid + '/detail', {
  headers: {
    'Authorization': 'Bearer ' + apiKey
  }
})
.then((res) => {
  console.log(res)
})
.catch((error) => {
  console.error(error)
});

Response

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

Request

Method GET
Sandbox URL -
Production URL https://payment.tripay.co.id/api/transaction/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
referenceT0001000000000000006StringTidakNomor referensi transaksi
merchant_refINV345675StringTidakNomor referensi dari sistem merchant
start_date2020-11-23 00:00:00StringTidakTanggal awal transaksi. Format: Y-m-d H:i:s
end_date2020-11-23 23:59:59StringTidakTanggal akhir transaksi. Format: Y-m-d H:i:s
per_page25IntegerTidakJumlah 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/transaction/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/transaction/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/transaction/open-payment/' + uuid + '/transactions', {
  headers: {
    'Authorization': 'Bearer ' + apiKey
  }
})
.then((res) => {
  console.log(res)
})
.catch((error) => {
  console.error(error)
});

Response

{
    "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.

Pembuatan Signature

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

Request

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
status PAID String Status transaksi
paid_at 1585574209 Integer|Null Timestamp waktu pembayaran sukses
note Transaksi sukses String|Null Keterangan tambahan

Response

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

?>