AutoIt
AutoIt
Global Payments Card Authorization
See more Global Payments Examples
Demonstrates how to send a card payments authorization request.Chilkat AutoIt Downloads
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