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
(PureBasic) 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.
IncludeFile "CkJsonObject.pb" IncludeFile "CkDateTime.pb" IncludeFile "CkPrng.pb" IncludeFile "CkCrypt2.pb" IncludeFile "CkStringBuilder.pb" IncludeFile "CkHttpResponse.pb" IncludeFile "CkHttp.pb" Procedure ChilkatExample() ; This example requires the Chilkat API to have been previously unlocked. ; See Global Unlock Sample for sample code. crypt.i = CkCrypt2::ckCreate() If crypt.i = 0 Debug "Failed to create object." ProcedureReturn EndIf prng.i = CkPrng::ckCreate() If prng.i = 0 Debug "Failed to create object." ProcedureReturn EndIf success.i ; An API key such as y6pWAJNyJyjGv66IsVuWnklkKUPFbb0a apiKey.s = "my_api_key" ; An API secret such as 86fbae7030253af3cd15faef2a1f4b67353e41fb6799f576b5093ae52901e6f7 apiSecret.s = "my_api_secret" ; A token such as fdoa-a480ce8951daa73262734cf102641994c1e55e7cdf4c02b6 token.s = "my_merchant_token" ; The nonce is a random number (bytes), something like "6057786719490086000" nonce.s = CkPrng::ckGenRandom(prng,8,"decimal") Debug "nonce = " + nonce dtNow.i = CkDateTime::ckCreate() If dtNow.i = 0 Debug "Failed to create object." ProcedureReturn EndIf CkDateTime::ckSetFromCurrentSystemTime(dtNow) sbTimestamp.i = CkStringBuilder::ckCreate() If sbTimestamp.i = 0 Debug "Failed to create object." ProcedureReturn EndIf ; Get the epoch timestamp in seconds CkStringBuilder::ckAppend(sbTimestamp,CkDateTime::ckGetAsUnixTimeStr(dtNow,0)) ; Change it to milliseconds CkStringBuilder::ckAppend(sbTimestamp,"000") ; The timestamp is a number similar to this: 1546011905000 (which is a timestamp taken on 28-Dec-2018). timestamp.s = CkStringBuilder::ckGetAsString(sbTimestamp) Debug "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" ; } ; } json.i = CkJsonObject::ckCreate() If json.i = 0 Debug "Failed to create object." ProcedureReturn EndIf CkJsonObject::ckUpdateString(json,"merchant_ref","Astonishing-Sale") CkJsonObject::ckUpdateString(json,"transaction_type","authorize") CkJsonObject::ckUpdateString(json,"method","credit_card") CkJsonObject::ckUpdateString(json,"amount","1299") CkJsonObject::ckUpdateString(json,"currency_code","USD") CkJsonObject::ckUpdateString(json,"credit_card.type","visa") CkJsonObject::ckUpdateString(json,"credit_card.cardholder_name","John Smith") CkJsonObject::ckUpdateString(json,"credit_card.card_number","4788250000028291") CkJsonObject::ckUpdateString(json,"credit_card.exp_date","1020") CkJsonObject::ckUpdateString(json,"credit_card.cvv","123") CkJsonObject::setCkEmitCompact(json, 0) Debug CkJsonObject::ckEmit(json) ; string hashData = apiKey + nonce + timestamp + token + jsonString; sbHmacData.i = CkStringBuilder::ckCreate() If sbHmacData.i = 0 Debug "Failed to create object." ProcedureReturn EndIf CkStringBuilder::ckAppend(sbHmacData,apiKey) CkStringBuilder::ckAppend(sbHmacData,nonce) CkStringBuilder::ckAppend(sbHmacData,timestamp) CkStringBuilder::ckAppend(sbHmacData,token) CkStringBuilder::ckAppend(sbHmacData,CkJsonObject::ckEmit(json)) ; HMAC the data to produce a hex string. CkCrypt2::setCkEncodingMode(crypt, "hexlower") CkCrypt2::setCkMacAlgorithm(crypt, "hmac") CkCrypt2::ckSetMacKeyString(crypt,apiSecret) CkCrypt2::setCkHashAlgorithm(crypt, "sha256") CkCrypt2::setCkCharset(crypt, "utf-8") hexHash.s = CkCrypt2::ckMacStringENC(crypt,CkStringBuilder::ckGetAsString(sbHmacData)) Debug "hexHash = " + hexHash ; Now base64 encode the hex string: sbBase64Hash.i = CkStringBuilder::ckCreate() If sbBase64Hash.i = 0 Debug "Failed to create object." ProcedureReturn EndIf CkStringBuilder::ckAppend(sbBase64Hash,hexHash) CkStringBuilder::ckEncode(sbBase64Hash,"base64","utf-8") Debug "This is the Authorization header to be sent with the payeezy request:" Debug "Authorization: " + CkStringBuilder::ckGetAsString(sbBase64Hash) ; ----------------------------------------------------------- ; Now that we have the value for the Authorization header, send the POST containing the JSON. http.i = CkHttp::ckCreate() If http.i = 0 Debug "Failed to create object." ProcedureReturn EndIf CkHttp::setCkAccept(http, "*/*") CkHttp::setCkUserAgent(http, "") CkHttp::ckSetRequestHeader(http,"Authorization",CkStringBuilder::ckGetAsString(sbBase64Hash)) CkHttp::ckSetRequestHeader(http,"apikey",apiKey) CkHttp::ckSetRequestHeader(http,"nonce",nonce) CkHttp::ckSetRequestHeader(http,"timestamp",timestamp) CkHttp::ckSetRequestHeader(http,"token",token) CkHttp::setCkSessionLogFilename(http, "qa_output/payeezy.txt") url.s = "https://api-cert.payeezy.com/v1/transactions" resp.i = CkHttp::ckPostJson2(http,url,"application/json",CkJsonObject::ckEmit(json)) If CkHttp::ckLastMethodSuccess(http) <> 1 Debug CkHttp::ckLastErrorText(http) CkCrypt2::ckDispose(crypt) CkPrng::ckDispose(prng) CkDateTime::ckDispose(dtNow) CkStringBuilder::ckDispose(sbTimestamp) CkJsonObject::ckDispose(json) CkStringBuilder::ckDispose(sbHmacData) CkStringBuilder::ckDispose(sbBase64Hash) CkHttp::ckDispose(http) ProcedureReturn EndIf Debug "response status code = " + Str(CkHttpResponse::ckStatusCode(resp)) CkJsonObject::ckLoad(json,CkHttpResponse::ckBodyStr(resp)) Debug CkJsonObject::ckEmit(json) CkHttpResponse::ckDispose(resp) ; 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" ; } ; Debug CkJsonObject::ckStringOf(json,"correlation_id") Debug CkJsonObject::ckStringOf(json,"transaction_status") Debug CkJsonObject::ckStringOf(json,"validation_status") Debug CkJsonObject::ckStringOf(json,"transaction_type") Debug CkJsonObject::ckStringOf(json,"transaction_id") Debug CkJsonObject::ckStringOf(json,"transaction_tag") Debug CkJsonObject::ckStringOf(json,"method") Debug CkJsonObject::ckStringOf(json,"amount") Debug CkJsonObject::ckStringOf(json,"currency") Debug CkJsonObject::ckStringOf(json,"cvv2") Debug CkJsonObject::ckStringOf(json,"token.token_type") Debug CkJsonObject::ckStringOf(json,"token.token_data.value") Debug CkJsonObject::ckStringOf(json,"card.type") Debug CkJsonObject::ckStringOf(json,"card.cardholder_name") Debug CkJsonObject::ckStringOf(json,"card.card_number") Debug CkJsonObject::ckStringOf(json,"card.exp_date") Debug CkJsonObject::ckStringOf(json,"bank_resp_code") Debug CkJsonObject::ckStringOf(json,"bank_message") Debug CkJsonObject::ckStringOf(json,"gateway_resp_code") Debug CkJsonObject::ckStringOf(json,"gateway_message") CkCrypt2::ckDispose(crypt) CkPrng::ckDispose(prng) CkDateTime::ckDispose(dtNow) CkStringBuilder::ckDispose(sbTimestamp) CkJsonObject::ckDispose(json) CkStringBuilder::ckDispose(sbHmacData) CkStringBuilder::ckDispose(sbBase64Hash) CkHttp::ckDispose(http) ProcedureReturn EndProcedure |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.