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:

  1. Asymmetric Signature (RSA SHA256)
  2. 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 + "|" + timestamp

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

Contoh 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

AsymmetricSymmetric
Menggunakan Private/Public KeyMenggunakan Shared Secret
RSA SHA256HMAC SHA512
Digunakan untuk autentikasi awalDigunakan untuk transaksi
Mendukung non-repudiationTidak 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.