AutoIt
AutoIt
Payeezy HMAC Computation
See more HTTP Misc Examples
Demonstrates how to calculate the HMAC for a Payeezy REST request.Chilkat AutoIt Downloads
Local $bSuccess = False
; This example requires the Chilkat API to have been previously unlocked.
; See Global Unlock Sample for sample code.
$oCrypt = ObjCreate("Chilkat.Crypt2")
$oPrng = ObjCreate("Chilkat.Prng")
; An API key such as y6pWAJNyJyjGv66IsVuWnklkKUPFbb0a
Local $sApiKey = "my_api_key"
; An API secret such as 86fbae7030253af3cd15faef2a1f4b67353e41fb6799f576b5093ae52901e6f7
Local $sApiSecret = "my_api_secret"
; A token such as fdoa-a480ce8951daa73262734cf102641994c1e55e7cdf4c02b6
Local $sToken = "my_merchant_token"
; The nonce is a random number (bytes), something like "6057786719490086000"
Local $sNonce = $oPrng.GenRandom(8,"decimal")
ConsoleWrite("nonce = " & $sNonce & @CRLF)
$oDtNow = ObjCreate("Chilkat.CkDateTime")
$oDtNow.SetFromCurrentSystemTime()
$oSbTimestamp = ObjCreate("Chilkat.StringBuilder")
; Get the epoch timestamp in seconds
$oSbTimestamp.Append($oDtNow.GetAsUnixTimeStr(False))
; Change it to milliseconds
$oSbTimestamp.Append("000")
; The timestamp is a number similar to this: 1546011905000 (which is a timestamp taken on 28-Dec-2018).
Local $sTimestamp = $oSbTimestamp.GetAsString()
ConsoleWrite("timestamp = " & $sTimestamp & @CRLF)
; Generate the following JSON request body:
; {
; "merchant_ref": "Astonishing-Sale",
; "transaction_type": "authorize",
; "method": "token",
; "amount": "200",
; "currency_code": "USD",
; "token": {
; "token_type": "FDToken",
; "token_data": {
; "type": "visa",
; "value": "2537446225198291",
; "cardholder_name": "JohnSmith",
; "exp_date": "1030",
; "special_payment": "B"
; }
; }
; }
$oJson = ObjCreate("Chilkat.JsonObject")
$oJson.UpdateString("merchant_ref","Astonishing-Sale")
$oJson.UpdateString("transaction_type","authorize")
$oJson.UpdateString("method","token")
$oJson.UpdateString("amount","200")
$oJson.UpdateString("currency_code","USD")
$oJson.UpdateString("token.token_type","FDToken")
$oJson.UpdateString("token.token_data.type","visa")
$oJson.UpdateString("token.token_data.value","2537446225198291")
$oJson.UpdateString("token.token_data.cardholder_name","JohnSmith")
$oJson.UpdateString("token.token_data.exp_date","1030")
$oJson.UpdateString("token.token_data.special_payment","B")
; string hashData = apiKey + nonce + timestamp + token + jsonString;
$oSbHmacData = ObjCreate("Chilkat.StringBuilder")
$oSbHmacData.Append($sApiKey)
$oSbHmacData.Append($sNonce)
$oSbHmacData.Append($sTimestamp)
$oSbHmacData.Append($sToken)
$oSbHmacData.Append($oJson.Emit())
; HMAC the data to produce a hex string.
$oCrypt.EncodingMode = "hexlower"
$oCrypt.MacAlgorithm = "hmac"
$oCrypt.SetMacKeyString($sApiSecret)
$oCrypt.HashAlgorithm = "sha256"
$oCrypt.Charset = "utf-8"
Local $sHexHash = $oCrypt.MacStringENC($oSbHmacData.GetAsString())
; Now base64 encode the hex string:
$oSbBase64Hash = ObjCreate("Chilkat.StringBuilder")
$oSbBase64Hash.Append($sHexHash)
$oSbBase64Hash.Encode("base64","utf-8")
ConsoleWrite("This is the Authorization header to be sent with the payeezy request:" & @CRLF)
ConsoleWrite("Authorization: " & $oSbBase64Hash.GetAsString() & @CRLF)