SNAP Signature
Asymmetric Signature
Asymmetric Signature digunakan untuk melakukan verifikasi permintaan Access Token. Proses pembuatan signature dilakukan menggunakan private key. Sistem PakaiLink mendukung format PKCS#8 untuk private key, sehingga merchant akan diminta untuk membuat signature menggunakan file pkcs8_rsa_private_key.pem. Signature yang dihasilkan kemudian akan diverifikasi menggunakan public key yang disimpan dalam file rsa_public_key.pem. PakaiLink menggunakan algoritma SHA256withRSA, dengan tipe format yang diterapkan adalah Base64.
Pembuatan Asymmetric Key
- Gunakan perintah berikut untuk menghasilkan private key RSA:
openssl genrsa -out rsa_private_key.pem 2048
- Setelah private key dibuat, ekstrak public key dengan perintah ini:
openssl rsa -in rsa_private_key.pem -out rsa_public_key.pem -pubout
- Konversi private key ke format PKCS#8 untuk meningkatkan kompatibilitas:
openssl pkcs8 -topk8 -in rsa_private_key.pem -out pkcs8_rsa_private_key.pem -nocrypt
Setelah merchant berhasil memperoleh public key, langkah selanjutnya adalah membagikan key tersebut ke PakaiLink untuk melanjutkan proses pembuatan signature.
Pembuatan Signature
- Siapkan data yang diperlukan untuk menghasilkan signature digital. No Data Keterangan Contoh 1 X-CLIENT-KEY Identifier unik untuk mitra, yang dikenal sebagai clientId, dihasilkan secara otomatis oleh PakaiLink untuk memastikan setiap mitra memiliki identitas yang unik dan ter verifikasi. ac517edf8c7ca47b9b3a334dd8bacb59 2 X-TIMESTAMP Tanggal dan waktu transaksi harus mengikuti format YYYY-MM-DDTHH:mm:ss+07:00, dengan waktu yang disesuaikan dengan GMT+7 (Waktu Jakarta), untuk memastikan kesesuaian dengan zona waktu lokal. 2025-01-30T12:38:12+07:00
- Gabungkan nilai X-CLIENT-KEY dan X-TIMESTAMP menggunakan tanda pipe (|) untuk membentuk string yang siap untuk proses sign. Berikut contoh formatnya:
ac517edf8c7ca47b9b3a334dd8bacb59|2025-01-30T12:38:12+07:00
- String signature dibuat dengan mengenkripsi string yang telah disusun menggunakan algoritma SHA-256 dengan enkripsi RSA-2048 menggunakan private key dalam format PKCS#8 atau PKCS#1, lalu encode hasil enkripsi tersebut ke dalam format Base64 untuk menghasilkan signature yang dapat digunakan dalam proses verifikasi.
IzAqHsx6ygZV6sWW6ng9QtfHOsrNaxUo3brQz+1oZ26RJp6NGOTmPyipKvs2whoTURh9ZMx8ao6rUYRdsbN16rGuLqxbzD70IcWYIbitXbgVCRt5Dx0BogynF2pZBcS+BJNhdgRqlSJQXjI3YhuSzbmEE1O1wYycWDqSksP1VwGLIhj87Xl837GTqK8AT7dP/Bq4/pjGFfpl60BrKtkw58waHMY/S4leUbo+XWT92SzCtjjJmb9rwTDlSJbUPHjJCarQC+02+A7dnTedo0/ckSPrpqzOmRwlXPhAZF+E+Edj0TPXlvYkuLBc+Svag3PUMWy7+GAYRoupfC6mKydfgA==
- Letakkan string signature hasil encode ke dalam header HTTP X-SIGNATURE, seperti contoh berikut:
Format:X-SIGNATURE: <Base64_Encoded_Signature>
Contoh:X-SIGNATURE: IzAqHsx6ygZV6sWW6ng9QtfHOsrNaxUo3brQz+1oZ26RJp6NGOTmPyipKvs2whoTURh9ZMx8ao6rUYRdsbN16rGuLqxbzD70IcWYIbitXbgVCRt5Dx0BogynF2pZBcS+BJNhdgRqlSJQXjI3YhuSzbmEE1O1wYycWDqSksP1VwGLIhj87Xl837GTqK8AT7dP/Bq4/pjGFfpl60BrKtkw58waHMY/S4leUbo+XWT92SzCtjjJmb9rwTDlSJbUPHjJCarQC+02+A7dnTedo0/ckSPrpqzOmRwlXPhAZF+E+Edj0TPXlvYkuLBc+Svag3PUMWy7+GAYRoupfC6mKydfgA==
Symmetric Signature
Symmetric Signature digunakan untuk melakukan verifikasi permintaan layanan SNAP Anda. Signature ini dihasilkan menggunakan client secret dengan algoritma SHA-512 HMAC, kemudian encode hasilnya dalam format Base64 untuk memastikan keamanan dan integritas data.
Pembuatan Signature
- Siapkan data yang diperlukan untuk membuat signature.
- Minify request body
HTTP body before minify:{
"partnerServiceId": " 12334",
"customerNo" : "318574181222",
"virtualAccountName" : "Setya Wardana",
"trxId": "2MkdEnmf434udFGuk1hE9sFL49Myv2q4xTQP",
"virtualAccountTrxType": "C",
"totalAmount": {
"value": "10000.00",
"currency": "IDR"
},
"additionalInfo": {
"callbackUrl": "http://partner-domain/callback",
"bankCode": "008"
}
}
HTTP body after minify:{"partnerServiceId":"12334","customerNo":"318574181222","virtualAccountName":"SetyaWardana","trxId":"2MkdEnmf434udFGuk1hE9sFL49Myv2q4xTQP","virtualAccountTrxType":"C","totalAmount":{"value":"10000.00","currency":"IDR"},"additionalInfo":{"callbackUrl":"http://127.0.0.1:10007/callback/partner","bankCode":"008"}}
- Lowercase(HexEncode(SHA-256(RequestBody))).
Mengubah request body menjadi hash menggunakan SHA-256, kemudian konversi hasil hash tersebut ke dalam format Hexadecimal, dan terakhir mengubah seluruh hasilnya menjadi huruf kecil.080fd80881349db059d87cc2a93af2ec9c00c74dac5e97faca0b544732c8de18
- Compose string untuk proses sign.
Membuat sebuah string gabungan yang akan digunakan untuk menghasilkan signature digital. String ini biasanya terdiri dari beberapa elemen penting, yaitu sebagai berikut:<HTTP METHOD> + ":" + <RELATIVE PATH URL> + ":" + <ACCESS TOKEN B2B> + ":" + LowerCase(HexEncode(SHA-256(Minify(<HTTP BODY>)))) + ":" + <X-TIMESTAMP>
Contoh:POST:/snap/v1.0/transfer-va/create-va:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJpc3MiOiJQQUtBSUxJTksiLCJqdGkiOiIyNDc0NzdlNjk0ZGM3N2FhZDU5YzA4MjA1NzdmZmViNyIsImV4cCI6MTE3NDAyOTc2NzgsImFzIjoicGFydG5lciIsImlkIjoiUFRSMDAwMDAwMyJ9.XmUxHExWILJCHJG74Af8TPJljX2aOmUz4UwJXumxkqxW9uDsIrSX_M_j0uRzPOmaBkk2_rQiHIo_OX_qxv45Mg:080fd80881349db059d87cc2a93af2ec9c00c74dac5e97faca0b544732c8de18:2025-01-30T12:38:12+07:00
- Enkripsi String signature dari proses sebelumnya ke SHA-512 HMAC menggunakan Client Secret, kemudian ubah menjadi format Base64. Berikut contoh nilai yang dihasilkan:
HFplT7auM0pHh9tOBl8gTpsQ4kDERjgi6SNAG+WEyA+ThpuquMknqV8EpLMS0lzi9DVOrseXjqdh+fl5XLN39A==
- Tempatkan string signature pada header HTTP dengan nama “X-SIGNATURE” untuk memastikan keamanan dan validitas permintaan.
X-SIGNATURE:
HFplT7auM0pHh9tOBl8gTpsQ4kDERjgi6SNAG+WEyA+ThpuquMknqV8EpLMS0lzi9DVOrseXjqdh+fl5XLN39A==
Validasi Callback Signature
- Ambil signature dari header HTTP “X-SIGNATURE” yang dikirim oleh pengirim API untuk melakukan verifikasi keasliannya.
X-Signature : gRDHLuQpscNyNV5JShXmaOkJHIJp8JrpYtLz4PzBAvuQZ0Yug5Ho0ze8pBlhP7r8tqepWAd68qyVc8aGLIkGhOofLKmWK38TJ2VVTkZC30W5SIxlVMCXHdEMdtvDtqtpOuyGK0owNlM3+de8ljzwisQ6aPX1SYrvA9QtNmGy1O+A3SP12r2GWhqcxhaL1T6g2X420L3alelJFTiBgeatM+1o/Fn0MLt9DxQa3c4ezxJpJAxVsJ3HdTP7PQcSajEoLTm3BIRajIhUP3dxgQKEXpDPXGwLFgEVJwW4EGJe39XuVJyiMxhUpB8kxinx76CNstDBw1Cawqm1iqAAHZH8Hg==
- Susun string yang akan digunakan untuk melakukan verifikasi.
<HTTP METHOD> + ":" + <PATH URL CALLBACK> + ":" + LowerCase(HexEncode(SHA-256(Minify(<HTTP BODY>)))) + ":" + <X-TIMESTAMP>
Contoh:POST:http://localhost:10007/callback/partner:50b238af7511827d11bab19c61207aaf52511f369188f08cc8e821da1ba78a0b:2025-03-06T13:10:14+07:00
- Verifikasi keaslian signature menggunakan enkripsi SHA-256 dengan RSA-2048. Bandingkan string tersebut dengan public key yang diberikan oleh pengirim API.
- Jika verifikasi berhasil, Anda dapat melanjutkan proses request.