Sample code for 30+ languages & platforms
AutoIt

Payeezy Place Temp Authorization Hold on Buyer’s Credit Card

See more HTTP Misc Examples

Demonstrates how to place a temporary authorization hold for the desired amount on the buyer’s credit card. You can Capture the authorized amount on completion of service or Void/Refund the transaction as required.

Chilkat AutoIt Downloads

AutoIt
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": "credit_card",
;   "amount": "1299",
;   "currency_code": "USD",
;   "credit_card": {
;     "type": "visa",
;     "cardholder_name": "John Smith",
;     "card_number": "4788250000028291",
;     "exp_date": "1020",
;     "cvv": "123"
;   }
; }

$oJson = ObjCreate("Chilkat.JsonObject")
$oJson.UpdateString("merchant_ref","Astonishing-Sale")
$oJson.UpdateString("transaction_type","authorize")
$oJson.UpdateString("method","credit_card")
$oJson.UpdateString("amount","1299")
$oJson.UpdateString("currency_code","USD")
$oJson.UpdateString("credit_card.type","visa")
$oJson.UpdateString("credit_card.cardholder_name","John Smith")
$oJson.UpdateString("credit_card.card_number","4788250000028291")
$oJson.UpdateString("credit_card.exp_date","1020")
$oJson.UpdateString("credit_card.cvv","123")
$oJson.EmitCompact = False
ConsoleWrite($oJson.Emit() & @CRLF)

; 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())
ConsoleWrite("hexHash = " & $sHexHash & @CRLF)

; 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)

; -----------------------------------------------------------
; Now that we have the value for the Authorization header, send the POST containing the JSON.

$oHttp = ObjCreate("Chilkat.Http")

$oHttp.Accept = "*/*"
$oHttp.UserAgent = ""
$oHttp.SetRequestHeader "Authorization",$oSbBase64Hash.GetAsString()
$oHttp.SetRequestHeader "apikey",$sApiKey
$oHttp.SetRequestHeader "nonce",$sNonce
$oHttp.SetRequestHeader "timestamp",$sTimestamp
$oHttp.SetRequestHeader "token",$sToken

$oHttp.SessionLogFilename = "qa_output/payeezy.txt"

Local $sUrl = "https://api-cert.payeezy.com/v1/transactions"
$oResp = ObjCreate("Chilkat.HttpResponse")
$bSuccess = $oHttp.HttpJson("POST",$sUrl,$oJson,"application/json",$oResp)
If ($bSuccess = False) Then
    ConsoleWrite($oHttp.LastErrorText & @CRLF)
    Exit
EndIf

ConsoleWrite("response status code = " & $oResp.StatusCode & @CRLF)
$oJson.Load($oResp.BodyStr)
ConsoleWrite($oJson.Emit() & @CRLF)

; Sample JSON response:

; {
;   "correlation_id": "228.4604632998994",
;   "transaction_status": "approved",
;   "validation_status": "success",
;   "transaction_type": "authorize",
;   "transaction_id": "ET175628",
;   "transaction_tag": "2313721985",
;   "method": "credit_card",
;   "amount": "1299",
;   "currency": "USD",
;   "cvv2": "M",
;   "token": {
;     "token_type": "FDToken",
;     "token_data": {
;       "value": "9732261336638291"
;     }
;   },
;   "card": {
;     "type": "visa",
;     "cardholder_name": "John Smith",
;     "card_number": "8291",
;     "exp_date": "1020"
;   },
;   "bank_resp_code": "100",
;   "bank_message": "Approved",
;   "gateway_resp_code": "00",
;   "gateway_message": "Transaction Normal"
; }
; 

ConsoleWrite($oJson.StringOf("correlation_id") & @CRLF)
ConsoleWrite($oJson.StringOf("transaction_status") & @CRLF)
ConsoleWrite($oJson.StringOf("validation_status") & @CRLF)
ConsoleWrite($oJson.StringOf("transaction_type") & @CRLF)
ConsoleWrite($oJson.StringOf("transaction_id") & @CRLF)
ConsoleWrite($oJson.StringOf("transaction_tag") & @CRLF)
ConsoleWrite($oJson.StringOf("method") & @CRLF)
ConsoleWrite($oJson.StringOf("amount") & @CRLF)
ConsoleWrite($oJson.StringOf("currency") & @CRLF)
ConsoleWrite($oJson.StringOf("cvv2") & @CRLF)
ConsoleWrite($oJson.StringOf("token.token_type") & @CRLF)
ConsoleWrite($oJson.StringOf("token.token_data.value") & @CRLF)
ConsoleWrite($oJson.StringOf("card.type") & @CRLF)
ConsoleWrite($oJson.StringOf("card.cardholder_name") & @CRLF)
ConsoleWrite($oJson.StringOf("card.card_number") & @CRLF)
ConsoleWrite($oJson.StringOf("card.exp_date") & @CRLF)
ConsoleWrite($oJson.StringOf("bank_resp_code") & @CRLF)
ConsoleWrite($oJson.StringOf("bank_message") & @CRLF)
ConsoleWrite($oJson.StringOf("gateway_resp_code") & @CRLF)
ConsoleWrite($oJson.StringOf("gateway_message") & @CRLF)