Autentikasi & Kredensial
Pengisian Signature
Setiap request ke gateway Paprika wajib di-sign — asymmetric (RSA SHA256) untuk access token, symmetric (HMAC SHA512) untuk transaksi.
Integrasi Servis Paprika
Dalam proses integrasi API Paprika, setiap request wajib dilengkapi dengan Signature sebagai bagian dari mekanisme keamanan untuk memastikan:
- Authentication (Keaslian pengirim)
- Integrity (Integritas data)
- Non-repudiation (khusus asymmetric)
Terdapat 2 jenis signature yang digunakan:
- Asymmetric Signature (RSA SHA256)
- Symmetric Signature (HMAC SHA512)
1. Asymmetric Signature (RSA SHA256)
Konsep
Asymmetric signature menggunakan sepasang kunci publik dan privat. Merchant menyimpan private key untuk melakukan signing, sedangkan public key didaftarkan ke Paprika untuk verifikasi signature. Algoritma yang digunakan adalah SHA256withRSA. Asymmetric signature digunakan untuk request access token (/api/snap/v1.0/access-token/b2b).
- Private Key → disimpan oleh Merchant (untuk signing).
- Public Key → didaftarkan ke Paprika (untuk verifikasi).
MERCHANT_API_KEY + "|" + timestamp585c47dc-27de-4cc3-a65c-43b83033ea2d|2026-03-04T08:15:30+07:00Contoh Implementasi (Postman Script)
var clientKey = pm.collectionVariables.get("MERCHANT_API_KEY");
var privateKey = pm.collectionVariables.get("MERCHANT_PRIVATE_KEY");
var timestamp = moment().format("YYYY-MM-DDTHH:mm:ssZ");
var stringToSign = clientKey + "|" + timestamp;
var signer = new pmlib.rs.KJUR.crypto.Signature({ alg: "SHA256withRSA" });
signer.init(privateKey);
var signature = CryptoJS.enc.Base64.stringify(
CryptoJS.enc.Hex.parse(signer.signString(stringToSign))
);
pm.request.headers.add({
key: "X-CLIENT-KEY",
value: clientKey,
});
pm.request.headers.add({
key: "X-TIMESTAMP",
value: timestamp,
});
pm.request.headers.add({
key: "X-SIGNATURE",
value: signature,
});Header yang dibutuhkan untuk request access token:
X-CLIENT-KEY: {MERCHANT_API_KEY}
X-TIMESTAMP: {timestamp}
X-SIGNATURE: {signature}
2. Symmetric Signature (HMAC SHA512)
Konsep
Symmetric signature menggunakan API Secret (shared secret antara Merchant & Paprika). Algoritma yang digunakan adalah HMAC SHA512. Symmetric signature digunakan untuk request transaksi atau endpoint lainnya setelah mendapatkan access token.
<HTTP_METHOD>:<ENDPOINT>:<ACCESS_TOKEN>:<SHA256(BODY)>:<TIMESTAMP>POST:/api/v1/payment:access_token_value:bodyhashvalue:2026-03-04T08:15:30+07:00Contoh Implementasi (Postman Script)
const apiSecret = pm.collectionVariables.get("MERCHANT_API_SECRET");
const accessToken = pm.collectionVariables.get("SNAP_ACCESS_TOKEN");
const httpMethod = pm.request.method;
const endpoint = pm.request.url.getPath();
let requestBody = "";
if (httpMethod = "POST" || httpMethod = "PUT") {
const rawBody = pm.request.body.raw;
const resolvedBody = pm.variables.replaceIn(rawBody);
requestBody = JSON.stringify(JSON.parse(resolvedBody));
}
const stringToSign = httpMethod +":" + endpoint + ":" +
accessToken + ":" + CryptoJS.SHA256(requestBody) + ":" + timestamp;
const signature = CryptoJS.enc.Base64.stringify(
CryptoJS.HmacSHA512(stringToSign, apiSecret),
);Script di atas akan menghasilkan signature untuk request transaksi. Header yang dihasilkan:
Authorization: "Bearer {access_token}"
X-TIMESTAMP: "{timestamp}"
X-SIGNATURE: "{signature}"
X-PARTNER-ID: "{API_KEY}"
Perbedaan Symmetric vs Asymmetric
| Asymmetric | Symmetric |
|---|---|
| Menggunakan Private/Public Key | Menggunakan Shared Secret |
| RSA SHA256 | HMAC SHA512 |
| Digunakan untuk autentikasi awal | Digunakan untuk transaksi |
| Mendukung non-repudiation | Tidak mendukung non-repudiation |
Ketentuan Umum
- Timestamp wajib menggunakan format ISO 8601.
- Tidak boleh ada spasi tambahan dalam stringToSign.
- Body harus dalam format JSON yang telah dinormalisasi.
- Private Key dan API Secret harus dijaga kerahasiaannya.