require 'openssl'
require 'base64'
require 'digest'
def generateDigest(jsonBody)
return Base64.encode64(Digest::SHA256.digest(jsonBody)).strip()
end
def generateSignature(clientId, requestId, requestTimestamp, requestTarget, digest, secret)
puts "----- Component Signature -----"
componentSignature = ("Client-Id:" + clientId")
componentSignature.concat("\n")
componentSignature.concat("Request-Id:" + requestId)
componentSignature.concat("\n")
componentSignature.concat("Request-Timestamp:" + requestTimestamp)
componentSignature.concat("\n")
componentSignature.concat("Request-Target:" + requestTarget)
unless digest.to_s.strip.empty?
componentSignature.concat("\n")
componentSignature.concat("Digest:" + digest)
end
puts componentSignature
puts "\n"
hash = OpenSSL::HMAC.digest("sha256", secret, componentSignature)
signature = Base64.encode64(hash).strip()
return "HMACSHA256="+signature
end
puts "----- Digest -----"
jsonBody = '{\"order\":{\"invoice_number\":\"INV-20210124-0001\",\"amount\":150000},\"virtual_account_info\":{\"expired_time\":60,\"reusable_status\":false,\"info1\":\"Merchant Demo Store\"},\"customer\":{\"name\":\"Taufik Ismail\",\"email\":\"taufik@example.com\"}}'
digest = generateDigest(jsonBody)
puts digest
puts "\n"
headerSignature = generateSignature(
"yourClientId",
"yourRequestId",
"2020-10-21T03:38:28Z",
"/request-target/goes-here",
digest,
"secret-key-from-jokul-back-office")
puts "----- Header Signature -----"
puts headerSignature