Tcl
Tcl
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 Tcl Downloads
load ./chilkat.dll
set success 0
# This example requires the Chilkat API to have been previously unlocked.
# See Global Unlock Sample for sample code.
set crypt [new_CkCrypt2]
set prng [new_CkPrng]
# An API key such as y6pWAJNyJyjGv66IsVuWnklkKUPFbb0a
set apiKey "my_api_key"
# An API secret such as 86fbae7030253af3cd15faef2a1f4b67353e41fb6799f576b5093ae52901e6f7
set apiSecret "my_api_secret"
# A token such as fdoa-a480ce8951daa73262734cf102641994c1e55e7cdf4c02b6
set token "my_merchant_token"
# The nonce is a random number (bytes), something like "6057786719490086000"
set nonce [CkPrng_genRandom $prng 8 "decimal"]
puts "nonce = $nonce"
set dtNow [new_CkDateTime]
CkDateTime_SetFromCurrentSystemTime $dtNow
set sbTimestamp [new_CkStringBuilder]
# Get the epoch timestamp in seconds
CkStringBuilder_Append $sbTimestamp [CkDateTime_getAsUnixTimeStr $dtNow 0]
# Change it to milliseconds
CkStringBuilder_Append $sbTimestamp "000"
# The timestamp is a number similar to this: 1546011905000 (which is a timestamp taken on 28-Dec-2018).
set timestamp [CkStringBuilder_getAsString $sbTimestamp]
puts "timestamp = $timestamp"
# 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"
# }
# }
set json [new_CkJsonObject]
CkJsonObject_UpdateString $json "merchant_ref" "Astonishing-Sale"
CkJsonObject_UpdateString $json "transaction_type" "authorize"
CkJsonObject_UpdateString $json "method" "credit_card"
CkJsonObject_UpdateString $json "amount" "1299"
CkJsonObject_UpdateString $json "currency_code" "USD"
CkJsonObject_UpdateString $json "credit_card.type" "visa"
CkJsonObject_UpdateString $json "credit_card.cardholder_name" "John Smith"
CkJsonObject_UpdateString $json "credit_card.card_number" "4788250000028291"
CkJsonObject_UpdateString $json "credit_card.exp_date" "1020"
CkJsonObject_UpdateString $json "credit_card.cvv" "123"
CkJsonObject_put_EmitCompact $json 0
puts [CkJsonObject_emit $json]
# string hashData = apiKey + nonce + timestamp + token + jsonString;
set sbHmacData [new_CkStringBuilder]
CkStringBuilder_Append $sbHmacData $apiKey
CkStringBuilder_Append $sbHmacData $nonce
CkStringBuilder_Append $sbHmacData $timestamp
CkStringBuilder_Append $sbHmacData $token
CkStringBuilder_Append $sbHmacData [CkJsonObject_emit $json]
# HMAC the data to produce a hex string.
CkCrypt2_put_EncodingMode $crypt "hexlower"
CkCrypt2_put_MacAlgorithm $crypt "hmac"
CkCrypt2_SetMacKeyString $crypt $apiSecret
CkCrypt2_put_HashAlgorithm $crypt "sha256"
CkCrypt2_put_Charset $crypt "utf-8"
set hexHash [CkCrypt2_macStringENC $crypt [CkStringBuilder_getAsString $sbHmacData]]
puts "hexHash = $hexHash"
# Now base64 encode the hex string:
set sbBase64Hash [new_CkStringBuilder]
CkStringBuilder_Append $sbBase64Hash $hexHash
CkStringBuilder_Encode $sbBase64Hash "base64" "utf-8"
puts "This is the Authorization header to be sent with the payeezy request:"
puts "Authorization: [CkStringBuilder_getAsString $sbBase64Hash]"
# -----------------------------------------------------------
# Now that we have the value for the Authorization header, send the POST containing the JSON.
set http [new_CkHttp]
CkHttp_put_Accept $http "*/*"
CkHttp_put_UserAgent $http ""
CkHttp_SetRequestHeader $http "Authorization" [CkStringBuilder_getAsString $sbBase64Hash]
CkHttp_SetRequestHeader $http "apikey" $apiKey
CkHttp_SetRequestHeader $http "nonce" $nonce
CkHttp_SetRequestHeader $http "timestamp" $timestamp
CkHttp_SetRequestHeader $http "token" $token
CkHttp_put_SessionLogFilename $http "qa_output/payeezy.txt"
set url "https://api-cert.payeezy.com/v1/transactions"
set resp [new_CkHttpResponse]
set success [CkHttp_HttpJson $http "POST" $url $json "application/json" $resp]
if {$success == 0} then {
puts [CkHttp_lastErrorText $http]
delete_CkCrypt2 $crypt
delete_CkPrng $prng
delete_CkDateTime $dtNow
delete_CkStringBuilder $sbTimestamp
delete_CkJsonObject $json
delete_CkStringBuilder $sbHmacData
delete_CkStringBuilder $sbBase64Hash
delete_CkHttp $http
delete_CkHttpResponse $resp
exit
}
puts "response status code = [CkHttpResponse_get_StatusCode $resp]"
CkJsonObject_Load $json [CkHttpResponse_bodyStr $resp]
puts [CkJsonObject_emit $json]
# 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"
# }
#
puts [CkJsonObject_stringOf $json correlation_id]
puts [CkJsonObject_stringOf $json transaction_status]
puts [CkJsonObject_stringOf $json validation_status]
puts [CkJsonObject_stringOf $json transaction_type]
puts [CkJsonObject_stringOf $json transaction_id]
puts [CkJsonObject_stringOf $json transaction_tag]
puts [CkJsonObject_stringOf $json method]
puts [CkJsonObject_stringOf $json amount]
puts [CkJsonObject_stringOf $json currency]
puts [CkJsonObject_stringOf $json cvv2]
puts [CkJsonObject_stringOf $json token.token_type]
puts [CkJsonObject_stringOf $json token.token_data.value]
puts [CkJsonObject_stringOf $json card.type]
puts [CkJsonObject_stringOf $json card.cardholder_name]
puts [CkJsonObject_stringOf $json card.card_number]
puts [CkJsonObject_stringOf $json card.exp_date]
puts [CkJsonObject_stringOf $json bank_resp_code]
puts [CkJsonObject_stringOf $json bank_message]
puts [CkJsonObject_stringOf $json gateway_resp_code]
puts [CkJsonObject_stringOf $json gateway_message]
delete_CkCrypt2 $crypt
delete_CkPrng $prng
delete_CkDateTime $dtNow
delete_CkStringBuilder $sbTimestamp
delete_CkJsonObject $json
delete_CkStringBuilder $sbHmacData
delete_CkStringBuilder $sbBase64Hash
delete_CkHttp $http
delete_CkHttpResponse $resp