Sample code for 30+ languages & platforms
Xbase++

Payeezy HMAC Computation

See more HTTP Misc Examples

Demonstrates how to calculate the HMAC for a Payeezy REST request.

Chilkat Xbase++ Downloads

Xbase++
LOCAL nSuccess
LOCAL oCrypt
LOCAL oPrng
LOCAL cApiKey
LOCAL cApiSecret
LOCAL cToken
LOCAL cNonce
LOCAL oDtNow
LOCAL oSbTimestamp
LOCAL cTimestamp
LOCAL oJson
LOCAL oSbHmacData
LOCAL cHexHash
LOCAL oSbBase64Hash

nSuccess := 0

//  This example requires the Chilkat API to have been previously unlocked.
//  See Global Unlock Sample for sample code.

oCrypt := CreateObject("Chilkat.Crypt2")
oPrng := CreateObject("Chilkat.Prng")

//  An API key such as y6pWAJNyJyjGv66IsVuWnklkKUPFbb0a
cApiKey := "my_api_key"
//  An API secret such as 86fbae7030253af3cd15faef2a1f4b67353e41fb6799f576b5093ae52901e6f7
cApiSecret := "my_api_secret"
//  A token such as fdoa-a480ce8951daa73262734cf102641994c1e55e7cdf4c02b6
cToken := "my_merchant_token"

//  The nonce is a random number (bytes), something like "6057786719490086000"
cNonce := oPrng:GenRandom(8, "decimal")
? "nonce = " + cNonce

oDtNow := CreateObject("Chilkat.CkDateTime")
oDtNow:SetFromCurrentSystemTime()
oSbTimestamp := CreateObject("Chilkat.StringBuilder")
//  Get the epoch timestamp in seconds
oSbTimestamp:Append(oDtNow:GetAsUnixTimeStr(0))
//  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).
cTimestamp := oSbTimestamp:GetAsString()
? "timestamp = " + cTimestamp

//  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 := CreateObject("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 := CreateObject("Chilkat.StringBuilder")
oSbHmacData:Append(cApiKey)
oSbHmacData:Append(cNonce)
oSbHmacData:Append(cTimestamp)
oSbHmacData:Append(cToken)
oSbHmacData:Append(oJson:Emit())

//  HMAC the data to produce a hex string.
oCrypt:EncodingMode := "hexlower"
oCrypt:MacAlgorithm := "hmac"
oCrypt:SetMacKeyString(cApiSecret)
oCrypt:HashAlgorithm := "sha256"
oCrypt:Charset := "utf-8"
cHexHash := oCrypt:MacStringENC(oSbHmacData:GetAsString())

//  Now base64 encode the hex string:
oSbBase64Hash := CreateObject("Chilkat.StringBuilder")
oSbBase64Hash:Append(cHexHash)
oSbBase64Hash:Encode("base64", "utf-8")

? "This is the Authorization header to be sent with the payeezy request:"
? "Authorization: " + oSbBase64Hash:GetAsString()

oCrypt:destroy()
oPrng:destroy()
oDtNow:destroy()
oSbTimestamp:destroy()
oJson:destroy()
oSbHmacData:destroy()
oSbBase64Hash:destroy()