Classic ASP Requires Chilkat v11.0.0+
Classic ASP
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 Classic ASP Downloads
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<%
success = 0
' 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.
set bdInvoiceData1 = Server.CreateObject("Chilkat.BinData")
set bdInvoiceData2 = Server.CreateObject("Chilkat.BinData")
set bdInvoiceData3 = Server.CreateObject("Chilkat.BinData")
success = bdInvoiceData1.LoadFile("qa_data/nav_invoicing/invoiceData1.xml")
success = bdInvoiceData2.LoadFile("qa_data/nav_invoicing/invoiceData2.xml")
success = bdInvoiceData3.LoadFile("qa_data/nav_invoicing/invoiceData3.xml")
If (success = 0) Then
Response.Write "<pre>" & Server.HTMLEncode( "Failed to load invoice data.") & "</pre>"
Response.End
End If
set crypt = Server.CreateObject("Chilkat.Crypt2")
set dtNow = Server.CreateObject("Chilkat.CkDateTime")
success = dtNow.SetFromCurrentSystemTime()
Response.Write "<pre>" & Server.HTMLEncode( dtNow.GetAsTimestamp(0)) & "</pre>"
' The hash algorithm for the password is SHA512 (not SHA3-512).
crypt.HashAlgorithm = "sha512"
crypt.EncodingMode = "hex"
myPassword = "my-password"
passwordHash = crypt.HashStringENC(myPassword)
' Generate a random request ID like "RID215118906689"
set prng = Server.CreateObject("Chilkat.Prng")
set sbRequestId = Server.CreateObject("Chilkat.StringBuilder")
success = sbRequestId.Append("RID")
success = sbRequestId.Append(prng.RandomString(12,1,0,0))
Response.Write "<pre>" & Server.HTMLEncode( "generated requestId = " & sbRequestId.GetAsString()) & "</pre>"
' Calculate the requestSignature
crypt.HashAlgorithm = "sha3-512"
signatureKey = "ce-8f5e-215119fa7dd621DLMRHRLH2S"
set sbFinalHashBase = Server.CreateObject("Chilkat.StringBuilder")
' First append the timestamp because we are going to remove certain chars/parts.
success = sbFinalHashBase.Append(dtNow.GetAsTimestamp(0))
numReplaced = sbFinalHashBase.Replace("Z","")
numReplaced = sbFinalHashBase.Replace("-","")
numReplaced = sbFinalHashBase.Replace(":","")
numReplaced = sbFinalHashBase.Replace("T","")
' Prepend the requestId and append the signatureKey
success = sbFinalHashBase.Prepend(sbRequestId.GetAsString())
success = sbFinalHashBase.Append(signatureKey)
' Calculate each index hash and add it to the sbFinalHashBase
set sbHashBase = Server.CreateObject("Chilkat.StringBuilder")
success = sbHashBase.Append("CREATE")
success = sbHashBase.Append(bdInvoiceData1.GetEncoded("base64"))
indexHash = crypt.HashStringENC(sbHashBase.GetAsString())
success = sbFinalHashBase.Append(indexHash)
sbHashBase.Clear
success = sbHashBase.Append("CREATE")
success = sbHashBase.Append(bdInvoiceData2.GetEncoded("base64"))
indexHash = crypt.HashStringENC(sbHashBase.GetAsString())
success = sbFinalHashBase.Append(indexHash)
sbHashBase.Clear
success = sbHashBase.Append("CREATE")
success = sbHashBase.Append(bdInvoiceData3.GetEncoded("base64"))
indexHash = crypt.HashStringENC(sbHashBase.GetAsString())
success = sbFinalHashBase.Append(indexHash)
' Get our request signature (using sha3-512 because our HashAlgorithm was set to "sha3-512" up above...)
requestSignature = crypt.HashStringENC(sbFinalHashBase.GetAsString())
' Load our recently obtained exchange token.
' See Hungary NAV Invoicing Token Exchange Sample Code
set xmlExchangeToken = Server.CreateObject("Chilkat.Xml")
success = xmlExchangeToken.LoadXmlFile("qa_data/tokens/nav_exchange_token.xml")
If (success = 0) Then
Response.Write "<pre>" & Server.HTMLEncode( xmlExchangeToken.LastErrorText) & "</pre>"
Response.End
End If
' 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..
encodedEncryptedExchangeToken = xmlExchangeToken.GetChildContent("encodedExchangeToken")
' Decode to binary.
set bdExchangeToken = Server.CreateObject("Chilkat.BinData")
success = bdExchangeToken.AppendEncoded(encodedEncryptedExchangeToken,"base64")
' Decrypt using your 16-digit replacement key:
crypt.CryptAlgorithm = "aes"
crypt.CipherMode = "ecb"
crypt.KeyLength = 128
crypt.EncodingMode = "base64"
' Pass your 16-digit replacement key here:
crypt.SetEncodedKey "99952BBAAAAA8XYZ","ascii"
success = crypt.DecryptBd(bdExchangeToken)
exchangeToken = bdExchangeToken.GetString("utf-8")
Response.Write "<pre>" & Server.HTMLEncode( "exchange token = " & exchangeToken) & "</pre>"
' Now build the XML..
set xml = Server.CreateObject("Chilkat.Xml")
xml.Tag = "ManageInvoiceRequest"
success = xml.AddAttribute("xmlns","http://schemas.nav.gov.hu/OSA/2.0/api")
xml.UpdateChildContent "header|requestId",sbRequestId.GetAsString()
xml.UpdateChildContent "header|timestamp",dtNow.GetAsTimestamp(0)
xml.UpdateChildContent "header|requestVersion","2.0"
xml.UpdateChildContent "header|headerVersion","1.0"
xml.UpdateChildContent "user|login","lwilsmn0uqdxe6u"
xml.UpdateChildContent "user|passwordHash",passwordHash
xml.UpdateChildContent "user|taxNumber","11111111"
xml.UpdateChildContent "user|requestSignature",requestSignature
xml.UpdateChildContent "software|softwareId","123456789123456789"
xml.UpdateChildContent "software|softwareName","string"
xml.UpdateChildContent "software|softwareOperation","LOCAL_SOFTWARE"
xml.UpdateChildContent "software|softwareMainVersion","string"
xml.UpdateChildContent "software|softwareDevName","string"
xml.UpdateChildContent "software|softwareDevContact","string"
xml.UpdateChildContent "software|softwareDevCountryCode","HU"
xml.UpdateChildContent "software|softwareDevTaxNumber","string"
xml.UpdateChildContent "exchangeToken",exchangeToken
xml.UpdateChildContent "invoiceOperations|compressedContent","false"
xml.UpdateChildContent "invoiceOperations|invoiceOperation|index","1"
xml.UpdateChildContent "invoiceOperations|invoiceOperation|invoiceOperation","CREATE"
xml.UpdateChildContent "invoiceOperations|invoiceOperation|invoiceData",bdInvoiceData1.GetEncoded("base64")
xml.UpdateChildContent "invoiceOperations|invoiceOperation[1]|index","2"
xml.UpdateChildContent "invoiceOperations|invoiceOperation[1]|invoiceOperation","CREATE"
xml.UpdateChildContent "invoiceOperations|invoiceOperation[1]|invoiceData",bdInvoiceData2.GetEncoded("base64")
xml.UpdateChildContent "invoiceOperations|invoiceOperation[2]|index","3"
xml.UpdateChildContent "invoiceOperations|invoiceOperation[2]|invoiceOperation","CREATE"
xml.UpdateChildContent "invoiceOperations|invoiceOperation[2]|invoiceData",bdInvoiceData3.GetEncoded("base64")
' POST the XML to https://api-test.onlineszamla.nav.gov.hu/invoiceService/v2/manageInvoice
set http = Server.CreateObject("Chilkat.Http")
http.Accept = "application/xml"
endpoint = "https://api-test.onlineszamla.nav.gov.hu/invoiceService/v2/manageInvoice"
set resp = Server.CreateObject("Chilkat.HttpResponse")
success = http.HttpStr("POST",endpoint,xml.GetXml(),"utf-8","application/xml",resp)
If (success = 0) Then
Response.Write "<pre>" & Server.HTMLEncode( http.LastErrorText) & "</pre>"
Response.End
End If
Response.Write "<pre>" & Server.HTMLEncode( "Response status code = " & resp.StatusCode) & "</pre>"
set respXml = Server.CreateObject("Chilkat.Xml")
success = respXml.LoadXml(resp.BodyStr)
Response.Write "<pre>" & Server.HTMLEncode( "Response body:") & "</pre>"
Response.Write "<pre>" & Server.HTMLEncode( respXml.GetXml()) & "</pre>"
' 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
ManageInvoiceResponse_xmlns = respXml.GetAttrValue("xmlns")
ManageInvoiceResponse_xmlns_ns2 = respXml.GetAttrValue("xmlns:ns2")
requestId = respXml.GetChildContent("header|requestId")
timestamp = respXml.GetChildContent("header|timestamp")
requestVersion = respXml.GetChildContent("header|requestVersion")
headerVersion = respXml.GetChildContent("header|headerVersion")
funcCode = respXml.GetChildContent("result|funcCode")
softwareId = respXml.GetChildContent("software|softwareId")
softwareName = respXml.GetChildContent("software|softwareName")
softwareOperation = respXml.GetChildContent("software|softwareOperation")
softwareMainVersion = respXml.GetChildContent("software|softwareMainVersion")
softwareDevName = respXml.GetChildContent("software|softwareDevName")
softwareDevContact = respXml.GetChildContent("software|softwareDevContact")
softwareDevCountryCode = respXml.GetChildContent("software|softwareDevCountryCode")
softwareDevTaxNumber = respXml.GetChildContent("software|softwareDevTaxNumber")
transactionId = respXml.GetChildContent("transactionId")
%>
</body>
</html>