Perl
Perl
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 Perl Downloads
use chilkat();
$success = 0;
# This example requires the Chilkat API to have been previously unlocked.
# See Global Unlock Sample for sample code.
$crypt = chilkat::CkCrypt2->new();
$prng = chilkat::CkPrng->new();
# An API key such as y6pWAJNyJyjGv66IsVuWnklkKUPFbb0a
$apiKey = "my_api_key";
# An API secret such as 86fbae7030253af3cd15faef2a1f4b67353e41fb6799f576b5093ae52901e6f7
$apiSecret = "my_api_secret";
# A token such as fdoa-a480ce8951daa73262734cf102641994c1e55e7cdf4c02b6
$token = "my_merchant_token";
# The nonce is a random number (bytes), something like "6057786719490086000"
$nonce = $prng->genRandom(8,"decimal");
print "nonce = " . $nonce . "\r\n";
$dtNow = chilkat::CkDateTime->new();
$dtNow->SetFromCurrentSystemTime();
$sbTimestamp = chilkat::CkStringBuilder->new();
# Get the epoch timestamp in seconds
$sbTimestamp->Append($dtNow->getAsUnixTimeStr(0));
# Change it to milliseconds
$sbTimestamp->Append("000");
# The timestamp is a number similar to this: 1546011905000 (which is a timestamp taken on 28-Dec-2018).
$timestamp = $sbTimestamp->getAsString();
print "timestamp = " . $timestamp . "\r\n";
# 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"
# }
# }
$json = chilkat::CkJsonObject->new();
$json->UpdateString("merchant_ref","Astonishing-Sale");
$json->UpdateString("transaction_type","authorize");
$json->UpdateString("method","credit_card");
$json->UpdateString("amount","1299");
$json->UpdateString("currency_code","USD");
$json->UpdateString("credit_card.type","visa");
$json->UpdateString("credit_card.cardholder_name","John Smith");
$json->UpdateString("credit_card.card_number","4788250000028291");
$json->UpdateString("credit_card.exp_date","1020");
$json->UpdateString("credit_card.cvv","123");
$json->put_EmitCompact(0);
print $json->emit() . "\r\n";
# string hashData = apiKey + nonce + timestamp + token + jsonString;
$sbHmacData = chilkat::CkStringBuilder->new();
$sbHmacData->Append($apiKey);
$sbHmacData->Append($nonce);
$sbHmacData->Append($timestamp);
$sbHmacData->Append($token);
$sbHmacData->Append($json->emit());
# HMAC the data to produce a hex string.
$crypt->put_EncodingMode("hexlower");
$crypt->put_MacAlgorithm("hmac");
$crypt->SetMacKeyString($apiSecret);
$crypt->put_HashAlgorithm("sha256");
$crypt->put_Charset("utf-8");
$hexHash = $crypt->macStringENC($sbHmacData->getAsString());
print "hexHash = " . $hexHash . "\r\n";
# Now base64 encode the hex string:
$sbBase64Hash = chilkat::CkStringBuilder->new();
$sbBase64Hash->Append($hexHash);
$sbBase64Hash->Encode("base64","utf-8");
print "This is the Authorization header to be sent with the payeezy request:" . "\r\n";
print "Authorization: " . $sbBase64Hash->getAsString() . "\r\n";
# -----------------------------------------------------------
# Now that we have the value for the Authorization header, send the POST containing the JSON.
$http = chilkat::CkHttp->new();
$http->put_Accept("*/*");
$http->put_UserAgent("");
$http->SetRequestHeader("Authorization",$sbBase64Hash->getAsString());
$http->SetRequestHeader("apikey",$apiKey);
$http->SetRequestHeader("nonce",$nonce);
$http->SetRequestHeader("timestamp",$timestamp);
$http->SetRequestHeader("token",$token);
$http->put_SessionLogFilename("qa_output/payeezy.txt");
$url = "https://api-cert.payeezy.com/v1/transactions";
$resp = chilkat::CkHttpResponse->new();
$success = $http->HttpJson("POST",$url,$json,"application/json",$resp);
if ($success == 0) {
print $http->lastErrorText() . "\r\n";
exit;
}
print "response status code = " . $resp->get_StatusCode() . "\r\n";
$json->Load($resp->bodyStr());
print $json->emit() . "\r\n";
# 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"
# }
#
print $json->stringOf("correlation_id") . "\r\n";
print $json->stringOf("transaction_status") . "\r\n";
print $json->stringOf("validation_status") . "\r\n";
print $json->stringOf("transaction_type") . "\r\n";
print $json->stringOf("transaction_id") . "\r\n";
print $json->stringOf("transaction_tag") . "\r\n";
print $json->stringOf("method") . "\r\n";
print $json->stringOf("amount") . "\r\n";
print $json->stringOf("currency") . "\r\n";
print $json->stringOf("cvv2") . "\r\n";
print $json->stringOf("token.token_type") . "\r\n";
print $json->stringOf("token.token_data.value") . "\r\n";
print $json->stringOf("card.type") . "\r\n";
print $json->stringOf("card.cardholder_name") . "\r\n";
print $json->stringOf("card.card_number") . "\r\n";
print $json->stringOf("card.exp_date") . "\r\n";
print $json->stringOf("bank_resp_code") . "\r\n";
print $json->stringOf("bank_message") . "\r\n";
print $json->stringOf("gateway_resp_code") . "\r\n";
print $json->stringOf("gateway_message") . "\r\n";