Pembuatan Signature
Untuk memastikan keamanan transaksi, iPaymu mewajibkan header signature di setiap request API.
Untuk memastikan keamanan transaksi, iPaymu mewajibkan header signature di setiap request API. Signature ini dibuat menggunakan API Key Anda dan detail request.
Cara Membuat Signature
Alur Pembuatan Signature
5 tahapan pembuatan & hashing HMAC-SHA256 signature request
Siapkan Input Signature
Siapkan HTTP Method (POST/GET), Nomor VA, Body Request JSON, dan API Key milik Anda.
Hash Body (SHA-256)
Stringify body JSON dan hitung nilai hash SHA-256 (format hex huruf kecil).
Susun String to Sign
Gabungkan parameter dengan titik dua: Method + ":" + VA + ":" + BodyHash + ":" + APIKey
Generate HMAC-SHA256
Hitung HMAC-SHA256 dari String to Sign menggunakan API Key Anda sebagai rahasia kuis.
Kirim Header HTTP
Sertakan string signature yang dihasilkan pada header request "signature" HTTP.
Signature dibuat menggunakan hashing HMAC-SHA256.
Rumus
String to Sign = Method + ":" + VA + ":" + RequestBody + ":" + APIKey
Signature = HMAC-SHA256(String to Sign, APIKey)Komponen
- Method: Metode HTTP (contoh:
GET,POST). - VA: Nomor Virtual Account Anda.
- RequestBody:
- Untuk request GET: Query parameters yang di-stringify JSON.
- Untuk request POST: Hash SHA256 dari body JSON.
- APIKey: API Key iPaymu Anda.
Contoh Implementasi
const crypto = require('crypto-js');
// Konfigurasi
const apiKey = 'YOUR_API_KEY';
const va = 'YOUR_VA';
const method = 'POST'; // atau 'GET'
// Untuk Body Request POST
const body = {
product: ['T-Shirt'],
qty: ['1'],
price: ['100000'],
returnUrl: 'https://your-website.com/thank-you',
notifyUrl: 'https://your-website.com/notify',
cancelUrl: 'https://your-website.com/cancel',
referenceId: 'ID1234'
};
// 1. Stringify body
const bodyJson = JSON.stringify(body);
// 2. Hash body (SHA256)
const bodyHash = crypto.SHA256(bodyJson).toString(crypto.enc.Hex);
// 3. Susun String to Sign
const stringToSign = `${method}:${va}:${bodyHash}:${apiKey}`;
// 4. Generate Signature (HMAC-SHA256)
const signature = crypto.HmacSHA256(stringToSign, apiKey).toString(crypto.enc.Hex);
console.log('Signature:', signature);Pastikan urutan parameter dalam body JSON Anda sama persis dengan yang Anda kirimkan dalam request. Disarankan untuk mengurutkan kunci secara alfabetis jika serializer JSON Anda tidak menjamin urutan, meskipun iPaymu biasanya mengharapkan string mentah yang digunakan dalam body request.
Menggunakan Signature
Setelah dibuat, sertakan signature dalam header request Anda:
signature: <generated_signature>
va: <your_va>
timestamp: <current_timestamp>