Dokumentasi API

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

  1. Gunakan perintah berikut untuk menghasilkan private key RSA: openssl genrsa -out rsa_private_key.pem 2048
  2. Setelah private key dibuat, ekstrak public key dengan perintah ini: openssl rsa -in rsa_private_key.pem -out rsa_public_key.pem -pubout
  3. 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

  1. 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  
  2. 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  
  3. 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==  
  4. 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

  1. Siapkan data yang diperlukan untuk membuat signature.
  2. 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"}}
  3. 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
  4. 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
  5. 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==
  6. 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

  1. Ambil signature dari header HTTP “X-SIGNATURE” yang dikirim oleh pengirim API untuk melakukan verifikasi keasliannya.
    X-Signature : gRDHLuQpscNyNV5JShXmaOkJHIJp8JrpYtLz4PzBAvuQZ0Yug5Ho0ze8pBlhP7r8tqepWAd68qyVc8aGLIkGhOofLKmWK38TJ2VVTkZC30W5SIxlVMCXHdEMdtvDtqtpOuyGK0owNlM3+de8ljzwisQ6aPX1SYrvA9QtNmGy1O+A3SP12r2GWhqcxhaL1T6g2X420L3alelJFTiBgeatM+1o/Fn0MLt9DxQa3c4ezxJpJAxVsJ3HdTP7PQcSajEoLTm3BIRajIhUP3dxgQKEXpDPXGwLFgEVJwW4EGJe39XuVJyiMxhUpB8kxinx76CNstDBw1Cawqm1iqAAHZH8Hg==
  2. 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
  3. Verifikasi keaslian signature menggunakan enkripsi SHA-256 dengan RSA-2048. Bandingkan string tersebut dengan public key yang diberikan oleh pengirim API.
  4. Jika verifikasi berhasil, Anda dapat melanjutkan proses request.