DataFlex
DataFlex
Hungary NAV Manage Invoice Request
See more Hungary NAV Invoicing Examples
Demonstrates the manageInvoice request for the Hungarian NAV Online Invoicing System REST API v2.0.Chilkat DataFlex Downloads
Use ChilkatAx-win32.pkg
Procedure Test
Boolean iSuccess
Handle hoBdInvoiceData1
Handle hoBdInvoiceData2
Handle hoBdInvoiceData3
Handle hoCrypt
Handle hoDtNow
String sMyPassword
String sPasswordHash
Handle hoPrng
Handle hoSbRequestId
String sSignatureKey
Handle hoSbFinalHashBase
Integer iNumReplaced
Handle hoSbHashBase
String sIndexHash
String sRequestSignature
Handle hoXmlExchangeToken
String sEncodedEncryptedExchangeToken
Variant vBdExchangeToken
Handle hoBdExchangeToken
String sExchangeToken
Handle hoXml
Handle hoHttp
String sEndpoint
Variant vResp
Handle hoResp
Variant vResp
Xml Handle hoRespXml
String sManageInvoiceResponse_xmlns
String sManageInvoiceResponse_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 sTransactionId
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"?>
// <ManageInvoiceRequest xmlns="http://schemas.nav.gov.hu/OSA/2.0/api">
// <header>
// <requestId>RID181837288942</requestId>
// <timestamp>2019-09-11T12:44:55.442Z</timestamp>
// <requestVersion>2.0</requestVersion>
// <headerVersion>1.0</headerVersion>
// </header>
// <user>
// <login>lwilsmn0uqdxe6u</login>
// <passwordHash>2F43840A882CFDB7DB0FEC07D419D030D864B47B6B541DC280EF81B937B7A176E33C052B0D26638CC18A7A2C08D8D311733078A774BF43F6CA57FE8CD74DC28E</passwordHash>
// <taxNumber>11111111</taxNumber>
// <requestSignature>E4D191A48EE8828A1E84C1F841A2B4E1699ECB49C4CDA1DC7A057765FD935872219644CC2B5A93B8A344404E4FD8ECA4902B5DBCF993E768DC558B0F0281E775</requestSignature>
// </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>
// <exchangeToken>b1aca173-d9e8-4561-9237-0511eed99eaa2P0ZHLXBRI2U</exchangeToken>
// <invoiceOperations>
// <compressedContent>false</compressedContent>
// <invoiceOperation>
// <index>1</index>
// <invoiceOperation>CREATE</invoiceOperation>
// <invoiceData>base64 contents of invoiceData1 XML file</invoiceData>
// </invoiceOperation>
// <invoiceOperation>
// <index>2</index>
// <invoiceOperation>CREATE</invoiceOperation>
// <invoiceData>base64 contents of invoiceData2 XML file</invoiceData>
// </invoiceOperation>
// <invoiceOperation>
// <index>3</index>
// <invoiceOperation>CREATE</invoiceOperation>
// <invoiceData>base64 contents of invoiceData3 XML file</invoiceData>
// </invoiceOperation>
// </invoiceOperations>
// </ManageInvoiceRequest>
//
// First load the invoiceData for the 3 XML invoice files we'll be sending.
Get Create (RefClass(cComChilkatBinData)) To hoBdInvoiceData1
If (Not(IsComObjectCreated(hoBdInvoiceData1))) Begin
Send CreateComObject of hoBdInvoiceData1
End
Get Create (RefClass(cComChilkatBinData)) To hoBdInvoiceData2
If (Not(IsComObjectCreated(hoBdInvoiceData2))) Begin
Send CreateComObject of hoBdInvoiceData2
End
Get Create (RefClass(cComChilkatBinData)) To hoBdInvoiceData3
If (Not(IsComObjectCreated(hoBdInvoiceData3))) Begin
Send CreateComObject of hoBdInvoiceData3
End
Get ComLoadFile Of hoBdInvoiceData1 "qa_data/nav_invoicing/invoiceData1.xml" To iSuccess
Get ComLoadFile Of hoBdInvoiceData2 "qa_data/nav_invoicing/invoiceData2.xml" To iSuccess
Get ComLoadFile Of hoBdInvoiceData3 "qa_data/nav_invoicing/invoiceData3.xml" To iSuccess
If (iSuccess = False) Begin
Showln "Failed to load invoice data."
Procedure_Return
End
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
// Calculate each index hash and add it to the sbFinalHashBase
Get Create (RefClass(cComChilkatStringBuilder)) To hoSbHashBase
If (Not(IsComObjectCreated(hoSbHashBase))) Begin
Send CreateComObject of hoSbHashBase
End
Get ComAppend Of hoSbHashBase "CREATE" To iSuccess
Get ComGetEncoded Of hoBdInvoiceData1 "base64" To sTemp1
Get ComAppend Of hoSbHashBase sTemp1 To iSuccess
Get ComGetAsString Of hoSbHashBase To sTemp1
Get ComHashStringENC Of hoCrypt sTemp1 To sIndexHash
Get ComAppend Of hoSbFinalHashBase sIndexHash To iSuccess
Send ComClear To hoSbHashBase
Get ComAppend Of hoSbHashBase "CREATE" To iSuccess
Get ComGetEncoded Of hoBdInvoiceData2 "base64" To sTemp1
Get ComAppend Of hoSbHashBase sTemp1 To iSuccess
Get ComGetAsString Of hoSbHashBase To sTemp1
Get ComHashStringENC Of hoCrypt sTemp1 To sIndexHash
Get ComAppend Of hoSbFinalHashBase sIndexHash To iSuccess
Send ComClear To hoSbHashBase
Get ComAppend Of hoSbHashBase "CREATE" To iSuccess
Get ComGetEncoded Of hoBdInvoiceData3 "base64" To sTemp1
Get ComAppend Of hoSbHashBase sTemp1 To iSuccess
Get ComGetAsString Of hoSbHashBase To sTemp1
Get ComHashStringENC Of hoCrypt sTemp1 To sIndexHash
Get ComAppend Of hoSbFinalHashBase sIndexHash To iSuccess
// Get our request signature (using sha3-512 because our HashAlgorithm was set to "sha3-512" up above...)
Get ComGetAsString Of hoSbFinalHashBase To sTemp1
Get ComHashStringENC Of hoCrypt sTemp1 To sRequestSignature
// Load our recently obtained exchange token.
// See Hungary NAV Invoicing Token Exchange Sample Code
Get Create (RefClass(cComChilkatXml)) To hoXmlExchangeToken
If (Not(IsComObjectCreated(hoXmlExchangeToken))) Begin
Send CreateComObject of hoXmlExchangeToken
End
Get ComLoadXmlFile Of hoXmlExchangeToken "qa_data/tokens/nav_exchange_token.xml" To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoXmlExchangeToken To sTemp1
Showln sTemp1
Procedure_Return
End
// Get the base64 encoded/encrypted exchange token.
// IMPORTANT: Make sure to use the exchange token before it expires.
// If it expired, then get a new one..
Get ComGetChildContent Of hoXmlExchangeToken "encodedExchangeToken" To sEncodedEncryptedExchangeToken
// Decode to binary.
Get Create (RefClass(cComChilkatBinData)) To hoBdExchangeToken
If (Not(IsComObjectCreated(hoBdExchangeToken))) Begin
Send CreateComObject of hoBdExchangeToken
End
Get ComAppendEncoded Of hoBdExchangeToken sEncodedEncryptedExchangeToken "base64" To iSuccess
// Decrypt using your 16-digit replacement key:
Set ComCryptAlgorithm Of hoCrypt To "aes"
Set ComCipherMode Of hoCrypt To "ecb"
Set ComKeyLength Of hoCrypt To 128
Set ComEncodingMode Of hoCrypt To "base64"
// Pass your 16-digit replacement key here:
Send ComSetEncodedKey To hoCrypt "99952BBAAAAA8XYZ" "ascii"
Get pvComObject of hoBdExchangeToken to vBdExchangeToken
Get ComDecryptBd Of hoCrypt vBdExchangeToken To iSuccess
Get ComGetString Of hoBdExchangeToken "utf-8" To sExchangeToken
Showln "exchange token = " sExchangeToken
// Now build the XML..
Get Create (RefClass(cComChilkatXml)) To hoXml
If (Not(IsComObjectCreated(hoXml))) Begin
Send CreateComObject of hoXml
End
Set ComTag Of hoXml To "ManageInvoiceRequest"
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"
Send ComUpdateChildContent To hoXml "exchangeToken" sExchangeToken
Send ComUpdateChildContent To hoXml "invoiceOperations|compressedContent" "false"
Send ComUpdateChildContent To hoXml "invoiceOperations|invoiceOperation|index" "1"
Send ComUpdateChildContent To hoXml "invoiceOperations|invoiceOperation|invoiceOperation" "CREATE"
Get ComGetEncoded Of hoBdInvoiceData1 "base64" To sTemp1
Send ComUpdateChildContent To hoXml "invoiceOperations|invoiceOperation|invoiceData" sTemp1
Send ComUpdateChildContent To hoXml "invoiceOperations|invoiceOperation[1]|index" "2"
Send ComUpdateChildContent To hoXml "invoiceOperations|invoiceOperation[1]|invoiceOperation" "CREATE"
Get ComGetEncoded Of hoBdInvoiceData2 "base64" To sTemp1
Send ComUpdateChildContent To hoXml "invoiceOperations|invoiceOperation[1]|invoiceData" sTemp1
Send ComUpdateChildContent To hoXml "invoiceOperations|invoiceOperation[2]|index" "3"
Send ComUpdateChildContent To hoXml "invoiceOperations|invoiceOperation[2]|invoiceOperation" "CREATE"
Get ComGetEncoded Of hoBdInvoiceData3 "base64" To sTemp1
Send ComUpdateChildContent To hoXml "invoiceOperations|invoiceOperation[2]|invoiceData" sTemp1
// POST the XML to https://api-test.onlineszamla.nav.gov.hu/invoiceService/v2/manageInvoice
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/manageInvoice" 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
// The result looks like this:
// <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
// <ManageInvoiceResponse xmlns="http://schemas.nav.gov.hu/OSA/2.0/api" xmlns:ns2="http://schemas.nav.gov.hu/OSA/2.0/data">
// <header>
// <requestId>RID871830318143</requestId>
// <timestamp>2020-03-25T15:51:25Z</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>
// <transactionId>2WT9GFSKFUU1V4XP</transactionId>
// </ManageInvoiceResponse>
// Use this online tool to generate parsing code from sample XML:
// Generate Parsing Code from XML
Get ComGetAttrValue Of hoRespXml "xmlns" To sManageInvoiceResponse_xmlns
Get ComGetAttrValue Of hoRespXml "xmlns:ns2" To sManageInvoiceResponse_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 "transactionId" To sTransactionId
End_Procedure