AutoIt
AutoIt
Adyen HMAC Signature Calculation for Hosted Payment Pages
See more Adyen Examples
Demonstrates how to do the HMAC Signature Calculation for a hosted payment page (HPP) in Adyen.For a C# ASP.NET Razor Pages example showing the HTML Form with HMAC signature code, see Adyen HMAC Signature Calculation in C#
Chilkat AutoIt Downloads
Local $bSuccess = False
; This example requires the Chilkat API to have been previously unlocked.
; See Global Unlock Sample for sample code.
Local $strHtml = "<table class=""od""><tr><th>Description</th><th>Quantity</th><th>Amount</th></tr><tr><td>1 Digital Camera</td><td class=""r"">1</td><td class=""r"">100 GBP</td></tr><tr><td class=""b"">Total</td><td class=""r""></td><td class=""b r"">100.00 GBP</td></tr></table>"
$oGzip = ObjCreate("Chilkat.Gzip")
Local $sGzOrderData = $oGzip.CompressStringENC($strHtml,"utf-8","base64")
$oXml = ObjCreate("Chilkat.Xml")
$oXml.Tag = "keyValuePairs"
$oXml.NewChild2 "orderData",$sGzOrderData
; required, The payment deadline; the payment needs to occur within the specified time value.
Local $sessionValidity = "2019-08-11T10:30:00Z"
$oXml.NewChild2 "sessionValidity",$sessionValidity
; optional. Normally we'll let Adyen automatically know the country based on the IP address.
; By default, the payment methods offered to a shopper are filtered based on the country the shopper's IP address is mapped to.
; In this way, shoppers are not offered payment methods that are not available in the country they are carrying out the transaction from.
; This IP-to-country mapping is not 100% accurate, so if you have already established the country of the shopper, you can set it explicitly
; in the countryCode parameter.
Local $sCountryCode = "GB"
$oXml.NewChild2 "countryCode",$sCountryCode
; optional
Local $shopperLocale = "en_GB"
; If not specified, the locale preference is set to en_GB by default.
; When it is not necessary to include the country-specific part, use only the language code.
; For example: it instead of it_IT to set the locale preferences to Italian.
$oXml.NewChild2 "shopperLocale",$shopperLocale
; required, A reference to uniquely identify the payment. This reference is used in all communication with you about the payment status.
; We recommend using a unique value per payment; however, it is not a requirement. If you need to provide multiple references for a transaction,
; you can enter them in this field. Separate each reference value with a hyphen character ("-"). This field has a length restriction:
; you can enter max. 80 characters.
Local $sMerchantReference = "paymentTest1234"
$oXml.NewChild2 "merchantReference",$sMerchantReference
; required, The merchant account identifier you want to process the (transaction) request with.
Local $sMerchantAccount = "ChilkatSoftwareIncCOM"
$oXml.NewChild2 "merchantAccount",$sMerchantAccount
; required. 10000 for $100.00
Local $sPaymentAmount = "10000"
$oXml.NewChild2 "paymentAmount",$sPaymentAmount
; required, The three-character ISO currency code
Local $sCurrencyCode = "GBP"
$oXml.NewChild2 "currencyCode",$sCurrencyCode
; required.
Local $skinCode = "S7uWsvfB"
$oXml.NewChild2 "skinCode",$skinCode
; optional, A unique identifier for the shopper, for example, a customer ID.
; We recommend providing this information, as it is used in velocity fraud checks. It is also the key in recurring payments.
; This field is mandatory in recurring payments.
Local $shopperReference = "somebody@example.com"
$oXml.NewChild2 "shopperReference",$shopperReference
; optional
Local $shopperEmail = "somebody@example.com"
$oXml.NewChild2 "shopperEmail",$shopperEmail
; optional, An integer value that adds up to the normal fraud score.
; The value can be either a positive or negative integer.
$oXml.NewChild2 "offset","0"
; Apparently this is a required field.
Local $shipBeforeDate = "2019-06-04"
$oXml.NewChild2 "shipBeforeDate",$shipBeforeDate
$oXml.SortByTag True
; Encode...
; "\" (backslash) as "\\"
; ":" (colon) as "\:"
$oSbTags = ObjCreate("Chilkat.StringBuilder")
$oSbValues = ObjCreate("Chilkat.StringBuilder")
$oSbContent = ObjCreate("Chilkat.StringBuilder")
Local $iN = $oXml.NumChildren
Local $i = 0
While $i < $iN
If ($i > 0) Then
$oSbTags.Append(":")
$oSbValues.Append(":")
EndIf
$oXml.GetChild2($i)
$oSbTags.Append($oXml.Tag)
$oSbContent.SetString($oXml.Content)
Local $iNumReplaced = $oSbContent.Replace("\","\\")
$iNumReplaced = $oSbContent.Replace(":","\:")
$oSbValues.AppendSb($oSbContent)
$oXml.GetParent2()
$i = $i + 1
Wend
$oSbSigningStr = ObjCreate("Chilkat.StringBuilder")
$oSbSigningStr.AppendSb($oSbTags)
$oSbSigningStr.Append(":")
$oSbSigningStr.AppendSb($oSbValues)
$oCrypt = ObjCreate("Chilkat.Crypt2")
$oCrypt.HashAlgorithm = "sha256"
$oCrypt.MacAlgorithm = "hmac"
Local $sHmacKey = "934D1E806DDD99595EB430076FD7F8E4D12D0A3F51243A4C0C3897703118E739"
$oCrypt.SetMacKeyEncoded($sHmacKey,"hex")
$oCrypt.EncodingMode = "base64"
Local $sMerchantSig = $oCrypt.MacStringENC($oSbSigningStr.GetAsString())
ConsoleWrite($sMerchantSig & @CRLF)