Perl
Perl
Global Payments Card Authorization
See more Global Payments Examples
Demonstrates how to send a card payments authorization request.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.
$http = chilkat::CkHttp->new();
# if you don't have a Client ID yet you can still quickly test some basic request types using the following URL and credentials:
# Test URL - https://test.realexpayments.com/epage-remote.cgi
# Client ID: realexsandbox
# Shared Secret: Po8lRRT67a
$testUrl = "https://test.realexpayments.com/epage-remote.cgi";
$clientID = "realexsandbox";
$sharedSecret = "Po8lRRT67a";
$amount = "1001";
$currency = "EUR";
$cardNumber = "4263970000005262";
# We'll be sending the following XML in the body of the request:
# <?xml version="1.0" encoding="UTF-8"?>
# <request type="auth" timestamp="20180613141207">
# <merchantid>MerchantId</merchantid>
# <account>internet</account>
# <channel>ECOM</channel>
# <orderid>N6qsk4kYRZihmPrTXWYS6g</orderid>
# <amount currency="EUR">1001</amount>
# <card>
# <number>4263970000005262</number>
# <expdate>0425</expdate>
# <chname>James Mason</chname>
# <type>VISA</type>
# <cvn>
# <number>123</number>
# <presind>1</presind>
# </cvn>
# </card>
# <autosettle flag="1"/>
# <sha1hash>87707637a34ba651b6185718c863abc64b673f20</sha1hash>
# </request>
# Use this online tool to generate code from sample XML:
# Generate Code to Create XML
# Get the current date/time in this format: 20180613141207
$dt = chilkat::CkDateTime->new();
$dt->SetFromCurrentSystemTime();
$dtStr = $dt->getAsIso8601("YYYYMMDDhhmmss",1);
# Generate a unique order ID
$prng = chilkat::CkPrng->new();
$orderId = $prng->genRandom(32,"base64url");
# Compute the sha1hash
$crypt = chilkat::CkCrypt2->new();
$crypt->put_HashAlgorithm("sha1");
$crypt->put_EncodingMode("hexlower");
$sbA = chilkat::CkStringBuilder->new();
$sbA->Append("timestamp.merchantid.orderid.amount.currency.cardnumber");
$numReplaced = $sbA->Replace("timestamp",$dtStr);
$numReplaced = $sbA->Replace("merchantid",$clientID);
$numReplaced = $sbA->Replace("orderid",$orderId);
$numReplaced = $sbA->Replace("amount",$amount);
$numReplaced = $sbA->Replace("currency",$currency);
$numReplaced = $sbA->Replace("cardnumber",$cardNumber);
$hashA = $crypt->hashStringENC($sbA->getAsString());
$sbB = chilkat::CkStringBuilder->new();
$sbB->Append($hashA);
$sbB->Append(".");
$sbB->Append($sharedSecret);
$hashB = $crypt->hashStringENC($sbB->getAsString());
$xml = chilkat::CkXml->new();
$xml->put_Tag("request");
$xml->AddAttribute("type","auth");
$xml->AddAttribute("timestamp",$dtStr);
$xml->UpdateChildContent("merchantid",$clientID);
$xml->UpdateChildContent("account","internet");
$xml->UpdateChildContent("channel","ECOM");
$xml->UpdateChildContent("orderid",$orderId);
$xml->UpdateAttrAt("amount",1,"currency",$currency);
$xml->UpdateChildContent("amount",$amount);
$xml->UpdateChildContent("card|number",$cardNumber);
$xml->UpdateChildContent("card|expdate","0425");
$xml->UpdateChildContent("card|chname","James Mason");
$xml->UpdateChildContent("card|type","VISA");
$xml->UpdateChildContent("card|cvn|number","123");
$xml->UpdateChildContent("card|cvn|presind","1");
$xml->UpdateAttrAt("autosettle",1,"flag","1");
$xml->UpdateChildContent("sha1hash",$hashB);
$resp = chilkat::CkHttpResponse->new();
$success = $http->HttpStr("POST",$testUrl,$xml->getXml(),"utf-8","application/xml",$resp);
if ($success == 0) {
print $http->lastErrorText() . "\r\n";
exit;
}
print "Response Status Code: " . $resp->get_StatusCode() . "\r\n";
print "Response Body:" . "\r\n";
print $resp->bodyStr() . "\r\n";
if ($resp->get_StatusCode() != 200) {
print "Failed." . "\r\n";
exit;
}
# A status code of 200 indicates we received an XML response, but it could be an error message.
# Here's an example of an error response:
# <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
# <response timestamp="20200418142356">
# <orderid>N6qsk4kYRZihmPrTXWYS6g</orderid>
# <result>508</result>
# <message>Invalid timestamp: '{' Value exceeds allowable limit: '}'</message>
# </response>
# We need to check the "result" within the XML.
$xml->LoadXml($resp->bodyStr());
$result = $xml->GetChildIntValue("result");
print "result = " . $result . "\r\n";
# A successful result looks like this:
# <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
# <response timestamp="20200418145519">
# <merchantid>realexsandbox</merchantid>
# <account>internet</account>
# <orderid>Cw93I1nFWVZuaATh46qMUCBlCcfrOvLo65C2cq5X-AY</orderid>
# <result>00</result>
# <authcode>L3pHww</authcode>
# <message>AUTH CODE: L3pHww</message>
# <pasref>96838535689610806</pasref>
# <cvnresult>M</cvnresult>
# <timetaken>87</timetaken>
# <authtimetaken>67</authtimetaken>
# <batchid>6322506</batchid>
# <sha1hash>2fd2f15f97f1775779fe9bda536dc8317a4b39f6</sha1hash>
# </response>
if ($result == 0) {
print "authcode = " . $xml->getChildContent("authcode") . "\r\n";
print "Success." . "\r\n";
}
else {
print "Failed." . "\r\n";
}