Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(Objective-C) Global Payments Card AuthorizationDemonstrates how to send a card payments authorization request. For more information, see https://developer.globalpay.com/#!/api/card-payments#api-authorisation
#import <CkoHttp.h> #import <NSString.h> #import <CkoDateTime.h> #import <CkoPrng.h> #import <CkoCrypt2.h> #import <CkoStringBuilder.h> #import <CkoXml.h> #import <CkoHttpResponse.h> // This example requires the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. CkoHttp *http = [[CkoHttp alloc] init]; BOOL success; // 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 NSString *testUrl = @"https://test.realexpayments.com/epage-remote.cgi"; NSString *clientID = @"realexsandbox"; NSString *sharedSecret = @"Po8lRRT67a"; NSString *amount = @"1001"; NSString *currency = @"EUR"; NSString *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 CkoDateTime *dt = [[CkoDateTime alloc] init]; [dt SetFromCurrentSystemTime]; NSString *dtStr = [dt GetAsIso8601: @"YYYYMMDDhhmmss" bLocal: YES]; // Generate a unique order ID CkoPrng *prng = [[CkoPrng alloc] init]; NSString *orderId = [prng GenRandom: [NSNumber numberWithInt: 32] encoding: @"base64url"]; // Compute the sha1hash CkoCrypt2 *crypt = [[CkoCrypt2 alloc] init]; crypt.HashAlgorithm = @"sha1"; crypt.EncodingMode = @"hexlower"; CkoStringBuilder *sbA = [[CkoStringBuilder alloc] init]; [sbA Append: @"timestamp.merchantid.orderid.amount.currency.cardnumber"]; int numReplaced = [[sbA Replace: @"timestamp" replacement: dtStr] intValue]; numReplaced = [[sbA Replace: @"merchantid" replacement: clientID] intValue]; numReplaced = [[sbA Replace: @"orderid" replacement: orderId] intValue]; numReplaced = [[sbA Replace: @"amount" replacement: amount] intValue]; numReplaced = [[sbA Replace: @"currency" replacement: currency] intValue]; numReplaced = [[sbA Replace: @"cardnumber" replacement: cardNumber] intValue]; NSString *hashA = [crypt HashStringENC: [sbA GetAsString]]; CkoStringBuilder *sbB = [[CkoStringBuilder alloc] init]; [sbB Append: hashA]; [sbB Append: @"."]; [sbB Append: sharedSecret]; NSString *hashB = [crypt HashStringENC: [sbB GetAsString]]; CkoXml *xml = [[CkoXml alloc] init]; xml.Tag = @"request"; [xml AddAttribute: @"type" value: @"auth"]; [xml AddAttribute: @"timestamp" value: dtStr]; [xml UpdateChildContent: @"merchantid" value: clientID]; [xml UpdateChildContent: @"account" value: @"internet"]; [xml UpdateChildContent: @"channel" value: @"ECOM"]; [xml UpdateChildContent: @"orderid" value: orderId]; [xml UpdateAttrAt: @"amount" autoCreate: YES attrName: @"currency" attrValue: currency]; [xml UpdateChildContent: @"amount" value: amount]; [xml UpdateChildContent: @"card|number" value: cardNumber]; [xml UpdateChildContent: @"card|expdate" value: @"0425"]; [xml UpdateChildContent: @"card|chname" value: @"James Mason"]; [xml UpdateChildContent: @"card|type" value: @"VISA"]; [xml UpdateChildContent: @"card|cvn|number" value: @"123"]; [xml UpdateChildContent: @"card|cvn|presind" value: @"1"]; [xml UpdateAttrAt: @"autosettle" autoCreate: YES attrName: @"flag" attrValue: @"1"]; [xml UpdateChildContent: @"sha1hash" value: hashB]; CkoHttpResponse *resp = [http PostXml: testUrl xmlDoc: [xml GetXml] charset: @"utf-8"]; if (http.LastMethodSuccess == NO) { NSLog(@"%@",http.LastErrorText); return; } NSLog(@"%@%d",@"Response Status Code: ",[resp.StatusCode intValue]); NSLog(@"%@",@"Response Body:"); NSLog(@"%@",resp.BodyStr); if ([resp.StatusCode intValue] != 200) { NSLog(@"%@",@"Failed."); return; } // 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]; int result = [[xml GetChildIntValue: @"result"] intValue]; NSLog(@"%@%d",@"result = ",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 (result == 0) { NSLog(@"%@%@",@"authcode = ",[xml GetChildContent: @"authcode"]); NSLog(@"%@",@"Success."); } else { NSLog(@"%@",@"Failed."); } |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.