Dokumentasi API Publik
Versi: 1.1.0 Terakhir Diperbarui: 2025-12-24
Lingkungan
| Lingkungan | Base URL | Deskripsi |
|---|---|---|
| Produksi | https://gateway.facaiqq.com/v1 | Transaksi nyata, pembayaran langsung |
| Sandbox | https://gateway.facaiqq.com/v1 | Transaksi uji coba (hanya untuk tipe merchant sandbox) |
Gambaran Umum
API Publik memungkinkan merchant untuk mengintegrasikan kemampuan pemrosesan pembayaran ke dalam aplikasi mereka. Semua permintaan API memerlukan autentikasi HMAC-SHA256.
Produksi vs Sandbox
Tipe merchant menentukan rute transaksi:
- Merchant Produksi: Transaksi uang nyata diproses melalui penyedia pembayaran.
- Merchant Sandbox: Transaksi simulasi untuk pengujian. Respons disimulasikan secara lokal tanpa pemrosesan eksternal.
Autentikasi
Semua permintaan API harus menyertakan header berikut:
| Header | Wajib | Deskripsi |
|---|---|---|
X-API-Key | Ya | API key merchant Anda (64 karakter) |
X-Signature | Ya | Tanda tangan HMAC-SHA256 dari permintaan |
X-Timestamp | Ya | Unix timestamp (detik sejak epoch) |
Content-Type | Ya | application/json |
Pembuatan Tanda Tangan
Tanda tangan dihitung menggunakan HMAC-SHA256 dengan Secret Key Anda:
Signature = HMAC-SHA256(SignatureData, SecretKey)
SignatureData = METHOD|PATH|TIMESTAMP|BODYContoh (permintaan POST):
SignatureData = "POST|/v1/payments/deposit|1702400000|{\"amount\":100.00,\"currency\":\"THB\",\"reference_id\":\"ORDER-001\"}"Contoh (permintaan GET):
SignatureData = "GET|/v1/payments/pay_abc123|1702400000"Contoh Kode
import hmac
import hashlib
import time
import json
import requests
api_key = "your_api_key"
secret_key = "your_secret_key"
base_url = "https://gateway.facaiqq.com"
def create_signature(method, path, timestamp, body=""):
# PENTING: path harus berupa path HTTP lengkap (contoh: /v1/payments/deposit)
data = f"{method}|{path}|{timestamp}"
if body:
data += f"|{body}"
return hmac.new(
secret_key.encode(),
data.encode(),
hashlib.sha256
).hexdigest()
def make_request(method, path, body=None):
timestamp = str(int(time.time()))
body_str = json.dumps(body) if body else ""
signature = create_signature(method, path, timestamp, body_str)
headers = {
"X-API-Key": api_key,
"X-Signature": signature,
"X-Timestamp": timestamp,
"Content-Type": "application/json"
}
url = base_url + path
if method == "POST":
return requests.post(url, headers=headers, json=body)
else:
return requests.get(url, headers=headers)
# Buat deposit - catatan: gunakan path lengkap termasuk /v1
response = make_request("POST", "/v1/payments/deposit", {
"amount": 1000.00,
"currency": "THB",
"reference_id": "ORD888888888",
"bank_code": "004",
"bank_account_no": "1234567890",
"bank_account_name": "test test",
"webhook_url": "https://example.com/path/to/your/webhook"
})
print(response.json())const crypto = require("crypto");
const axios = require("axios");
const apiKey = "your_api_key";
const secretKey = "your_secret_key";
const baseUrl = "https://gateway.facaiqq.com";
function createSignature(method, path, timestamp, body = "") {
// PENTING: path harus berupa path HTTP lengkap (contoh: /v1/payments/deposit)
let data = `${method}|${path}|${timestamp}`;
if (body) {
data += `|${body}`;
}
return crypto.createHmac("sha256", secretKey).update(data).digest("hex");
}
async function makeRequest(method, path, body = null) {
const timestamp = Math.floor(Date.now() / 1000).toString();
const bodyStr = body ? JSON.stringify(body) : "";
const signature = createSignature(method, path, timestamp, bodyStr);
const headers = {
"X-API-Key": apiKey,
"X-Signature": signature,
"X-Timestamp": timestamp,
"Content-Type": "application/json",
};
const url = baseUrl + path;
if (method === "POST") {
return axios.post(url, body, { headers });
} else {
return axios.get(url, { headers });
}
}
// Buat deposit - catatan: gunakan path lengkap termasuk /v1
makeRequest("POST", "/v1/payments/deposit", {
amount: 1000.0,
currency: "THB",
reference_id: "ORD888888888",
bank_code: "004",
bank_account_no: "1234567890",
bank_account_name: "test test",
webhook_url: "https://example.com/path/to/your/webhook",
}).then((res) => console.log(res.data));<?php
$apiKey = 'your_api_key';
$secretKey = 'your_secret_key';
$baseUrl = 'https://gateway.facaiqq.com';
function createSignature($method, $path, $timestamp, $body = '') {
global $secretKey;
// PENTING: path harus berupa path HTTP lengkap (contoh: /v1/payments/deposit)
$data = "$method|$path|$timestamp";
if ($body) {
$data .= "|$body";
}
return hash_hmac('sha256', $data, $secretKey);
}
function makeRequest($method, $path, $body = null) {
global $apiKey, $baseUrl;
$timestamp = time();
$bodyStr = $body ? json_encode($body) : '';
$signature = createSignature($method, $path, $timestamp, $bodyStr);
$headers = [
'X-API-Key: ' . $apiKey,
'X-Signature: ' . $signature,
'X-Timestamp: ' . $timestamp,
'Content-Type: application/json'
];
$ch = curl_init($baseUrl . $path);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
if ($method === 'POST') {
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $bodyStr);
}
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true);
}
// Buat deposit - catatan: gunakan path lengkap termasuk /v1
$response = makeRequest('POST', '/v1/payments/deposit', [
'amount' => 1000.00,
'currency' => 'THB',
'reference_id' => 'ORD888888888',
'bank_code' => '004',
'bank_account_no' => '1234567890',
'bank_account_name' => 'test test',
'webhook_url' => 'https://example.com/path/to/your/webhook'
]);
print_r($response);package main
import (
"bytes"
"crypto/hmac"
"crypto/sha256"
"encoding/hex"
"encoding/json"
"fmt"
"io"
"net/http"
"strconv"
"time"
)
const (
apiKey = "your_api_key"
secretKey = "your_secret_key"
baseURL = "https://gateway.facaiqq.com"
)
func createSignature(method, path, timestamp, body string) string {
// PENTING: path harus berupa path HTTP lengkap (contoh: /v1/payments/deposit)
data := fmt.Sprintf("%s|%s|%s", method, path, timestamp)
if body != "" {
data += "|" + body
}
h := hmac.New(sha256.New, []byte(secretKey))
h.Write([]byte(data))
return hex.EncodeToString(h.Sum(nil))
}
func makeRequest(method, path string, body interface{}) (map[string]interface{}, error) {
timestamp := strconv.FormatInt(time.Now().Unix(), 10)
var bodyStr string
var reqBody io.Reader
if body != nil {
bodyBytes, _ := json.Marshal(body)
bodyStr = string(bodyBytes)
reqBody = bytes.NewBuffer(bodyBytes)
}
signature := createSignature(method, path, timestamp, bodyStr)
req, _ := http.NewRequest(method, baseURL+path, reqBody)
req.Header.Set("X-API-Key", apiKey)
req.Header.Set("X-Signature", signature)
req.Header.Set("X-Timestamp", timestamp)
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
return nil, err
}
defer resp.Body.Close()
var result map[string]interface{}
json.NewDecoder(resp.Body).Decode(&result)
return result, nil
}
func main() {
// Buat deposit - catatan: gunakan path lengkap termasuk /v1
result, _ := makeRequest("POST", "/v1/payments/deposit", map[string]interface{}{
"amount": 1000.00,
"currency": "THB",
"reference_id": "ORD888888888",
"bank_code": "004",
"bank_account_no": "1234567890",
"bank_account_name": "test test",
"webhook_url": "https://example.com/path/to/your/webhook",
})
fmt.Printf("%+v\n", result)
}Endpoint
Buat Deposit
Buat permintaan pembayaran deposit baru. Mengembalikan kode QR PromptPay untuk pelanggan membayar.
POST /v1/payments/deposit
Body Permintaan
| Field | Tipe | Wajib | Deskripsi |
|---|---|---|---|
amount | number | Ya | Jumlah pembayaran (> 0) |
currency | string | Ya | Kode mata uang (3 karakter, contoh: "THB") |
reference_id | string | Ya | Referensi pesanan unik Anda (1-64 karakter) |
customer_email | string | Tidak | Email pelanggan untuk notifikasi |
customer_phone | string | Tidak | Nomor telepon pelanggan (maks 20 karakter) |
description | string | Tidak | Deskripsi pembayaran (maks 255 karakter) |
webhook_url | string | Tidak | URL Webhook untuk notifikasi pembayaran |
bank_code | string | Tidak | Kode bank pembayar (3 digit) untuk referensi |
bank_account_no | string | Tidak | Nomor rekening bank pembayar (maks 20 karakter) |
bank_account_name | string | Tidak | Nama pemegang rekening bank pembayar (maks 100 karakter) |
Contoh Permintaan
{
"amount": 1000.00,
"currency": "THB",
"reference_id": "ORD888888888",
"bank_code": "004",
"bank_account_no": "1234567890",
"bank_account_name": "test test",
"webhook_url": "https://example.com/path/to/your/webhook"
}Respons
Format respons bergantung pada apakah amount mencapai ambang batas yang ditentukan admin (contoh di bawah menggunakan 5000 hanya sebagai ilustrasi — nilai sebenarnya dikonfigurasi oleh admin).
Ketika amount di bawah ambang batas (misalnya < 5000) — Bayar via QR PromptPay
company_account = false dan kode QR PromptPay tetap dikembalikan seperti biasa.
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"reference_id": "ORD888888888",
"type": "deposit",
"status": "pending",
"amount": 1000.00,
"currency": "THB",
"company_account": false,
"qr_code": "00020101021129370016A000000677010111011300668123456785802TH5303764...",
"qr_code_image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...",
"created_at": "2025-12-24T10:30:00Z",
"expires_at": "2025-12-24T10:45:00Z"
}Ketika amount mencapai ambang batas (misalnya >= 5000) — Transfer ke rekening perusahaan
company_account = true dengan detail rekening perusahaan (company_account_bank_code, company_account_bank_name, company_account_name, company_account_no). Field qr_code / qr_code_image tidak dikembalikan dalam respons ini.
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"reference_id": "ORD888888888",
"type": "deposit",
"status": "pending",
"amount": 5000.00,
"currency": "THB",
"company_account": true,
"company_account_bank_code": "004",
"company_account_bank_name": "Kasikornbank",
"company_account_name": "PT Contoh",
"company_account_no": "1234567890",
"created_at": "2025-12-24T10:30:00Z",
"expires_at": "2025-12-24T10:45:00Z"
}Field Respons
| Field | Tipe | Deskripsi |
|---|---|---|
id | string | ID transaksi unik (format UUID) |
reference_id | string | Referensi pesanan Anda |
type | string | Tipe transaksi (deposit) |
status | string | Status pembayaran |
amount | number | Jumlah pembayaran |
currency | string | Kode mata uang |
company_account | boolean | Flag rekening perusahaan — true ketika amount mencapai ambang batas admin (transfer ke rekening perusahaan), false ketika di bawah ambang (bayar via QR). 5000 hanya contoh. |
company_account_bank_code | string | Kode bank rekening perusahaan (3 digit) (hanya muncul ketika company_account = true) |
company_account_bank_name | string | Nama bank rekening perusahaan (hanya muncul ketika company_account = true) |
company_account_name | string | Nama pemilik rekening perusahaan (hanya muncul ketika company_account = true) |
company_account_no | string | Nomor rekening perusahaan (hanya muncul ketika company_account = true) |
qr_code | string | String kode QR PromptPay (hanya dikembalikan ketika company_account = false) |
qr_code_image | string | Gambar kode QR terenkode Base64, PNG (hanya dikembalikan ketika company_account = false) |
created_at | string | Timestamp pembuatan (ISO 8601) |
expires_at | string | Timestamp kedaluwarsa (ISO 8601, default 15 menit) |
Buat Penarikan
Buat permintaan penarikan/pembayaran baru ke rekening bank.
POST /v1/payments/withdraw
Body Permintaan
| Field | Tipe | Wajib | Deskripsi |
|---|---|---|---|
amount | number | Ya | Jumlah penarikan (> 0) |
currency | string | Ya | Kode mata uang (3 karakter) |
reference_id | string | Ya | Referensi unik Anda (1-64 karakter) |
bank_code | string | Ya | Kode bank (3 digit, lihat tabel di bawah) |
account_number | string | Ya | Nomor rekening bank (10-20 digit) |
account_holder_name | string | Ya | Nama pemegang rekening (1-100 karakter) |
description | string | Tidak | Deskripsi transfer (maks 255 karakter) |
webhook_url | string | Tidak | URL Webhook untuk notifikasi transfer |
Kode Bank
| Kode | Nama Thai | Nama Inggris |
|---|---|---|
002 | ธนาคารกรุงเทพ | Bangkok Bank PCL (BBL) |
004 | ธนาคารกสิกรไทย | Kasikornbank PCL (Kbank) |
006 | ธนาคารกรุงไทย | Krungthai Bank PCL (KTB) |
011 | ธนาคารทหารไทยธนชาต | TMBThanachart Bank PCL (TTB) |
014 | ธนาคารไทยพาณิชย์ | Siam Commercial Bank PCL (SCB) |
017 | ธนาคารซิตี้แบงก์ | Citibank N.A. |
020 | ธนาคารสแตนดาร์ดชาร์เตอร์ด (ไทย) | Standard Chartered Bank (Thai) PCL |
022 | ธนาคารซีไอเอ็มบี ไทย | CIMB Thai Bank PCL |
024 | ธนาคารยูโอบี | United Overseas Bank (Thai) PCL |
025 | ธนาคารกรุงศรีอยุธยา | Bank of Ayudhya PCL (Krungsri) |
026 | ธนาคารเมกะสากลพาณิชย์ | Mega International Commercial Bank |
030 | ธนาคารออมสิน | Government Savings Bank (GSB) |
031 | ธนาคารฮ่องกงและเซี่ยงไฮ้ | HSBC Thailand |
033 | ธนาคารอาคารสงเคราะห์ | Government Housing Bank (GHB) |
034 | ธนาคารเพื่อการเกษตรฯ | BAAC |
065 | ธนาคารธนชาต | Thanachart Bank PCL |
066 | ธนาคารอิสลามแห่งประเทศไทย | Islamic Bank of Thailand |
067 | ธนาคารทิสโก้ | TISCO Bank PCL |
069 | ธนาคารเกียรตินาคินภัทร | Kiatnakin Phatra Bank PCL (KKP) |
070 | ธนาคารไอซีบีซี (ไทย) | ICBC (Thai) PCL |
071 | ธนาคารไทยเครดิต | Thai Credit Retail Bank |
073 | ธนาคารแลนด์ แอนด์ เฮ้าส์ | Land and Houses Bank PCL (LH Bank) |
088 | ธนาคารคลิกซ์ | Clicx Bank |
PROMPTPAY | พร้อมเพย์ | PromptPay |
TRUE | ทรูมันนี่ | TrueMoney |
Penarikan PromptPay
Ketika menggunakan bank_code: "PROMPTPAY", field account_number harus berisi:
| Panjang Nomor Rekening | Tipe Proxy | Deskripsi |
|---|---|---|
| 10 digit | MOBILE | Nomor telepon seluler |
| 13 digit | TXID | Nomor KTP atau Nomor Pajak |
Contoh Permintaan (PromptPay dengan Nomor Telepon):
{
"amount": 5000.00,
"currency": "THB",
"reference_id": "ORD888888890",
"bank_code": "PROMPTPAY",
"account_number": "0812345678",
"account_holder_name": "John Doe"
}Contoh Permintaan (PromptPay dengan Nomor KTP):
{
"amount": 5000.00,
"currency": "THB",
"reference_id": "ORD888888891",
"bank_code": "PROMPTPAY",
"account_number": "1234567890123",
"account_holder_name": "John Doe"
}Contoh Permintaan
{
"amount": 5000.00,
"currency": "THB",
"reference_id": "ORD888888889",
"bank_code": "014",
"account_number": "1234567890",
"account_holder_name": "John Doe",
"webhook_url": "https://example.com/path/to/your/webhook"
}Respons
{
"id": "660e8400-e29b-41d4-a716-446655440000",
"reference_id": "ORD888888889",
"type": "withdraw",
"status": "processing",
"amount": 5000.00,
"currency": "THB",
"created_at": "2025-12-24T11:00:00Z"
}Dapatkan Pembayaran
Ambil detail pembayaran berdasarkan ID pembayaran.
GET /v1/payments/{id}
Parameter Path
| Parameter | Tipe | Deskripsi |
|---|---|---|
id | string | ID Pembayaran (format UUID) |
Contoh Respons
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"reference_id": "ORDER-2024-001",
"type": "deposit",
"status": "completed",
"amount": 1500.00,
"currency": "THB",
"qr_code": "00020101021129370016A000000677010111...",
"created_at": "2024-12-12T10:30:00Z",
"expires_at": "2024-12-12T10:45:00Z"
}Batalkan Pembayaran
Batalkan pembayaran yang tertunda. Hanya pembayaran dengan status pending yang dapat dibatalkan.
POST /v1/payments/{id}/cancel
Parameter Path
| Parameter | Tipe | Deskripsi |
|---|---|---|
id | string | ID Pembayaran yang dibatalkan |
Contoh Respons
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"reference_id": "ORDER-2024-001",
"type": "deposit",
"status": "cancelled",
"amount": 1500.00,
"currency": "THB",
"created_at": "2024-12-12T10:30:00Z"
}Status Pembayaran
| Status | Deskripsi |
|---|---|
pending | Pembayaran dibuat, menunggu tindakan pelanggan |
processing | Pembayaran sedang diproses |
completed | Pembayaran berhasil diselesaikan |
failed | Pembayaran gagal (termasuk transaksi kedaluwarsa) |
cancelled | Pembayaran dibatalkan |
refunded | Pembayaran dikembalikan |
Catatan
Ketika pembayaran kedaluwarsa (pelanggan tidak membayar dalam batas waktu), status berubah menjadi failed dengan alasan kegagalan "Transaction expired". Webhook akan dikirim untuk memberitahu sistem Anda.
Webhook
Ketika Anda menyediakan webhook_url, kami akan mengirim permintaan POST dengan pembaruan pembayaran.
Payload Webhook
Payload webhook dikirim langsung (tidak dibungkus dalam struktur event):
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"type": "deposit",
"amount": 1500.00,
"fee": 37.50,
"netAmount": 1462.50,
"bankAccountNo": "1234567890",
"bankAccountName": "SOMCHAI JAIDEE",
"bankCode": "014",
"bankName": "ธนาคารไทยพาณิชย์",
"currency": "THB",
"referenceNo": "ORDER-2024-001",
"status": "success",
"timestamp": "2024-12-12T10:35:00Z",
"paidAt": "2024-12-12T10:34:55.123456789Z"
}Field Payload Webhook
| Field | Tipe | Deskripsi |
|---|---|---|
id | string | ID Transaksi |
type | string | Tipe transaksi: deposit atau withdraw |
amount | number | Jumlah pembayaran asli |
fee | number | Biaya pemrosesan yang dikenakan |
netAmount | number | Jumlah setelah pemotongan biaya |
bankAccountNo | string | Nomor rekening bank (untuk deposit dengan info pembayar) |
bankAccountName | string | Nama pemegang rekening bank |
bankCode | string | Kode bank |
bankName | string | Nama bank dalam bahasa Thai |
currency | string | Kode mata uang |
referenceNo | string | ID referensi Anda |
status | string | success, failed, atau expired |
timestamp | string | Timestamp pengiriman webhook (ISO 8601) |
paidAt | string | Waktu penyelesaian pembayaran (kosong jika belum bayar) |
Nilai Status Webhook
| Status | Deskripsi |
|---|---|
success | Pembayaran berhasil diselesaikan |
failed | Pembayaran gagal atau kedaluwarsa |
expired | Pembayaran kedaluwarsa (legacy, sekarang menggunakan failed) |
Kebijakan Percobaan Ulang Webhook
- Webhook dicoba ulang hingga 5 kali jika pengiriman gagal
- Interval percobaan ulang: 1 menit antar percobaan
- Pengiriman berhasil adalah respons HTTP 2xx
- Setelah 5 percobaan gagal, webhook ditandai sebagai gagal
Verifikasi Webhook
Permintaan webhook menyertakan header untuk verifikasi:
| Header | Deskripsi |
|---|---|
X-Webhook-Signature | Tanda tangan HMAC-SHA256 dari body permintaan |
X-Webhook-Timestamp | Unix timestamp dari webhook |
Content-Type | application/json |
Verifikasi webhook menggunakan metode HMAC yang sama dengan permintaan API:
import hmac
import hashlib
def verify_webhook(body, signature, timestamp, secret_key):
expected = hmac.new(
secret_key.encode(),
f"{timestamp}|{body}".encode(),
hashlib.sha256
).hexdigest()
return hmac.compare_digest(expected, signature)Respons Error
Semua error mengikuti format ini:
{
"code": "ERROR_CODE",
"message": "Pesan error yang dapat dibaca manusia"
}Kode Status HTTP
| Status | Deskripsi |
|---|---|
200 | Berhasil |
201 | Berhasil dibuat |
400 | Permintaan buruk - parameter tidak valid |
401 | Tidak terotorisasi - API key atau tanda tangan tidak valid |
403 | Dilarang - merchant tidak aktif atau izin tidak mencukupi |
404 | Tidak ditemukan |
409 | Konflik - reference_id duplikat |
500 | Error server internal |
504 | Gateway timeout |
Kode Error
| Kode | Deskripsi |
|---|---|
INVALID_REQUEST | Validasi body permintaan gagal |
MISSING_API_KEY | Header X-API-Key tidak ada |
MISSING_SIGNATURE | Header X-Signature tidak ada |
MISSING_TIMESTAMP | Header X-Timestamp tidak ada |
INVALID_API_KEY | API key tidak valid |
INVALID_SIGNATURE | Verifikasi tanda tangan gagal |
INVALID_TIMESTAMP | Format timestamp tidak valid |
TIMESTAMP_EXPIRED | Timestamp permintaan di luar jendela valid |
MERCHANT_INACTIVE | Akun merchant tidak aktif |
PAYMENT_NOT_FOUND | Pembayaran tidak ditemukan |
PAYMENT_ERROR | Error pemrosesan pembayaran umum |
DUPLICATE_REFERENCE | Reference ID sudah ada |
INSUFFICIENT_BALANCE | Saldo tidak mencukupi untuk penarikan |
INVALID_BANK_CODE | Kode bank tidak valid |
INVALID_ACCOUNT | Rekening bank tidak valid (sandbox) |
PAYMENT_CANNOT_BE_CANCELLED | Pembayaran tidak dapat dibatalkan |
TIMEOUT | Permintaan timeout |
Pengujian Sandbox
Cara Kerja Sandbox
Mode sandbox ditentukan oleh tipe merchant Anda, bukan URL terpisah. Baik merchant sandbox maupun produksi menggunakan endpoint API yang sama:
Base URL: https://gateway.facaiqq.com/v1
- Merchant Sandbox: Transaksi disimpan dalam database sandbox. Tidak ada uang nyata yang diproses.
- Merchant Produksi: Transaksi disimpan dalam database produksi dan diproses melalui penyedia pembayaran.
Hubungi dukungan untuk meminta kredensial sandbox untuk pengujian.
Jumlah Uji Coba
Dalam mode sandbox, jumlah tertentu memicu perilaku berbeda:
| Jumlah | Mata Uang | Perilaku | Deskripsi |
|---|---|---|---|
100.00 | THB | auto_approve | Pembayaran selesai segera |
200.00 | THB | auto_pending | Pembayaran tetap pending (simulasi tertunda) |
500.00 | THB | auto_approve | Pembayaran selesai segera |
888.88 | THB | timeout | Pembayaran timeout |
999.99 | THB | auto_fail | Pembayaran gagal segera |
1000.00 | THB | auto_approve | Pembayaran selesai segera |
| Lainnya | THB | pending | Alur pembayaran normal |
Skenario Uji Coba
Anda dapat mengganti perilaku menggunakan header X-Sandbox-Scenario:
| Skenario | Deskripsi |
|---|---|
auto_approve | Paksa pembayaran selesai segera |
auto_fail | Paksa pembayaran gagal |
auto_pending | Paksa pembayaran tetap pending |
timeout | Simulasikan timeout |
invalid_account | Simulasikan rekening bank tidak valid (hanya withdraw) |
Contoh:
curl -X POST https://gateway.facaiqq.com/v1/payments/deposit \
-H "X-Sandbox-Scenario: auto_approve" \
-H "X-API-Key: your_sandbox_api_key" \
-H "X-Signature: ..." \
-H "X-Timestamp: ..." \
-H "Content-Type: application/json" \
-d '{"amount": 500.00, "currency": "THB", "reference_id": "TEST-001"}'Header Respons
Respons menyertakan header yang menunjukkan lingkungan:
| Header | Nilai | Deskripsi |
|---|---|---|
X-Environment | sandbox atau production | Menunjukkan tipe merchant |
Kedaluwarsa Transaksi
- Transaksi deposit memiliki kedaluwarsa default 15 menit
- Jika pelanggan tidak membayar dalam waktu tersebut:
- Status berubah menjadi
failed(bukanexpired) failure_reasondiatur ke "Transaction expired"- Webhook dikirim dengan
status: "failed"
- Status berubah menjadi
- Pemeriksaan kedaluwarsa berjalan setiap 1 menit
Batas Rate
| Endpoint | Batas Rate |
|---|---|
| Semua endpoint | 100 permintaan/menit |
| Buat Deposit | 30 permintaan/menit |
| Buat Penarikan | 20 permintaan/menit |
Header batas rate disertakan dalam respons:
| Header | Deskripsi |
|---|---|
X-RateLimit-Limit | Permintaan maksimum per jendela |
X-RateLimit-Remaining | Permintaan tersisa dalam jendela |
X-RateLimit-Reset | Unix timestamp ketika batas direset |
Dukungan
Untuk dukungan teknis:
- Email: [email protected]
- Dokumentasi: https://docs.facaiqq.com
- Halaman Status: https://gateway.facaiqq.com