PowerBuilder Requires Chilkat v11.0.0+
PowerBuilder
Hungary NAV Manage Annulment Request
See more Hungary NAV Invoicing Examples
Demonstrates the manageAnnulment request for the Hungarian NAV Online Invoicing System REST API v2.0.Chilkat PowerBuilder Downloads
integer li_rc
integer li_Success
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
string ls_InvoiceOperation
string ls_InvoiceData
oleobject loo_SbHashBase
string ls_FirstHash
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_ManageAnnulmentResponse_xmlns
string ls_ManageAnnulmentResponse_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"?>
// <ManageAnnulmentRequest xmlns="http://schemas.nav.gov.hu/OSA/2.0/api">
// <header>
// <requestId>RID338592103413</requestId>
// <timestamp>2019-09-11T13:37:09.385Z</timestamp>
// <requestVersion>2.0</requestVersion>
// <headerVersion>1.0</headerVersion>
// </header>
// <user>
// <login>lwilsmn0uqdxe6u</login>
// <passwordHash>2F43840A882CFDB7DB0 ... F6CA57FE8CD74DC28E</passwordHash>
// <taxNumber>11111111</taxNumber>
// <requestSignature>A297E3BD9 ... 1959ADFAF5</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>dbd03076-3a9b-4312-bbbb-0cee3a6472572P11CS49ASIL</exchangeToken>
// <annulmentOperations>
// <annulmentOperation>
// <index>1</index>
// <annulmentOperation>ANNUL</annulmentOperation>
// <invoiceAnnulment>PD94bWwgdm ... ubnVsbWVudD4=</invoiceAnnulment>
// </annulmentOperation>
// </annulmentOperations>
// </ManageAnnulmentRequest>
loo_Crypt = create oleobject
li_rc = loo_Crypt.ConnectToNewObject("Chilkat.Crypt2")
if li_rc < 0 then
destroy loo_Crypt
MessageBox("Error","Connecting to COM object failed")
return
end if
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 first (and only) index hash.
ls_InvoiceOperation = "ANNUL"
ls_InvoiceData = "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/Pg0KPEludm9pY2VBbm51bG1lbnQgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm5hdi5nb3YuaHUvT1NBLzIuMC9hbm51bCI+DQoJCTxhbm51bG1lbnRSZWZlcmVuY2U+MjIyMjIyMjI8L2FubnVsbWVudFJlZmVyZW5jZT4NCgkJPGFubnVsbWVudFRpbWVzdGFtcD4yMDE4LTA2LTE4VDA5OjEwOjQ1LjMwOVo8L2FubnVsbWVudFRpbWVzdGFtcD4NCgkJPGFubnVsbWVudENvZGU+RVJSQVRJQ19EQVRBPC9hbm51bG1lbnRDb2RlPg0KCQk8YW5udWxtZW50UmVhc29uPmNyZWF0ZSBzemFtbGEgYW5udWw8L2FubnVsbWVudFJlYXNvbj4NCjwvSW52b2ljZUFubnVsbWVudD4="
loo_SbHashBase = create oleobject
li_rc = loo_SbHashBase.ConnectToNewObject("Chilkat.StringBuilder")
loo_SbHashBase.Append(ls_InvoiceOperation)
loo_SbHashBase.Append(ls_InvoiceData)
ls_FirstHash = loo_Crypt.HashStringENC(loo_SbHashBase.GetAsString())
// Append the index hash to the final hash base.
loo_SbFinalHashBase.Append(ls_FirstHash)
// 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_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 = "ManageAnnulmentRequest"
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("annulmentOperations|annulmentOperation|index","1")
loo_Xml.UpdateChildContent("annulmentOperations|annulmentOperation|annulmentOperation",ls_InvoiceOperation)
loo_Xml.UpdateChildContent("annulmentOperations|annulmentOperation|invoiceAnnulment",ls_InvoiceData)
// POST the XML to https://api-test.onlineszamla.nav.gov.hu/invoiceService/v2/manageAnnulment
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/manageAnnulment"
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_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"?>
// <ManageAnnulmentResponse xmlns="http://schemas.nav.gov.hu/OSA/2.0/api" xmlns:ns2="http://schemas.nav.gov.hu/OSA/2.0/data">
// <header>
// <requestId>RID465317110495</requestId>
// <timestamp>2020-03-25T15:08:40Z</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>2WT6XG9LQ0U9VQNA</transactionId>
// </ManageAnnulmentResponse>
// Use this online tool to generate parsing code from sample XML:
// Generate Parsing Code from XML
ls_ManageAnnulmentResponse_xmlns = loo_RespXml.GetAttrValue("xmlns")
ls_ManageAnnulmentResponse_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_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