Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(DataFlex) Hungary NAV Manage Annulment RequestDemonstrates the manageAnnulment request for the Hungarian NAV Online Invoicing System REST API v2.0. Note: This example requires Chilkat v9.5.0.83 or greater. For more information, see https://onlineszamla.nav.gov.hu/api/files/container/download/Online%20Szamla_Interfesz%20specifik%C3%A1ci%C3%B3_EN_v2.0.pdf
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 sInvoiceOperation String sInvoiceData Handle hoSbHashBase String sFirstHash String sRequestSignature ExchangeToken Handle hoXmlExchangeToken String sEncodedEncryptedExchangeToken Variant vBdExchangeToken Handle hoBdExchangeToken String sExchangeToken Handle hoXml Handle hoHttp String sEndpoint Variant vResp Handle hoResp Handle hoRespXml String sManageAnnulmentResponse_xmlns String sManageAnnulmentResponse_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 Boolean bTemp1 // 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> 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 first (and only) index hash. Move "ANNUL" To sInvoiceOperation Move "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/Pg0KPEludm9pY2VBbm51bG1lbnQgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm5hdi5nb3YuaHUvT1NBLzIuMC9hbm51bCI+DQoJCTxhbm51bG1lbnRSZWZlcmVuY2U+MjIyMjIyMjI8L2FubnVsbWVudFJlZmVyZW5jZT4NCgkJPGFubnVsbWVudFRpbWVzdGFtcD4yMDE4LTA2LTE4VDA5OjEwOjQ1LjMwOVo8L2FubnVsbWVudFRpbWVzdGFtcD4NCgkJPGFubnVsbWVudENvZGU+RVJSQVRJQ19EQVRBPC9hbm51bG1lbnRDb2RlPg0KCQk8YW5udWxtZW50UmVhc29uPmNyZWF0ZSBzemFtbGEgYW5udWw8L2FubnVsbWVudFJlYXNvbj4NCjwvSW52b2ljZUFubnVsbWVudD4=" To sInvoiceData Get Create (RefClass(cComChilkatStringBuilder)) To hoSbHashBase If (Not(IsComObjectCreated(hoSbHashBase))) Begin Send CreateComObject of hoSbHashBase End Get ComAppend Of hoSbHashBase sInvoiceOperation To iSuccess Get ComAppend Of hoSbHashBase sInvoiceData To iSuccess Get ComGetAsString Of hoSbHashBase To sTemp1 Get ComHashStringENC Of hoCrypt sTemp1 To sFirstHash // Append the index hash to the final hash base. Get ComAppend Of hoSbFinalHashBase sFirstHash 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 "ManageAnnulmentRequest" 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 "annulmentOperations|annulmentOperation|index" "1" Send ComUpdateChildContent To hoXml "annulmentOperations|annulmentOperation|annulmentOperation" sInvoiceOperation Send ComUpdateChildContent To hoXml "annulmentOperations|annulmentOperation|invoiceAnnulment" sInvoiceData // POST the XML to https://api-test.onlineszamla.nav.gov.hu/invoiceService/v2/manageAnnulment Get Create (RefClass(cComChilkatHttp)) To hoHttp If (Not(IsComObjectCreated(hoHttp))) Begin Send CreateComObject of hoHttp End Set ComAccept Of hoHttp To "application/xml" Send ComSetRequestHeader To hoHttp "Content-Type" "application/xml" Move "https://api-test.onlineszamla.nav.gov.hu/invoiceService/v2/manageAnnulment" To sEndpoint Get ComGetXml Of hoXml To sTemp1 Get ComPostXml Of hoHttp sEndpoint sTemp1 "utf-8" To vResp If (IsComObject(vResp)) Begin Get Create (RefClass(cComChilkatHttpResponse)) To hoResp Set pvComObject Of hoResp To vResp End Get ComLastMethodSuccess Of hoHttp To bTemp1 If (bTemp1 = 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 Send Destroy of hoResp // 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 Get ComGetAttrValue Of hoRespXml "xmlns" To sManageAnnulmentResponse_xmlns Get ComGetAttrValue Of hoRespXml "xmlns:ns2" To sManageAnnulmentResponse_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 |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.