Otorisasi

Metode API terlindungi memerlukan otorisasi dengan tanda tangan HMAC-SHA256.

Required headers

Setiap request harus berisi tiga header wajib:

X-Timestamp
Unix timestamp dalam detik
X-Signature
Tanda tangan request HMAC-SHA256 dalam format hex
X-Client-Id
ID merchant Anda

Signature generation

Tanda tangan dibuat berdasarkan timestamp dan body request.

Format:

{timestamp}.{canonicalBody}

Format description

timestamp
Waktu Unix saat ini dalam detik
canonicalBody
Body JSON request yang dikonversi ke format canonical

Algoritma tanda tangan:

  • Ambil waktu Unix saat ini dalam detik
  • Ambil body request
  • Konversi JSON ke format canonical
  • Bentuk string: timestamp + "." + canonicalBody
  • Tandatangani string dengan HMAC-SHA256 menggunakan api_secret
  • Kirim timestamp dan tanda tangan di header request

Persyaratan penting:

  • api_secret tidak boleh dikirim dalam request
  • api_secret harus disimpan hanya di sisi server merchant
  • Tanda tangan harus dihitung terpisah untuk setiap request
  • X-Timestamp harus sesuai dengan waktu pembentukan tanda tangan
  • Body request yang dikirim ke API harus sama persis dengan body yang digunakan untuk menghitung tanda tangan
  • Untuk request tanpa body, string yang ditandatangani berbentuk: {timestamp}

Contoh:

Authorization errors

401 Invalid X-Timestamp

{
  "status": 401,
  "message": "Invalid X-Timestamp"
}

401 Expired X-Timestamp

{
  "status": 401,
  "message": "Expired X-Timestamp"
}

401 Invalid X-Signature

{
  "status": 401,
  "message": "Invalid X-Signature"
}

401 Invalid token

{
  "status": 401,
  "message": "Invalid token"
}

401 Merchant secret not configured

{
  "status": 401,
  "message": "Merchant secret not configured"
}

500 Internal Server Error

{
  "status": 500,
  "message": "Internal Server Error"
}