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
(Tcl) Payeezy HMAC ComputationDemonstrates how to calculate the HMAC for a Payeezy REST request.
load ./chilkat.dll # This example requires the Chilkat API to have been previously unlocked. # See Global Unlock Sample for sample code. set crypt [new_CkCrypt2] set prng [new_CkPrng] # An API key such as y6pWAJNyJyjGv66IsVuWnklkKUPFbb0a set apiKey "my_api_key" # An API secret such as 86fbae7030253af3cd15faef2a1f4b67353e41fb6799f576b5093ae52901e6f7 set apiSecret "my_api_secret" # A token such as fdoa-a480ce8951daa73262734cf102641994c1e55e7cdf4c02b6 set token "my_merchant_token" # The nonce is a random number (bytes), something like "6057786719490086000" set nonce [CkPrng_genRandom $prng 8 "decimal"] puts "nonce = $nonce" set dtNow [new_CkDateTime] CkDateTime_SetFromCurrentSystemTime $dtNow set sbTimestamp [new_CkStringBuilder] # Get the epoch timestamp in seconds CkStringBuilder_Append $sbTimestamp [CkDateTime_getAsUnixTimeStr $dtNow 0] # Change it to milliseconds CkStringBuilder_Append $sbTimestamp "000" # The timestamp is a number similar to this: 1546011905000 (which is a timestamp taken on 28-Dec-2018). set timestamp [CkStringBuilder_getAsString $sbTimestamp] puts "timestamp = $timestamp" # Generate the following JSON request body: # { # "merchant_ref": "Astonishing-Sale", # "transaction_type": "authorize", # "method": "token", # "amount": "200", # "currency_code": "USD", # "token": { # "token_type": "FDToken", # "token_data": { # "type": "visa", # "value": "2537446225198291", # "cardholder_name": "JohnSmith", # "exp_date": "1030", # "special_payment": "B" # } # } # } set json [new_CkJsonObject] CkJsonObject_UpdateString $json "merchant_ref" "Astonishing-Sale" CkJsonObject_UpdateString $json "transaction_type" "authorize" CkJsonObject_UpdateString $json "method" "token" CkJsonObject_UpdateString $json "amount" "200" CkJsonObject_UpdateString $json "currency_code" "USD" CkJsonObject_UpdateString $json "token.token_type" "FDToken" CkJsonObject_UpdateString $json "token.token_data.type" "visa" CkJsonObject_UpdateString $json "token.token_data.value" "2537446225198291" CkJsonObject_UpdateString $json "token.token_data.cardholder_name" "JohnSmith" CkJsonObject_UpdateString $json "token.token_data.exp_date" "1030" CkJsonObject_UpdateString $json "token.token_data.special_payment" "B" # string hashData = apiKey + nonce + timestamp + token + jsonString; set sbHmacData [new_CkStringBuilder] CkStringBuilder_Append $sbHmacData $apiKey CkStringBuilder_Append $sbHmacData $nonce CkStringBuilder_Append $sbHmacData $timestamp CkStringBuilder_Append $sbHmacData $token CkStringBuilder_Append $sbHmacData [CkJsonObject_emit $json] # HMAC the data to produce a hex string. CkCrypt2_put_EncodingMode $crypt "hexlower" CkCrypt2_put_MacAlgorithm $crypt "hmac" CkCrypt2_SetMacKeyString $crypt $apiSecret CkCrypt2_put_HashAlgorithm $crypt "sha256" CkCrypt2_put_Charset $crypt "utf-8" set hexHash [CkCrypt2_macStringENC $crypt [CkStringBuilder_getAsString $sbHmacData]] # Now base64 encode the hex string: set sbBase64Hash [new_CkStringBuilder] CkStringBuilder_Append $sbBase64Hash $hexHash CkStringBuilder_Encode $sbBase64Hash "base64" "utf-8" puts "This is the Authorization header to be sent with the payeezy request:" puts "Authorization: [CkStringBuilder_getAsString $sbBase64Hash]" delete_CkCrypt2 $crypt delete_CkPrng $prng delete_CkDateTime $dtNow delete_CkStringBuilder $sbTimestamp delete_CkJsonObject $json delete_CkStringBuilder $sbHmacData delete_CkStringBuilder $sbBase64Hash |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.