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

Daftar Channel Pembayaran

Kode Nama Channel Tipe Biaya Admin *
MYBVA Maybank Virtual Account DIRECT Rp 3.750
PERMATAVA Permata Virtual Account DIRECT Rp 3.750
BNIVA BNI Virtual Account DIRECT Rp 3.750
ALFAMART Alfamart DIRECT Rp 1.250
BRIVA BRI Virtual Account DIRECT Rp 1.750
MANDIRIVA Mandiri Virtual Account DIRECT Rp 2.750
QRIS QRIS REDIRECT Rp 750 + 0,70%
ALFAMIDI Alfamidi DIRECT Rp 1.250

* 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 menambahkan rekening ke akun

Request

Method POST
Sandbox URL -
Production URL https://payment.tripay.co.id/api/account/add-bank
Key Value Keterangan
Authorization Bearer {api_key} Ganti {api_key} dengan API Key merchant Anda
X-Hub-Signature - Tanda tangan digital yang dibuat dengan HMAC-SHA256 dari json request
Parameter Tipe Contoh Nilai Wajib Keterangan
bank_code String 002 YA 3 digit kode bank
account_number String 1234567890 YA Nomor rekening penarikan
account_name String Nama Pemilik YA Nama pemilik rekening
is_primary Integer 1 TIDAK Atur rekening ini sebagai rekening utama.
1 = Ya
0 = Tidak
<?php

$apiKey = 'api_key_anda';
$privateKey = 'private_key_anda';

$payload = [
  'bank_code'	=> '002',
  'account_number' => '1234567890',
  'account_name' => 'Nama Pemilik'
];

$signature = hash_hmac('sha256', json_encode($payload), $privateKey);

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_FRESH_CONNECT     => true,
  CURLOPT_URL               => "https://payment.tripay.co.id/api/account/add-bank",
  CURLOPT_POST              => true,
  CURLOPT_POSTFIELDS        => http_build_query($payload),
  CURLOPT_RETURNTRANSFER    => true,
  CURLOPT_HEADER            => false,
  CURLOPT_HTTPHEADER        => array(
    "Authorization: Bearer ".$apiKey,
    "X-Hub-Signature: ".$signature
  ),
  CURLOPT_FAILONERROR       => false
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

echo !empty($err) ? $err : $response;

?>
import requests
import hmac
import hashlib
import json

try:
  apiKey = "api_key_anda"
  privateKey = "private_key_anda"

  payload = {
    'bank_code': '002',
    'account_number': '1234567890',
    'account_name': 'Nama Pemilik'
  }

  signStr = "{}".format(json.dumps(payload, separators=(',', ':')))
  signature = hmac.new(bytes(privateKey,'latin-1'), bytes(signStr,'latin-1'), hashlib.sha256).hexdigest()

  headers = {
    "Authorization": "Bearer " + apiKey,
    "X-Hub-Signature": signature
  }

  result = requests.post(url="https://payment.tripay.co.id/api/account/add-bank", 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 payload = {
    'bank_code': '002',
    'account_number': '1234567890',
    'account_name': 'Nama Pemilik'
};

var signature = crypto.createHmac('sha256', privateKey).update(JSON.stringify(payload)).digest('hex');

axios.post('https://payment.tripay.co.id/api/account/add-bank', payload, {
  headers: {
    'Authorization': 'Bearer ' + apiKey,
    'X-Hub-Signature': signature
  }
})
.then((res) => {
  console.log(res)
})
.catch((error) => {
  console.error(error)
});

Response

{
  "success": true,
  "message": "Rekening berhasil ditambahkan"
}
{
  "success": false,
  "message": "Invalid API Key"
}

API ini digunakan untuk memperbarui rekening yang terdaftar di akun

Request

Method POST
Sandbox URL -
Production URL https://payment.tripay.co.id/api/account/update-bank
Key Value Keterangan
Authorization Bearer {api_key} Ganti {api_key} dengan API Key merchant Anda
X-Hub-Signature - Tanda tangan digital yang dibuat dengan HMAC-SHA256 dari json request
Parameter Tipe Contoh Nilai Wajib Keterangan
id Integer 1 YA ID rekening
account_number String 1234567890 YA Nomor rekening penarikan
account_name String Nama Pemilik YA Nama pemilik rekening
is_primary Integer 1 TIDAK Atur rekening ini sebagai rekening utama.
1 = Ya
0 = Tidak
<?php

$apiKey = 'api_key_anda';
$privateKey = 'private_key_anda';

$payload = [
  'id'	=> 1,
  'account_number' => '1234567890',
  'account_name' => 'Nama Pemilik'
];

$signature = hash_hmac('sha256', json_encode($payload), $privateKey);

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_FRESH_CONNECT     => true,
  CURLOPT_URL               => "https://payment.tripay.co.id/api/account/update-bank",
  CURLOPT_POST              => true,
  CURLOPT_POSTFIELDS        => http_build_query($payload),
  CURLOPT_RETURNTRANSFER    => true,
  CURLOPT_HEADER            => false,
  CURLOPT_HTTPHEADER        => array(
    "Authorization: Bearer ".$apiKey,
    "X-Hub-Signature: ".$signature
  ),
  CURLOPT_FAILONERROR       => false
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

echo !empty($err) ? $err : $response;

?>
import requests
import hmac
import hashlib
import json

try:
  apiKey = "api_key_anda"
  privateKey = "private_key_anda"

  payload = {
    'id': 1,
    'account_number': '1234567890',
    'account_name': 'Nama Pemilik'
  }

  signStr = "{}".format(json.dumps(payload, separators=(',', ':')))
  signature = hmac.new(bytes(privateKey,'latin-1'), bytes(signStr,'latin-1'), hashlib.sha256).hexdigest()

  headers = {
    "Authorization": "Bearer " + apiKey,
    "X-Hub-Signature": signature
  }

  result = requests.post(url="https://payment.tripay.co.id/api/account/update-bank", 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 payload = {
    'id': 1,
    'account_number': '1234567890',
    'account_name': 'Nama Pemilik'
};

var signature = crypto.createHmac('sha256', privateKey).update(JSON.stringify(payload)).digest('hex');

axios.post('https://payment.tripay.co.id/api/account/update-bank', payload, {
  headers: {
    'Authorization': 'Bearer ' + apiKey,
    'X-Hub-Signature': signature
  }
})
.then((res) => {
  console.log(res)
})
.catch((error) => {
  console.error(error)
});

Response

{
  "success": true,
  "message": "Rekening berhasil diperbarui"
}
{
  "success": false,
  "message": "Invalid API Key"
}

API ini digunakan untuk menghapus rekening yang terdaftar di akun

Request

Method POST
Sandbox URL -
Production URL https://payment.tripay.co.id/api/account/delete-bank
Key Value Keterangan
Authorization Bearer {api_key} Ganti {api_key} dengan API Key merchant Anda
X-Hub-Signature - Tanda tangan digital yang dibuat dengan HMAC-SHA256 dari json request
Parameter Tipe Contoh Nilai Wajib Keterangan
id Integer 1 YA ID rekening yang ingin dihapus
<?php

$apiKey = 'api_key_anda';
$privateKey = 'private_key_anda';

$payload = [
  'id'	=> 1
];

$signature = hash_hmac('sha256', json_encode($payload), $privateKey);

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_FRESH_CONNECT     => true,
  CURLOPT_URL               => "https://payment.tripay.co.id/api/account/delete-bank",
  CURLOPT_POST              => true,
  CURLOPT_POSTFIELDS        => http_build_query($payload),
  CURLOPT_RETURNTRANSFER    => true,
  CURLOPT_HEADER            => false,
  CURLOPT_HTTPHEADER        => array(
    "Authorization: Bearer ".$apiKey,
    "X-Hub-Signature: ".$signature
  ),
  CURLOPT_FAILONERROR       => false
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

echo !empty($err) ? $err : $response;

?>
import requests
import hmac
import hashlib
import json

try:
  apiKey = "api_key_anda"
  privateKey = "private_key_anda"

  payload = {
    'id': 1
  }

  signStr = "{}".format(json.dumps(payload, separators=(',', ':')))
  signature = hmac.new(bytes(privateKey,'latin-1'), bytes(signStr,'latin-1'), hashlib.sha256).hexdigest()

  headers = {
    "Authorization": "Bearer " + apiKey,
    "X-Hub-Signature": signature
  }

  result = requests.post(url="https://payment.tripay.co.id/api/account/delete-bank", 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 payload = {
    'id': 1
};

var signature = crypto.createHmac('sha256', privateKey).update(JSON.stringify(payload)).digest('hex');

axios.post('https://payment.tripay.co.id/api/account/delete-bank', payload, {
  headers: {
    'Authorization': 'Bearer ' + apiKey,
    'X-Hub-Signature': signature
  }
})
.then((res) => {
  console.log(res)
})
.catch((error) => {
  console.error(error)
});

Response

{
  "success": true,
  "message": "Rekening berhasil dihapus"
}
{
  "success": false,
  "message": "Invalid API Key"
}

API ini digunakan untuk mendapatkan daftar rekening bank user

Request

Method GET
URL https://payment.tripay.co.id/api/account/list-bank
Key Value Keterangan
Authorization Bearer {api_key} Ganti {api_key} dengan API Key merchant Anda
Parameter Tipe Contoh Nilai Wajib Keterangan
page Integer 1 TIDAK Nomor halaman
per_page Integer 50 TIDAK Jumlah data per halaman. Maks: 50
sort String asc TIDAK Sorting data.
asc : Terlama ke Terbaru
desc : Terbaru ke Terlama
id Integer 1 TIDAK Untuk melakukan pencarian berdasarkan id rekening
bank_code String 002 TIDAK Untuk melakukan pencarian berdasarkan 3 digit kode bank
account_number String 1234567890 TIDAK Untuk melakukan pencarian berdasarkan nomor rekening
account_name String Nama Pemilik TIDAK Untuk melakukan pencarian berdasarkan nama pemilik rekening
is_primary Integer (0/1) 0 TIDAK Untuk melakukan pencarian rekening utama atau bukan
<?php

$apiKey = 'api_key_anda';

$payload = [
  'page'    => 1,
  'per_page'    => 25
];

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_FRESH_CONNECT     => true,
  CURLOPT_URL               => "https://payment.tripay.co.id/api/account/list-bank?".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 = {
    "page": 1,
    "per_page": 25
  }

  headers = {
    "Authorization": "Bearer " + apiKey
  }

  result = requests.get(url="https://payment.tripay.co.id/api/account/list-bank", 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/account/list-bank?page=1&per_page=25', {
  headers: {
    'Authorization': 'Bearer ' + apiKey
  }
})
.then((res) => {
  console.log(res)
})
.catch((error) => {
  console.error(error)
});

Response

{
  "success": true,
  "message": "Success",
  "data": [
      {
        "bank_code": "002",
        "account_number": "1234567890",
        "account_name": "NAMA PEMILIK",
        "is_primary": 1
      }
    ],
  "pagination": {
    "sort": "asc",
    "offset": {
      "from": 1,
      "to": 1
    },
      "current_page": 1,
      "previous_page": null,
      "next_page": null,
      "last_page": 1,
      "total_records": 1
  }
}
{
  "success": false,
  "message": "Invalid API Key"
}

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

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

?>