Signature Symmetric

Signature Symmetric merupakan metode kriptografi yang menggunakan satu kunci rahasia yang sama untuk menandatangani dan memverifikasi data.
  • SHA-512 HMAC digunakan untuk generate signature dengan ClientSecret sebagai kunci.
X-SIGNATURE = base64Encode(HMAC-SHA512 (ClientSecret, StringToSign))
  • StringToSign
StringToSign = HTTPMethod+”:”+RelativeUrl+”:”+ AccessToken+”:”+ Lowercase(HexEncode(SHA-256(MinifyJson(RequestBody))))+”:”+Timestamp

Komponen Signature Symmetric

Komponen Keterangan
HTTP Method
HTTP Method layanan yang digunakan merchant.

Contoh:
POST, GET, PUT, PATCH, DELETE
RelativeUrl
Path API URL layanan yang Anda gunakan.

Contoh:
  • API URL:
    https://sandbox-api.espay.id/api/v1.0/qr/qr-mpm-generate
  • Relative URL:
    /api/v1.0/qr/qr-mpm-generate
AccessToken
Token akses. Pelajari Access Token
ClientID
Client ID, sama seperti X-PARTNER-ID.
API ClientSecret
API ClientSecret
Request Body
Request Body layanan yang Anda gunakan dalam format JSON.
Timestamp
Tanggal dan waktu lokal customer, sama seperti X-TIMESTAMP Header.

Contoh:
yyyy-MM-ddThh:mi:ssTZD

Format:
2023-08-31T07:49:28+07:00

Generate Signature

Berikut ini merupakan langkah-langkah untuk generate signature:

  1. Buat Komponen StringToSign

  • Minify Request Body.
MinifyJson(RequestBody))
Contoh:
Format sebelum diminify
{
    "partnerReferenceNo":"2020102900000000001",
    "accountNo":"1234567890",
    "balanceTypes":[
        "CASH",
        "POINTS"
    ]
}
Format setelah diminify
{"partnerReferenceNo":"2020102900000000001","accountNo":"1234567890","balanceTypes":["CASH","POINTS"]}
  • Enkripsi request body yang telah di minify menggunakan SHA-256
(SHA-256(MinifyJson(RequestBody)))
Contoh:
Format sebelum enkripsi
{"partnerReferenceNo":"2020102900000000001","accountNo":"1234567890","balanceTypes":["CASH","POINTS"]}
Format setelah enkripsi
8d66a1280a905fa123d97b111c79ffcc91fefa2d40199e1fefeeaa88781731a5
  • Ubah request body yang telah di enkripsi SHA-256 menjadi HexEncode dan Lowercase
Penggunaan HexEncode bersifat opsional. Anda menggunakan SHA-256 jika return SHA-256 merupakan binary stream.
Menggunakan HexEncode
Lowercase(HexEncode(SHA-256(MinifyJson(RequestBody))))
Tidak menggunakan HexEncode
Lowercase((SHA-256(MinifyJson(RequestBody))))
Contoh:
Format sebelum HexEncode dan Lowercase
8d66a1280a905fa123d97b111c79ffcc91fefa2d40199e1fefeeaa88781731a5
Format setelah Lowercase (tidak menggunakan HexEncode)
8d66a1280a905fa123d97b111c79ffcc91fefa2d40199e1fefeeaa88781731a5

  1. Generate StringToSign

Untuk membuat StringToSign, gabungkan semua komponen menggunakan tanda titik dua “:”.

StringToSign

HTTPMethod+”:”+RelativeUrl+”:”+ AccessToken+”:”+ Lowercase(HexEncode(SHA-256(MinifyJson(RequestBody))))+”:”+Timestamp
Contoh:
Format StringToSign
POST:/api/v1.0/balance-inquiry:123456:8d66a1280a905fa123d97b111c79ffcc91fefa2d40199e1fefeeaa88781731a5:2023-08-31T07:49:28+07:00

  1. Generate X-Signature

X-SIGNATURE = base64Encode(HMAC-SHA512(ClientSecret, StringToSign))
Contoh:
Format X-Signature
X-Signature = base64Encode(POST:/api/v1.0/balance-inquiry:123456:8d66a1280a905fa123d97b111c79ffcc91fefa2d40199e1fefeeaa88781731a5:2023-08-31T07:49:28+07:00)
dPYxGvc5SSS8lETvpqRZ2hdM39fTNN3uhIZS5woAZb79ybGDDNAMeWVG2S7cp0USwx9TGcXN/0kzYGobeyzpdg==

PHP - Generate Signature

$stringToSign = $http_method.’:’.$endpoint_url.’:’.$access_token.’:’.strtolower((hash(‘sha256’, json_encode(json_decode($_POST[‘bodyRequest’]),JSON_UNESCAPED_SLASHES)))).’:’.$timestamp; openssl_sign($stringToSign, $signature, $privKey, ‘sha256WithRSAEncryption’);

Try It! (singature auth)

Anda bisa coba masukkan data sesuai dengan input yang telah disediakan. Setelah itu Anda submit dan lihat hasilnya!

Request

Value

Response

Try It! (validate singature auth)

Anda bisa coba masukkan data sesuai dengan input yang telah disediakan. Setelah itu Anda submit dan lihat hasilnya!

Request

Value

Response

Try It! (symmetric)

Anda bisa coba masukkan data sesuai dengan input yang telah disediakan. Setelah itu Anda submit dan lihat hasilnya!

Request

Value

Response

Try It! (validate symmetric)

Anda bisa coba masukkan data sesuai dengan input yang telah disediakan. Setelah itu Anda submit dan lihat hasilnya!

Request

Value

Response



PHP - Generate Signature

$stringToSign = $http_method.':'.$endpoint_url.':'.$access_token.':'.strtolower((hash('sha256', json_encode(json_decode($_POST['bodyRequest']),JSON_UNESCAPED_SLASHES)))).':'.$timestamp;

openssl_sign($stringToSign, $signature, $privKey, 'sha256WithRSAEncryption');      
            



Scroll to Top