Sample code for 30+ languages & platforms
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

AutoIt
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)