Sample code for 30+ languages & platforms
AutoIt

Global Payments Card Authorization

See more Global Payments Examples

Demonstrates how to send a card payments authorization request.

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.

$oHttp = ObjCreate("Chilkat.Http")

;  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
Local $sTestUrl = "https://test.realexpayments.com/epage-remote.cgi"
Local $sClientID = "realexsandbox"
Local $sharedSecret = "Po8lRRT67a"

Local $sAmount = "1001"
Local $sCurrency = "EUR"
Local $sCardNumber = "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
$oDt = ObjCreate("Chilkat.CkDateTime")
$oDt.SetFromCurrentSystemTime()
Local $sDtStr = $oDt.GetAsIso8601("YYYYMMDDhhmmss",True)

;  Generate a unique order ID
$oPrng = ObjCreate("Chilkat.Prng")
Local $sOrderId = $oPrng.GenRandom(32,"base64url")

;  Compute the sha1hash
$oCrypt = ObjCreate("Chilkat.Crypt2")
$oCrypt.HashAlgorithm = "sha1"
$oCrypt.EncodingMode = "hexlower"

$oSbA = ObjCreate("Chilkat.StringBuilder")
$oSbA.Append("timestamp.merchantid.orderid.amount.currency.cardnumber")
Local $iNumReplaced = $oSbA.Replace("timestamp",$sDtStr)
$iNumReplaced = $oSbA.Replace("merchantid",$sClientID)
$iNumReplaced = $oSbA.Replace("orderid",$sOrderId)
$iNumReplaced = $oSbA.Replace("amount",$sAmount)
$iNumReplaced = $oSbA.Replace("currency",$sCurrency)
$iNumReplaced = $oSbA.Replace("cardnumber",$sCardNumber)

Local $sHashA = $oCrypt.HashStringENC($oSbA.GetAsString())

$oSbB = ObjCreate("Chilkat.StringBuilder")
$oSbB.Append($sHashA)
$oSbB.Append(".")
$oSbB.Append($sharedSecret)

Local $sHashB = $oCrypt.HashStringENC($oSbB.GetAsString())

$oXml = ObjCreate("Chilkat.Xml")
$oXml.Tag = "request"
$oXml.AddAttribute("type","auth")
$oXml.AddAttribute("timestamp",$sDtStr)
$oXml.UpdateChildContent "merchantid",$sClientID
$oXml.UpdateChildContent "account","internet"
$oXml.UpdateChildContent "channel","ECOM"
$oXml.UpdateChildContent "orderid",$sOrderId
$oXml.UpdateAttrAt("amount",True,"currency",$sCurrency)
$oXml.UpdateChildContent "amount",$sAmount
$oXml.UpdateChildContent "card|number",$sCardNumber
$oXml.UpdateChildContent "card|expdate","0425"
$oXml.UpdateChildContent "card|chname","James Mason"
$oXml.UpdateChildContent "card|type","VISA"
$oXml.UpdateChildContent "card|cvn|number","123"
$oXml.UpdateChildContent "card|cvn|presind","1"
$oXml.UpdateAttrAt("autosettle",True,"flag","1")
$oXml.UpdateChildContent "sha1hash",$sHashB

$oResp = ObjCreate("Chilkat.HttpResponse")
$bSuccess = $oHttp.HttpStr("POST",$sTestUrl,$oXml.GetXml(),"utf-8","application/xml",$oResp)
If ($bSuccess = False) Then
    ConsoleWrite($oHttp.LastErrorText & @CRLF)
    Exit
EndIf

ConsoleWrite("Response Status Code: " & $oResp.StatusCode & @CRLF)

ConsoleWrite("Response Body:" & @CRLF)
ConsoleWrite($oResp.BodyStr & @CRLF)

If ($oResp.StatusCode <> 200) Then
    ConsoleWrite("Failed." & @CRLF)
    Exit
EndIf

;  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.
$oXml.LoadXml($oResp.BodyStr)

Local $iResult = $oXml.GetChildIntValue("result")
ConsoleWrite("result = " & $iResult & @CRLF)

;  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 ($iResult = 0) Then
    ConsoleWrite("authcode = " & $oXml.GetChildContent("authcode") & @CRLF)
    ConsoleWrite("Success." & @CRLF)

Else
    ConsoleWrite("Failed." & @CRLF)
EndIf