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