Sample code for 30+ languages & platforms
PowerBuilder

Global Payments Card Authorization

See more Global Payments Examples

Demonstrates how to send a card payments authorization request.

Chilkat PowerBuilder Downloads

PowerBuilder
integer li_rc
integer li_Success
oleobject loo_Http
string ls_TestUrl
string ls_ClientID
string ls_SharedSecret
string ls_Amount
string ls_Currency
string ls_CardNumber
oleobject loo_Dt
string ls_DtStr
oleobject loo_Prng
string ls_OrderId
oleobject loo_Crypt
oleobject loo_SbA
integer li_NumReplaced
string ls_HashA
oleobject loo_SbB
string ls_HashB
oleobject loo_Xml
oleobject loo_Resp
integer li_Result

li_Success = 0

// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.

loo_Http = create oleobject
li_rc = loo_Http.ConnectToNewObject("Chilkat.Http")
if li_rc < 0 then
    destroy loo_Http
    MessageBox("Error","Connecting to COM object failed")
    return
end if

// 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
ls_TestUrl = "https://test.realexpayments.com/epage-remote.cgi"
ls_ClientID = "realexsandbox"
ls_SharedSecret = "Po8lRRT67a"

ls_Amount = "1001"
ls_Currency = "EUR"
ls_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
loo_Dt = create oleobject
li_rc = loo_Dt.ConnectToNewObject("Chilkat.CkDateTime")

loo_Dt.SetFromCurrentSystemTime()
ls_DtStr = loo_Dt.GetAsIso8601("YYYYMMDDhhmmss",1)

// Generate a unique order ID
loo_Prng = create oleobject
li_rc = loo_Prng.ConnectToNewObject("Chilkat.Prng")

ls_OrderId = loo_Prng.GenRandom(32,"base64url")

// Compute the sha1hash
loo_Crypt = create oleobject
li_rc = loo_Crypt.ConnectToNewObject("Chilkat.Crypt2")

loo_Crypt.HashAlgorithm = "sha1"
loo_Crypt.EncodingMode = "hexlower"

loo_SbA = create oleobject
li_rc = loo_SbA.ConnectToNewObject("Chilkat.StringBuilder")

loo_SbA.Append("timestamp.merchantid.orderid.amount.currency.cardnumber")
li_NumReplaced = loo_SbA.Replace("timestamp",ls_DtStr)
li_NumReplaced = loo_SbA.Replace("merchantid",ls_ClientID)
li_NumReplaced = loo_SbA.Replace("orderid",ls_OrderId)
li_NumReplaced = loo_SbA.Replace("amount",ls_Amount)
li_NumReplaced = loo_SbA.Replace("currency",ls_Currency)
li_NumReplaced = loo_SbA.Replace("cardnumber",ls_CardNumber)

ls_HashA = loo_Crypt.HashStringENC(loo_SbA.GetAsString())

loo_SbB = create oleobject
li_rc = loo_SbB.ConnectToNewObject("Chilkat.StringBuilder")

loo_SbB.Append(ls_HashA)
loo_SbB.Append(".")
loo_SbB.Append(ls_SharedSecret)

ls_HashB = loo_Crypt.HashStringENC(loo_SbB.GetAsString())

loo_Xml = create oleobject
li_rc = loo_Xml.ConnectToNewObject("Chilkat.Xml")

loo_Xml.Tag = "request"
loo_Xml.AddAttribute("type","auth")
loo_Xml.AddAttribute("timestamp",ls_DtStr)
loo_Xml.UpdateChildContent("merchantid",ls_ClientID)
loo_Xml.UpdateChildContent("account","internet")
loo_Xml.UpdateChildContent("channel","ECOM")
loo_Xml.UpdateChildContent("orderid",ls_OrderId)
loo_Xml.UpdateAttrAt("amount",1,"currency",ls_Currency)
loo_Xml.UpdateChildContent("amount",ls_Amount)
loo_Xml.UpdateChildContent("card|number",ls_CardNumber)
loo_Xml.UpdateChildContent("card|expdate","0425")
loo_Xml.UpdateChildContent("card|chname","James Mason")
loo_Xml.UpdateChildContent("card|type","VISA")
loo_Xml.UpdateChildContent("card|cvn|number","123")
loo_Xml.UpdateChildContent("card|cvn|presind","1")
loo_Xml.UpdateAttrAt("autosettle",1,"flag","1")
loo_Xml.UpdateChildContent("sha1hash",ls_HashB)

loo_Resp = create oleobject
li_rc = loo_Resp.ConnectToNewObject("Chilkat.HttpResponse")

li_Success = loo_Http.HttpStr("POST",ls_TestUrl,loo_Xml.GetXml(),"utf-8","application/xml",loo_Resp)
if li_Success = 0 then
    Write-Debug loo_Http.LastErrorText
    destroy loo_Http
    destroy loo_Dt
    destroy loo_Prng
    destroy loo_Crypt
    destroy loo_SbA
    destroy loo_SbB
    destroy loo_Xml
    destroy loo_Resp
    return
end if

Write-Debug "Response Status Code: " + string(loo_Resp.StatusCode)

Write-Debug "Response Body:"
Write-Debug loo_Resp.BodyStr

if loo_Resp.StatusCode <> 200 then
    Write-Debug "Failed."
    destroy loo_Http
    destroy loo_Dt
    destroy loo_Prng
    destroy loo_Crypt
    destroy loo_SbA
    destroy loo_SbB
    destroy loo_Xml
    destroy loo_Resp
    return
end if

// 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.
loo_Xml.LoadXml(loo_Resp.BodyStr)

li_Result = loo_Xml.GetChildIntValue("result")
Write-Debug "result = " + string(li_Result)

// 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 li_Result = 0 then
    Write-Debug "authcode = " + loo_Xml.GetChildContent("authcode")
    Write-Debug "Success."

else
    Write-Debug "Failed."
end if



destroy loo_Http
destroy loo_Dt
destroy loo_Prng
destroy loo_Crypt
destroy loo_SbA
destroy loo_SbB
destroy loo_Xml
destroy loo_Resp