DataFlex
DataFlex
Hungary NAV Token Exchange
See more Hungary NAV Invoicing Examples
Demonstrates the tokenExchange request for the Hungarian NAV Online Invoicing System REST API v2.0.Chilkat DataFlex Downloads
Use ChilkatAx-win32.pkg
Procedure Test
Boolean iSuccess
Handle hoCrypt
Handle hoDtNow
String sMyPassword
String sPasswordHash
Handle hoPrng
Handle hoSbRequestId
String sSignatureKey
Handle hoSbFinalHashBase
Integer iNumReplaced
String sRequestSignature
Handle hoXml
Handle hoHttp
String sEndpoint
Variant vResp
Handle hoResp
Variant vResp
Xml Handle hoRespXml
String sTokenExchangeResponse_xmlns
String sTokenExchangeResponse_xmlns_ns2
String sRequestId
String sTimestamp
String sRequestVersion
String sHeaderVersion
String sFuncCode
String sSoftwareId
String sSoftwareName
String sSoftwareOperation
String sSoftwareMainVersion
String sSoftwareDevName
String sSoftwareDevContact
String sSoftwareDevCountryCode
String sSoftwareDevTaxNumber
String sEncodedExchangeToken
String sTokenValidityFrom
String sTokenValidityTo
String sTemp1
Integer iTemp1
Move False To iSuccess
// This example assumes the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
// Build the following XML:
// Use this online tool to generate code from sample XML:
// Generate Code to Create XML
// <?xml version="1.0" encoding="UTF-8"?>
// <TokenExchangeRequest xmlns="http://schemas.nav.gov.hu/OSA/2.0/api">
// <header>
// <requestId>RID896801578348</requestId>
// <timestamp>2019-09-11T10:55:31.440Z</timestamp>
// <requestVersion>2.0</requestVersion>
// <headerVersion>1.0</headerVersion>
// </header>
// <user>
// <login>lwilsmn0uqdxe6u</login>
// <passwordHash>2F43840A882CFDB7DB0FEC07D419D030D864B47B6B541DC280EF81B937B7A176E33C052B0D26638CC18A7A2C08D8D311733078A774BF43F6CA57FE8CD74DC28E</passwordHash>
// <taxNumber>11111111</taxNumber>
// <requestSignature>B4B5E0F197BFFD3DF69BCC98D3BE775F65FD5445EEF95C9D6B6C59425F2B81C4F6DA1FD563B0C7E7D98AF1E1725E5C63C2803B5D3A93D1C02ED354AC92F2CC94</requestSignature>
// <!--<signKey>ac-ac3a-7f661bff7d342N43CYX4U9FG</signKey>-->
// </user>
// <software>
// <softwareId>123456789123456789</softwareId>
// <softwareName>string</softwareName>
// <softwareOperation>LOCAL_SOFTWARE</softwareOperation>
// <softwareMainVersion>string</softwareMainVersion>
// <softwareDevName>string</softwareDevName>
// <softwareDevContact>string</softwareDevContact>
// <softwareDevCountryCode>HU</softwareDevCountryCode>
// <softwareDevTaxNumber>string</softwareDevTaxNumber>
// </software>
// </TokenExchangeRequest>
Get Create (RefClass(cComChilkatCrypt2)) To hoCrypt
If (Not(IsComObjectCreated(hoCrypt))) Begin
Send CreateComObject of hoCrypt
End
Get Create (RefClass(cComCkDateTime)) To hoDtNow
If (Not(IsComObjectCreated(hoDtNow))) Begin
Send CreateComObject of hoDtNow
End
Get ComSetFromCurrentSystemTime Of hoDtNow To iSuccess
Get ComGetAsTimestamp Of hoDtNow False To sTemp1
Showln sTemp1
// The hash algorithm for the password is SHA512 (not SHA3-512).
Set ComHashAlgorithm Of hoCrypt To "sha512"
Set ComEncodingMode Of hoCrypt To "hex"
Move "my-password" To sMyPassword
Get ComHashStringENC Of hoCrypt sMyPassword To sPasswordHash
// Generate a random request ID like "RID215118906689"
Get Create (RefClass(cComChilkatPrng)) To hoPrng
If (Not(IsComObjectCreated(hoPrng))) Begin
Send CreateComObject of hoPrng
End
Get Create (RefClass(cComChilkatStringBuilder)) To hoSbRequestId
If (Not(IsComObjectCreated(hoSbRequestId))) Begin
Send CreateComObject of hoSbRequestId
End
Get ComAppend Of hoSbRequestId "RID" To iSuccess
Get ComRandomString Of hoPrng 12 True False False To sTemp1
Get ComAppend Of hoSbRequestId sTemp1 To iSuccess
Get ComGetAsString Of hoSbRequestId To sTemp1
Showln "generated requestId = " sTemp1
// Calculate the requestSignature
Set ComHashAlgorithm Of hoCrypt To "sha3-512"
Move "ce-8f5e-215119fa7dd621DLMRHRLH2S" To sSignatureKey
Get Create (RefClass(cComChilkatStringBuilder)) To hoSbFinalHashBase
If (Not(IsComObjectCreated(hoSbFinalHashBase))) Begin
Send CreateComObject of hoSbFinalHashBase
End
// First append the timestamp because we are going to remove certain chars/parts.
Get ComGetAsTimestamp Of hoDtNow False To sTemp1
Get ComAppend Of hoSbFinalHashBase sTemp1 To iSuccess
Get ComReplace Of hoSbFinalHashBase "Z" "" To iNumReplaced
Get ComReplace Of hoSbFinalHashBase "-" "" To iNumReplaced
Get ComReplace Of hoSbFinalHashBase ":" "" To iNumReplaced
Get ComReplace Of hoSbFinalHashBase "T" "" To iNumReplaced
// Prepend the requestId and append the signatureKey
Get ComGetAsString Of hoSbRequestId To sTemp1
Get ComPrepend Of hoSbFinalHashBase sTemp1 To iSuccess
Get ComAppend Of hoSbFinalHashBase sSignatureKey To iSuccess
Get ComGetAsString Of hoSbFinalHashBase To sTemp1
Get ComHashStringENC Of hoCrypt sTemp1 To sRequestSignature
Get Create (RefClass(cComChilkatXml)) To hoXml
If (Not(IsComObjectCreated(hoXml))) Begin
Send CreateComObject of hoXml
End
Set ComTag Of hoXml To "TokenExchangeRequest"
Get ComAddAttribute Of hoXml "xmlns" "http://schemas.nav.gov.hu/OSA/2.0/api" To iSuccess
Get ComGetAsString Of hoSbRequestId To sTemp1
Send ComUpdateChildContent To hoXml "header|requestId" sTemp1
Get ComGetAsTimestamp Of hoDtNow False To sTemp1
Send ComUpdateChildContent To hoXml "header|timestamp" sTemp1
Send ComUpdateChildContent To hoXml "header|requestVersion" "2.0"
Send ComUpdateChildContent To hoXml "header|headerVersion" "1.0"
Send ComUpdateChildContent To hoXml "user|login" "lwilsmn0uqdxe6u"
Send ComUpdateChildContent To hoXml "user|passwordHash" sPasswordHash
Send ComUpdateChildContent To hoXml "user|taxNumber" "11111111"
Send ComUpdateChildContent To hoXml "user|requestSignature" sRequestSignature
Send ComUpdateChildContent To hoXml "software|softwareId" "123456789123456789"
Send ComUpdateChildContent To hoXml "software|softwareName" "string"
Send ComUpdateChildContent To hoXml "software|softwareOperation" "LOCAL_SOFTWARE"
Send ComUpdateChildContent To hoXml "software|softwareMainVersion" "string"
Send ComUpdateChildContent To hoXml "software|softwareDevName" "string"
Send ComUpdateChildContent To hoXml "software|softwareDevContact" "string"
Send ComUpdateChildContent To hoXml "software|softwareDevCountryCode" "HU"
Send ComUpdateChildContent To hoXml "software|softwareDevTaxNumber" "string"
// POST the XML to https://api-test.onlineszamla.nav.gov.hu/invoiceService/v2/tokenExchange
Get Create (RefClass(cComChilkatHttp)) To hoHttp
If (Not(IsComObjectCreated(hoHttp))) Begin
Send CreateComObject of hoHttp
End
Set ComAccept Of hoHttp To "application/xml"
Move "https://api-test.onlineszamla.nav.gov.hu/invoiceService/v2/tokenExchange" To sEndpoint
Get Create (RefClass(cComChilkatHttpResponse)) To hoResp
If (Not(IsComObjectCreated(hoResp))) Begin
Send CreateComObject of hoResp
End
Get ComGetXml Of hoXml To sTemp1
Get pvComObject of hoResp to vResp
Get ComHttpStr Of hoHttp "POST" sEndpoint sTemp1 "utf-8" "application/xml" vResp To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoHttp To sTemp1
Showln sTemp1
Procedure_Return
End
Get ComStatusCode Of hoResp To iTemp1
Showln "Response status code = " iTemp1
Get Create (RefClass(cComChilkatXml)) To hoRespXml
If (Not(IsComObjectCreated(hoRespXml))) Begin
Send CreateComObject of hoRespXml
End
Get ComBodyStr Of hoResp To sTemp1
Get ComLoadXml Of hoRespXml sTemp1 To iSuccess
Showln "Response body:"
Get ComGetXml Of hoRespXml To sTemp1
Showln sTemp1
// Save our exchange token to a file to be used for subsequent requests.
Get ComSaveXml Of hoRespXml "qa_data/tokens/nav_exchange_token.xml" To iSuccess
// The result looks like this:
// <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
// <TokenExchangeResponse xmlns="http://schemas.nav.gov.hu/OSA/2.0/api" xmlns:ns2="http://schemas.nav.gov.hu/OSA/2.0/data">
// <header>
// <requestId>RID789246611489</requestId>
// <timestamp>2020-03-25T14:14:36Z</timestamp>
// <requestVersion>2.0</requestVersion>
// <headerVersion>1.0</headerVersion>
// </header>
// <result>
// <funcCode>OK</funcCode>
// </result>
// <software>
// <softwareId>123456789123456789</softwareId>
// <softwareName>string</softwareName>
// <softwareOperation>LOCAL_SOFTWARE</softwareOperation>
// <softwareMainVersion>string</softwareMainVersion>
// <softwareDevName>string</softwareDevName>
// <softwareDevContact>string</softwareDevContact>
// <softwareDevCountryCode>HU</softwareDevCountryCode>
// <softwareDevTaxNumber>string</softwareDevTaxNumber>
// </software>
// <encodedExchangeToken>2lR5v57Tl ... 9n4tIWCYgjKQ==</encodedExchangeToken>
// <tokenValidityFrom>2020-03-25T15:14:36.987+01:00</tokenValidityFrom>
// <tokenValidityTo>2020-03-25T15:19:36.987+01:00</tokenValidityTo>
// </TokenExchangeResponse>
// Use this online tool to generate parsing code from sample XML:
// Generate Parsing Code from XML
Get ComGetAttrValue Of hoRespXml "xmlns" To sTokenExchangeResponse_xmlns
Get ComGetAttrValue Of hoRespXml "xmlns:ns2" To sTokenExchangeResponse_xmlns_ns2
Get ComGetChildContent Of hoRespXml "header|requestId" To sRequestId
Get ComGetChildContent Of hoRespXml "header|timestamp" To sTimestamp
Get ComGetChildContent Of hoRespXml "header|requestVersion" To sRequestVersion
Get ComGetChildContent Of hoRespXml "header|headerVersion" To sHeaderVersion
Get ComGetChildContent Of hoRespXml "result|funcCode" To sFuncCode
Get ComGetChildContent Of hoRespXml "software|softwareId" To sSoftwareId
Get ComGetChildContent Of hoRespXml "software|softwareName" To sSoftwareName
Get ComGetChildContent Of hoRespXml "software|softwareOperation" To sSoftwareOperation
Get ComGetChildContent Of hoRespXml "software|softwareMainVersion" To sSoftwareMainVersion
Get ComGetChildContent Of hoRespXml "software|softwareDevName" To sSoftwareDevName
Get ComGetChildContent Of hoRespXml "software|softwareDevContact" To sSoftwareDevContact
Get ComGetChildContent Of hoRespXml "software|softwareDevCountryCode" To sSoftwareDevCountryCode
Get ComGetChildContent Of hoRespXml "software|softwareDevTaxNumber" To sSoftwareDevTaxNumber
Get ComGetChildContent Of hoRespXml "encodedExchangeToken" To sEncodedExchangeToken
Get ComGetChildContent Of hoRespXml "tokenValidityFrom" To sTokenValidityFrom
Get ComGetChildContent Of hoRespXml "tokenValidityTo" To sTokenValidityTo
End_Procedure