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) Payeezy Place Temp Authorization Hold on Buyer’s Credit CardDemonstrates how to place a temporary authorization hold for the desired amount on the buyer’s credit card. You can Capture the authorized amount on completion of service or Void/Refund the transaction as required.
#import <CkoCrypt2.h> #import <CkoPrng.h> #import <NSString.h> #import <CkoDateTime.h> #import <CkoStringBuilder.h> #import <CkoJsonObject.h> #import <CkoHttp.h> #import <CkoHttpResponse.h> // This example requires the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. CkoCrypt2 *crypt = [[CkoCrypt2 alloc] init]; CkoPrng *prng = [[CkoPrng alloc] init]; BOOL success; // An API key such as y6pWAJNyJyjGv66IsVuWnklkKUPFbb0a NSString *apiKey = @"my_api_key"; // An API secret such as 86fbae7030253af3cd15faef2a1f4b67353e41fb6799f576b5093ae52901e6f7 NSString *apiSecret = @"my_api_secret"; // A token such as fdoa-a480ce8951daa73262734cf102641994c1e55e7cdf4c02b6 NSString *token = @"my_merchant_token"; // The nonce is a random number (bytes), something like "6057786719490086000" NSString *nonce = [prng GenRandom: [NSNumber numberWithInt: 8] encoding: @"decimal"]; NSLog(@"%@%@",@"nonce = ",nonce); CkoDateTime *dtNow = [[CkoDateTime alloc] init]; [dtNow SetFromCurrentSystemTime]; CkoStringBuilder *sbTimestamp = [[CkoStringBuilder alloc] init]; // Get the epoch timestamp in seconds [sbTimestamp Append: [dtNow GetAsUnixTimeStr: NO]]; // Change it to milliseconds [sbTimestamp Append: @"000"]; // The timestamp is a number similar to this: 1546011905000 (which is a timestamp taken on 28-Dec-2018). NSString *timestamp = [sbTimestamp GetAsString]; NSLog(@"%@%@",@"timestamp = ",timestamp); // Generate the following JSON request body: // { // "merchant_ref": "Astonishing-Sale", // "transaction_type": "authorize", // "method": "credit_card", // "amount": "1299", // "currency_code": "USD", // "credit_card": { // "type": "visa", // "cardholder_name": "John Smith", // "card_number": "4788250000028291", // "exp_date": "1020", // "cvv": "123" // } // } CkoJsonObject *json = [[CkoJsonObject alloc] init]; [json UpdateString: @"merchant_ref" value: @"Astonishing-Sale"]; [json UpdateString: @"transaction_type" value: @"authorize"]; [json UpdateString: @"method" value: @"credit_card"]; [json UpdateString: @"amount" value: @"1299"]; [json UpdateString: @"currency_code" value: @"USD"]; [json UpdateString: @"credit_card.type" value: @"visa"]; [json UpdateString: @"credit_card.cardholder_name" value: @"John Smith"]; [json UpdateString: @"credit_card.card_number" value: @"4788250000028291"]; [json UpdateString: @"credit_card.exp_date" value: @"1020"]; [json UpdateString: @"credit_card.cvv" value: @"123"]; json.EmitCompact = NO; NSLog(@"%@",[json Emit]); // string hashData = apiKey + nonce + timestamp + token + jsonString; CkoStringBuilder *sbHmacData = [[CkoStringBuilder alloc] init]; [sbHmacData Append: apiKey]; [sbHmacData Append: nonce]; [sbHmacData Append: timestamp]; [sbHmacData Append: token]; [sbHmacData Append: [json Emit]]; // HMAC the data to produce a hex string. crypt.EncodingMode = @"hexlower"; crypt.MacAlgorithm = @"hmac"; [crypt SetMacKeyString: apiSecret]; crypt.HashAlgorithm = @"sha256"; crypt.Charset = @"utf-8"; NSString *hexHash = [crypt MacStringENC: [sbHmacData GetAsString]]; NSLog(@"%@%@",@"hexHash = ",hexHash); // Now base64 encode the hex string: CkoStringBuilder *sbBase64Hash = [[CkoStringBuilder alloc] init]; [sbBase64Hash Append: hexHash]; [sbBase64Hash Encode: @"base64" charset: @"utf-8"]; NSLog(@"%@",@"This is the Authorization header to be sent with the payeezy request:"); NSLog(@"%@%@",@"Authorization: ",[sbBase64Hash GetAsString]); // ----------------------------------------------------------- // Now that we have the value for the Authorization header, send the POST containing the JSON. CkoHttp *http = [[CkoHttp alloc] init]; http.Accept = @"*/*"; http.UserAgent = @""; [http SetRequestHeader: @"Authorization" value: [sbBase64Hash GetAsString]]; [http SetRequestHeader: @"apikey" value: apiKey]; [http SetRequestHeader: @"nonce" value: nonce]; [http SetRequestHeader: @"timestamp" value: timestamp]; [http SetRequestHeader: @"token" value: token]; http.SessionLogFilename = @"qa_output/payeezy.txt"; NSString *url = @"https://api-cert.payeezy.com/v1/transactions"; CkoHttpResponse *resp = [http PostJson2: url contentType: @"application/json" jsonText: [json Emit]]; if (http.LastMethodSuccess != YES) { NSLog(@"%@",http.LastErrorText); return; } NSLog(@"%@%d",@"response status code = ",[resp.StatusCode intValue]); [json Load: resp.BodyStr]; NSLog(@"%@",[json Emit]); // Sample JSON response: // { // "correlation_id": "228.4604632998994", // "transaction_status": "approved", // "validation_status": "success", // "transaction_type": "authorize", // "transaction_id": "ET175628", // "transaction_tag": "2313721985", // "method": "credit_card", // "amount": "1299", // "currency": "USD", // "cvv2": "M", // "token": { // "token_type": "FDToken", // "token_data": { // "value": "9732261336638291" // } // }, // "card": { // "type": "visa", // "cardholder_name": "John Smith", // "card_number": "8291", // "exp_date": "1020" // }, // "bank_resp_code": "100", // "bank_message": "Approved", // "gateway_resp_code": "00", // "gateway_message": "Transaction Normal" // } // NSLog(@"%@",[json StringOf: @"correlation_id"]); NSLog(@"%@",[json StringOf: @"transaction_status"]); NSLog(@"%@",[json StringOf: @"validation_status"]); NSLog(@"%@",[json StringOf: @"transaction_type"]); NSLog(@"%@",[json StringOf: @"transaction_id"]); NSLog(@"%@",[json StringOf: @"transaction_tag"]); NSLog(@"%@",[json StringOf: @"method"]); NSLog(@"%@",[json StringOf: @"amount"]); NSLog(@"%@",[json StringOf: @"currency"]); NSLog(@"%@",[json StringOf: @"cvv2"]); NSLog(@"%@",[json StringOf: @"token.token_type"]); NSLog(@"%@",[json StringOf: @"token.token_data.value"]); NSLog(@"%@",[json StringOf: @"card.type"]); NSLog(@"%@",[json StringOf: @"card.cardholder_name"]); NSLog(@"%@",[json StringOf: @"card.card_number"]); NSLog(@"%@",[json StringOf: @"card.exp_date"]); NSLog(@"%@",[json StringOf: @"bank_resp_code"]); NSLog(@"%@",[json StringOf: @"bank_message"]); NSLog(@"%@",[json StringOf: @"gateway_resp_code"]); NSLog(@"%@",[json StringOf: @"gateway_message"]); |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.