Sample code for 30+ languages & platforms
DataFlex

Plaza API (bol.com) HMAC-SHA256 Authentication

See more Encryption Examples

Demonstrates how to compute the Authorization header for bol.com using HMAC-SHA256.

Chilkat DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Handle hoCrypt
    String sPublicKey
    String sPrivateKey
    String sHttp_verb
    String sContent_type
    String sX_bol_date
    String sUri
    Handle hoSb
    Boolean iSuccess
    String sMac
    Handle hoSbHeader
    String sHdrValue
    String sTemp1

    // This example assumes the Chilkat API to have been previously unlocked.
    // See Global Unlock Sample for sample code.

    Get Create (RefClass(cComChilkatCrypt2)) To hoCrypt
    If (Not(IsComObjectCreated(hoCrypt))) Begin
        Send CreateComObject of hoCrypt
    End

    Set ComEncodingMode Of hoCrypt To "base64"
    Set ComHashAlgorithm Of hoCrypt To "sha256"
    Set ComMacAlgorithm Of hoCrypt To "hmac"

    Move "oRNWbHFXtAECmhnZmEndcjLIaSKbRMVE" To sPublicKey
    Move "MaQHPOnmYkPZNgeRziPnQyyOJYytUbcFBVJBvbMKoDdpPqaZbaOiLUTWzPAkpPsZFZbJHrcoltdgpZolyNcgvvBaKcmkqFjucFzXhDONTsPAtHHyccQlLUZpkOuywMiOycDWcCySFsgpDiyGnCWCZJkNTtVdPxbSUTWVIFQiUxaPDYDXRQAVVTbSVZArAZkaLDLOoOvPzxSdhnkkJWzlQDkqsXNKfAIgAldrmyfROSyCGMCfvzdQdUQEaYZTPEoA" To sPrivateKey

    // The string to sign is this:
    // http_verb +'\n\n'+ content_type +'\n'+ x_bol_date +'\n'+ 'x-bol-date:'+ x_bol_date +'\n'+ uri

    Move "GET" To sHttp_verb
    Move "application/xml" To sContent_type
    Move "Wed, 17 Feb 2016 00:00:00 GMT" To sX_bol_date
    Move "/services/rest/orders/v2" To sUri

    // IMPORTANT: Notice the use of underscore and hyphen (dash) chars in x-bol-date vs. x_bol_date.
    // In one place hypens are used.  In two places, underscore chars are used.
    Get Create (RefClass(cComChilkatStringBuilder)) To hoSb
    If (Not(IsComObjectCreated(hoSb))) Begin
        Send CreateComObject of hoSb
    End
    Get ComAppend Of hoSb sHttp_verb To iSuccess
    Get ComAppend Of hoSb (character(10)) + (character(10)) To iSuccess
    Get ComAppend Of hoSb sContent_type To iSuccess
    Get ComAppend Of hoSb (character(10)) To iSuccess
    Get ComAppend Of hoSb sX_bol_date To iSuccess
    Get ComAppend Of hoSb (character(10)) + "x-bol-date:" To iSuccess
    Get ComAppend Of hoSb sX_bol_date To iSuccess
    Get ComAppend Of hoSb (character(10)) To iSuccess
    Get ComAppend Of hoSb sUri To iSuccess
    Get ComGetAsString Of hoSb To sTemp1
    Showln "[" sTemp1 "]"

    // Set the HMAC key:
    Get ComSetMacKeyEncoded Of hoCrypt sPrivateKey "ascii" To iSuccess
    Get ComGetAsString Of hoSb To sTemp1
    Get ComMacStringENC Of hoCrypt sTemp1 To sMac

    // The answer should be: nqzLWvXI1eBhBXrRx5NF23V5hS8Q1xWCloJzPi/RAts=
    Showln sMac

    // The last step is to append the public key with the signature
    Get Create (RefClass(cComChilkatStringBuilder)) To hoSbHeader
    If (Not(IsComObjectCreated(hoSbHeader))) Begin
        Send CreateComObject of hoSbHeader
    End
    Get ComAppend Of hoSbHeader sPublicKey To iSuccess
    Get ComAppend Of hoSbHeader ":" To iSuccess
    Get ComAppend Of hoSbHeader sMac To iSuccess

    Get ComGetAsString Of hoSbHeader To sHdrValue
    Showln sHdrValue


End_Procedure