PowerBuilder Requires Chilkat v11.0.0+
PowerBuilder
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 PowerBuilder Downloads
integer li_rc
integer li_Success
oleobject loo_BdInvoiceData1
oleobject loo_BdInvoiceData2
oleobject loo_BdInvoiceData3
oleobject loo_Crypt
oleobject loo_DtNow
string ls_MyPassword
string ls_PasswordHash
oleobject loo_Prng
oleobject loo_SbRequestId
string ls_SignatureKey
oleobject loo_SbFinalHashBase
integer li_NumReplaced
oleobject loo_SbHashBase
string ls_IndexHash
string ls_RequestSignature
oleobject loo_XmlExchangeToken
string ls_EncodedEncryptedExchangeToken
oleobject loo_BdExchangeToken
string ls_ExchangeToken
oleobject loo_Xml
oleobject loo_Http
string ls_Endpoint
oleobject loo_Resp
oleobject loo_RespXml
string ls_ManageInvoiceResponse_xmlns
string ls_ManageInvoiceResponse_xmlns_ns2
string ls_RequestId
string ls_Timestamp
string ls_RequestVersion
string ls_HeaderVersion
string ls_FuncCode
string ls_SoftwareId
string ls_SoftwareName
string ls_SoftwareOperation
string ls_SoftwareMainVersion
string ls_SoftwareDevName
string ls_SoftwareDevContact
string ls_SoftwareDevCountryCode
string ls_SoftwareDevTaxNumber
string ls_TransactionId
li_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.
loo_BdInvoiceData1 = create oleobject
li_rc = loo_BdInvoiceData1.ConnectToNewObject("Chilkat.BinData")
if li_rc < 0 then
destroy loo_BdInvoiceData1
MessageBox("Error","Connecting to COM object failed")
return
end if
loo_BdInvoiceData2 = create oleobject
li_rc = loo_BdInvoiceData2.ConnectToNewObject("Chilkat.BinData")
loo_BdInvoiceData3 = create oleobject
li_rc = loo_BdInvoiceData3.ConnectToNewObject("Chilkat.BinData")
li_Success = loo_BdInvoiceData1.LoadFile("qa_data/nav_invoicing/invoiceData1.xml")
li_Success = loo_BdInvoiceData2.LoadFile("qa_data/nav_invoicing/invoiceData2.xml")
li_Success = loo_BdInvoiceData3.LoadFile("qa_data/nav_invoicing/invoiceData3.xml")
if li_Success = 0 then
Write-Debug "Failed to load invoice data."
destroy loo_BdInvoiceData1
destroy loo_BdInvoiceData2
destroy loo_BdInvoiceData3
return
end if
loo_Crypt = create oleobject
li_rc = loo_Crypt.ConnectToNewObject("Chilkat.Crypt2")
loo_DtNow = create oleobject
li_rc = loo_DtNow.ConnectToNewObject("Chilkat.CkDateTime")
loo_DtNow.SetFromCurrentSystemTime()
Write-Debug loo_DtNow.GetAsTimestamp(0)
// The hash algorithm for the password is SHA512 (not SHA3-512).
loo_Crypt.HashAlgorithm = "sha512"
loo_Crypt.EncodingMode = "hex"
ls_MyPassword = "my-password"
ls_PasswordHash = loo_Crypt.HashStringENC(ls_MyPassword)
// Generate a random request ID like "RID215118906689"
loo_Prng = create oleobject
li_rc = loo_Prng.ConnectToNewObject("Chilkat.Prng")
loo_SbRequestId = create oleobject
li_rc = loo_SbRequestId.ConnectToNewObject("Chilkat.StringBuilder")
loo_SbRequestId.Append("RID")
loo_SbRequestId.Append(loo_Prng.RandomString(12,1,0,0))
Write-Debug "generated requestId = " + loo_SbRequestId.GetAsString()
// Calculate the requestSignature
loo_Crypt.HashAlgorithm = "sha3-512"
ls_SignatureKey = "ce-8f5e-215119fa7dd621DLMRHRLH2S"
loo_SbFinalHashBase = create oleobject
li_rc = loo_SbFinalHashBase.ConnectToNewObject("Chilkat.StringBuilder")
// First append the timestamp because we are going to remove certain chars/parts.
loo_SbFinalHashBase.Append(loo_DtNow.GetAsTimestamp(0))
li_NumReplaced = loo_SbFinalHashBase.Replace("Z","")
li_NumReplaced = loo_SbFinalHashBase.Replace("-","")
li_NumReplaced = loo_SbFinalHashBase.Replace(":","")
li_NumReplaced = loo_SbFinalHashBase.Replace("T","")
// Prepend the requestId and append the signatureKey
loo_SbFinalHashBase.Prepend(loo_SbRequestId.GetAsString())
loo_SbFinalHashBase.Append(ls_SignatureKey)
// Calculate each index hash and add it to the sbFinalHashBase
loo_SbHashBase = create oleobject
li_rc = loo_SbHashBase.ConnectToNewObject("Chilkat.StringBuilder")
loo_SbHashBase.Append("CREATE")
loo_SbHashBase.Append(loo_BdInvoiceData1.GetEncoded("base64"))
ls_IndexHash = loo_Crypt.HashStringENC(loo_SbHashBase.GetAsString())
loo_SbFinalHashBase.Append(ls_IndexHash)
loo_SbHashBase.Clear()
loo_SbHashBase.Append("CREATE")
loo_SbHashBase.Append(loo_BdInvoiceData2.GetEncoded("base64"))
ls_IndexHash = loo_Crypt.HashStringENC(loo_SbHashBase.GetAsString())
loo_SbFinalHashBase.Append(ls_IndexHash)
loo_SbHashBase.Clear()
loo_SbHashBase.Append("CREATE")
loo_SbHashBase.Append(loo_BdInvoiceData3.GetEncoded("base64"))
ls_IndexHash = loo_Crypt.HashStringENC(loo_SbHashBase.GetAsString())
loo_SbFinalHashBase.Append(ls_IndexHash)
// Get our request signature (using sha3-512 because our HashAlgorithm was set to "sha3-512" up above...)
ls_RequestSignature = loo_Crypt.HashStringENC(loo_SbFinalHashBase.GetAsString())
// Load our recently obtained exchange token.
// See Hungary NAV Invoicing Token Exchange Sample Code
loo_XmlExchangeToken = create oleobject
li_rc = loo_XmlExchangeToken.ConnectToNewObject("Chilkat.Xml")
li_Success = loo_XmlExchangeToken.LoadXmlFile("qa_data/tokens/nav_exchange_token.xml")
if li_Success = 0 then
Write-Debug loo_XmlExchangeToken.LastErrorText
destroy loo_BdInvoiceData1
destroy loo_BdInvoiceData2
destroy loo_BdInvoiceData3
destroy loo_Crypt
destroy loo_DtNow
destroy loo_Prng
destroy loo_SbRequestId
destroy loo_SbFinalHashBase
destroy loo_SbHashBase
destroy loo_XmlExchangeToken
return
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..
ls_EncodedEncryptedExchangeToken = loo_XmlExchangeToken.GetChildContent("encodedExchangeToken")
// Decode to binary.
loo_BdExchangeToken = create oleobject
li_rc = loo_BdExchangeToken.ConnectToNewObject("Chilkat.BinData")
loo_BdExchangeToken.AppendEncoded(ls_EncodedEncryptedExchangeToken,"base64")
// Decrypt using your 16-digit replacement key:
loo_Crypt.CryptAlgorithm = "aes"
loo_Crypt.CipherMode = "ecb"
loo_Crypt.KeyLength = 128
loo_Crypt.EncodingMode = "base64"
// Pass your 16-digit replacement key here:
loo_Crypt.SetEncodedKey("99952BBAAAAA8XYZ","ascii")
loo_Crypt.DecryptBd(loo_BdExchangeToken)
ls_ExchangeToken = loo_BdExchangeToken.GetString("utf-8")
Write-Debug "exchange token = " + ls_ExchangeToken
// Now build the XML..
loo_Xml = create oleobject
li_rc = loo_Xml.ConnectToNewObject("Chilkat.Xml")
loo_Xml.Tag = "ManageInvoiceRequest"
loo_Xml.AddAttribute("xmlns","http://schemas.nav.gov.hu/OSA/2.0/api")
loo_Xml.UpdateChildContent("header|requestId",loo_SbRequestId.GetAsString())
loo_Xml.UpdateChildContent("header|timestamp",loo_DtNow.GetAsTimestamp(0))
loo_Xml.UpdateChildContent("header|requestVersion","2.0")
loo_Xml.UpdateChildContent("header|headerVersion","1.0")
loo_Xml.UpdateChildContent("user|login","lwilsmn0uqdxe6u")
loo_Xml.UpdateChildContent("user|passwordHash",ls_PasswordHash)
loo_Xml.UpdateChildContent("user|taxNumber","11111111")
loo_Xml.UpdateChildContent("user|requestSignature",ls_RequestSignature)
loo_Xml.UpdateChildContent("software|softwareId","123456789123456789")
loo_Xml.UpdateChildContent("software|softwareName","string")
loo_Xml.UpdateChildContent("software|softwareOperation","LOCAL_SOFTWARE")
loo_Xml.UpdateChildContent("software|softwareMainVersion","string")
loo_Xml.UpdateChildContent("software|softwareDevName","string")
loo_Xml.UpdateChildContent("software|softwareDevContact","string")
loo_Xml.UpdateChildContent("software|softwareDevCountryCode","HU")
loo_Xml.UpdateChildContent("software|softwareDevTaxNumber","string")
loo_Xml.UpdateChildContent("exchangeToken",ls_ExchangeToken)
loo_Xml.UpdateChildContent("invoiceOperations|compressedContent","false")
loo_Xml.UpdateChildContent("invoiceOperations|invoiceOperation|index","1")
loo_Xml.UpdateChildContent("invoiceOperations|invoiceOperation|invoiceOperation","CREATE")
loo_Xml.UpdateChildContent("invoiceOperations|invoiceOperation|invoiceData",loo_BdInvoiceData1.GetEncoded("base64"))
loo_Xml.UpdateChildContent("invoiceOperations|invoiceOperation[1]|index","2")
loo_Xml.UpdateChildContent("invoiceOperations|invoiceOperation[1]|invoiceOperation","CREATE")
loo_Xml.UpdateChildContent("invoiceOperations|invoiceOperation[1]|invoiceData",loo_BdInvoiceData2.GetEncoded("base64"))
loo_Xml.UpdateChildContent("invoiceOperations|invoiceOperation[2]|index","3")
loo_Xml.UpdateChildContent("invoiceOperations|invoiceOperation[2]|invoiceOperation","CREATE")
loo_Xml.UpdateChildContent("invoiceOperations|invoiceOperation[2]|invoiceData",loo_BdInvoiceData3.GetEncoded("base64"))
// POST the XML to https://api-test.onlineszamla.nav.gov.hu/invoiceService/v2/manageInvoice
loo_Http = create oleobject
li_rc = loo_Http.ConnectToNewObject("Chilkat.Http")
loo_Http.Accept = "application/xml"
ls_Endpoint = "https://api-test.onlineszamla.nav.gov.hu/invoiceService/v2/manageInvoice"
loo_Resp = create oleobject
li_rc = loo_Resp.ConnectToNewObject("Chilkat.HttpResponse")
li_Success = loo_Http.HttpStr("POST",ls_Endpoint,loo_Xml.GetXml(),"utf-8","application/xml",loo_Resp)
if li_Success = 0 then
Write-Debug loo_Http.LastErrorText
destroy loo_BdInvoiceData1
destroy loo_BdInvoiceData2
destroy loo_BdInvoiceData3
destroy loo_Crypt
destroy loo_DtNow
destroy loo_Prng
destroy loo_SbRequestId
destroy loo_SbFinalHashBase
destroy loo_SbHashBase
destroy loo_XmlExchangeToken
destroy loo_BdExchangeToken
destroy loo_Xml
destroy loo_Http
destroy loo_Resp
return
end if
Write-Debug "Response status code = " + string(loo_Resp.StatusCode)
loo_RespXml = create oleobject
li_rc = loo_RespXml.ConnectToNewObject("Chilkat.Xml")
loo_RespXml.LoadXml(loo_Resp.BodyStr)
Write-Debug "Response body:"
Write-Debug loo_RespXml.GetXml()
// 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
ls_ManageInvoiceResponse_xmlns = loo_RespXml.GetAttrValue("xmlns")
ls_ManageInvoiceResponse_xmlns_ns2 = loo_RespXml.GetAttrValue("xmlns:ns2")
ls_RequestId = loo_RespXml.GetChildContent("header|requestId")
ls_Timestamp = loo_RespXml.GetChildContent("header|timestamp")
ls_RequestVersion = loo_RespXml.GetChildContent("header|requestVersion")
ls_HeaderVersion = loo_RespXml.GetChildContent("header|headerVersion")
ls_FuncCode = loo_RespXml.GetChildContent("result|funcCode")
ls_SoftwareId = loo_RespXml.GetChildContent("software|softwareId")
ls_SoftwareName = loo_RespXml.GetChildContent("software|softwareName")
ls_SoftwareOperation = loo_RespXml.GetChildContent("software|softwareOperation")
ls_SoftwareMainVersion = loo_RespXml.GetChildContent("software|softwareMainVersion")
ls_SoftwareDevName = loo_RespXml.GetChildContent("software|softwareDevName")
ls_SoftwareDevContact = loo_RespXml.GetChildContent("software|softwareDevContact")
ls_SoftwareDevCountryCode = loo_RespXml.GetChildContent("software|softwareDevCountryCode")
ls_SoftwareDevTaxNumber = loo_RespXml.GetChildContent("software|softwareDevTaxNumber")
ls_TransactionId = loo_RespXml.GetChildContent("transactionId")
destroy loo_BdInvoiceData1
destroy loo_BdInvoiceData2
destroy loo_BdInvoiceData3
destroy loo_Crypt
destroy loo_DtNow
destroy loo_Prng
destroy loo_SbRequestId
destroy loo_SbFinalHashBase
destroy loo_SbHashBase
destroy loo_XmlExchangeToken
destroy loo_BdExchangeToken
destroy loo_Xml
destroy loo_Http
destroy loo_Resp
destroy loo_RespXml