SQL Server Requires Chilkat v11.0.0+
SQL Server
Hungary NAV Token Exchange
See more Hungary NAV Invoicing Examples
Demonstrates the tokenExchange request for the Hungarian NAV Online Invoicing System REST API v2.0.Chilkat SQL Server Downloads
-- Important: See this note about string length limitations for strings returned by sp_OAMethod calls.
--
CREATE PROCEDURE ChilkatSample
AS
BEGIN
DECLARE @hr int
DECLARE @iTmp0 int
DECLARE @sTmp0 nvarchar(4000)
DECLARE @success int
SELECT @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"?>
-- <TokenExchangeRequest xmlns="http://schemas.nav.gov.hu/OSA/2.0/api">
-- <header>
-- <requestId>RID896801578348</requestId>
-- <timestamp>2019-09-11T10:55:31.440Z</timestamp>
-- <requestVersion>2.0</requestVersion>
-- <headerVersion>1.0</headerVersion>
-- </header>
-- <user>
-- <login>lwilsmn0uqdxe6u</login>
-- <passwordHash>2F43840A882CFDB7DB0FEC07D419D030D864B47B6B541DC280EF81B937B7A176E33C052B0D26638CC18A7A2C08D8D311733078A774BF43F6CA57FE8CD74DC28E</passwordHash>
-- <taxNumber>11111111</taxNumber>
-- <requestSignature>B4B5E0F197BFFD3DF69BCC98D3BE775F65FD5445EEF95C9D6B6C59425F2B81C4F6DA1FD563B0C7E7D98AF1E1725E5C63C2803B5D3A93D1C02ED354AC92F2CC94</requestSignature>
-- <!--<signKey>ac-ac3a-7f661bff7d342N43CYX4U9FG</signKey>-->
-- </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>
-- </TokenExchangeRequest>
DECLARE @crypt int
EXEC @hr = sp_OACreate 'Chilkat.Crypt2', @crypt OUT
IF @hr <> 0
BEGIN
PRINT 'Failed to create ActiveX component'
RETURN
END
DECLARE @dtNow int
EXEC @hr = sp_OACreate 'Chilkat.CkDateTime', @dtNow OUT
EXEC sp_OAMethod @dtNow, 'SetFromCurrentSystemTime', @success OUT
EXEC sp_OAMethod @dtNow, 'GetAsTimestamp', @sTmp0 OUT, 0
PRINT @sTmp0
-- The hash algorithm for the password is SHA512 (not SHA3-512).
EXEC sp_OASetProperty @crypt, 'HashAlgorithm', 'sha512'
EXEC sp_OASetProperty @crypt, 'EncodingMode', 'hex'
DECLARE @myPassword nvarchar(4000)
SELECT @myPassword = 'my-password'
DECLARE @passwordHash nvarchar(4000)
EXEC sp_OAMethod @crypt, 'HashStringENC', @passwordHash OUT, @myPassword
-- Generate a random request ID like "RID215118906689"
DECLARE @prng int
EXEC @hr = sp_OACreate 'Chilkat.Prng', @prng OUT
DECLARE @sbRequestId int
EXEC @hr = sp_OACreate 'Chilkat.StringBuilder', @sbRequestId OUT
EXEC sp_OAMethod @sbRequestId, 'Append', @success OUT, 'RID'
EXEC sp_OAMethod @prng, 'RandomString', @sTmp0 OUT, 12, 1, 0, 0
EXEC sp_OAMethod @sbRequestId, 'Append', @success OUT, @sTmp0
EXEC sp_OAMethod @sbRequestId, 'GetAsString', @sTmp0 OUT
PRINT 'generated requestId = ' + @sTmp0
-- Calculate the requestSignature
EXEC sp_OASetProperty @crypt, 'HashAlgorithm', 'sha3-512'
DECLARE @signatureKey nvarchar(4000)
SELECT @signatureKey = 'ce-8f5e-215119fa7dd621DLMRHRLH2S'
DECLARE @sbFinalHashBase int
EXEC @hr = sp_OACreate 'Chilkat.StringBuilder', @sbFinalHashBase OUT
-- First append the timestamp because we are going to remove certain chars/parts.
EXEC sp_OAMethod @dtNow, 'GetAsTimestamp', @sTmp0 OUT, 0
EXEC sp_OAMethod @sbFinalHashBase, 'Append', @success OUT, @sTmp0
DECLARE @numReplaced int
EXEC sp_OAMethod @sbFinalHashBase, 'Replace', @numReplaced OUT, 'Z', ''
EXEC sp_OAMethod @sbFinalHashBase, 'Replace', @numReplaced OUT, '-', ''
EXEC sp_OAMethod @sbFinalHashBase, 'Replace', @numReplaced OUT, ':', ''
EXEC sp_OAMethod @sbFinalHashBase, 'Replace', @numReplaced OUT, 'T', ''
-- Prepend the requestId and append the signatureKey
EXEC sp_OAMethod @sbRequestId, 'GetAsString', @sTmp0 OUT
EXEC sp_OAMethod @sbFinalHashBase, 'Prepend', @success OUT, @sTmp0
EXEC sp_OAMethod @sbFinalHashBase, 'Append', @success OUT, @signatureKey
DECLARE @requestSignature nvarchar(4000)
EXEC sp_OAMethod @sbFinalHashBase, 'GetAsString', @sTmp0 OUT
EXEC sp_OAMethod @crypt, 'HashStringENC', @requestSignature OUT, @sTmp0
DECLARE @xml int
EXEC @hr = sp_OACreate 'Chilkat.Xml', @xml OUT
EXEC sp_OASetProperty @xml, 'Tag', 'TokenExchangeRequest'
EXEC sp_OAMethod @xml, 'AddAttribute', @success OUT, 'xmlns', 'http://schemas.nav.gov.hu/OSA/2.0/api'
EXEC sp_OAMethod @sbRequestId, 'GetAsString', @sTmp0 OUT
EXEC sp_OAMethod @xml, 'UpdateChildContent', NULL, 'header|requestId', @sTmp0
EXEC sp_OAMethod @dtNow, 'GetAsTimestamp', @sTmp0 OUT, 0
EXEC sp_OAMethod @xml, 'UpdateChildContent', NULL, 'header|timestamp', @sTmp0
EXEC sp_OAMethod @xml, 'UpdateChildContent', NULL, 'header|requestVersion', '2.0'
EXEC sp_OAMethod @xml, 'UpdateChildContent', NULL, 'header|headerVersion', '1.0'
EXEC sp_OAMethod @xml, 'UpdateChildContent', NULL, 'user|login', 'lwilsmn0uqdxe6u'
EXEC sp_OAMethod @xml, 'UpdateChildContent', NULL, 'user|passwordHash', @passwordHash
EXEC sp_OAMethod @xml, 'UpdateChildContent', NULL, 'user|taxNumber', '11111111'
EXEC sp_OAMethod @xml, 'UpdateChildContent', NULL, 'user|requestSignature', @requestSignature
EXEC sp_OAMethod @xml, 'UpdateChildContent', NULL, 'software|softwareId', '123456789123456789'
EXEC sp_OAMethod @xml, 'UpdateChildContent', NULL, 'software|softwareName', 'string'
EXEC sp_OAMethod @xml, 'UpdateChildContent', NULL, 'software|softwareOperation', 'LOCAL_SOFTWARE'
EXEC sp_OAMethod @xml, 'UpdateChildContent', NULL, 'software|softwareMainVersion', 'string'
EXEC sp_OAMethod @xml, 'UpdateChildContent', NULL, 'software|softwareDevName', 'string'
EXEC sp_OAMethod @xml, 'UpdateChildContent', NULL, 'software|softwareDevContact', 'string'
EXEC sp_OAMethod @xml, 'UpdateChildContent', NULL, 'software|softwareDevCountryCode', 'HU'
EXEC sp_OAMethod @xml, 'UpdateChildContent', NULL, 'software|softwareDevTaxNumber', 'string'
-- POST the XML to https://api-test.onlineszamla.nav.gov.hu/invoiceService/v2/tokenExchange
DECLARE @http int
EXEC @hr = sp_OACreate 'Chilkat.Http', @http OUT
EXEC sp_OASetProperty @http, 'Accept', 'application/xml'
DECLARE @endpoint nvarchar(4000)
SELECT @endpoint = 'https://api-test.onlineszamla.nav.gov.hu/invoiceService/v2/tokenExchange'
DECLARE @resp int
EXEC @hr = sp_OACreate 'Chilkat.HttpResponse', @resp OUT
EXEC sp_OAMethod @xml, 'GetXml', @sTmp0 OUT
EXEC sp_OAMethod @http, 'HttpStr', @success OUT, 'POST', @endpoint, @sTmp0, 'utf-8', 'application/xml', @resp
IF @success = 0
BEGIN
EXEC sp_OAGetProperty @http, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @crypt
EXEC @hr = sp_OADestroy @dtNow
EXEC @hr = sp_OADestroy @prng
EXEC @hr = sp_OADestroy @sbRequestId
EXEC @hr = sp_OADestroy @sbFinalHashBase
EXEC @hr = sp_OADestroy @xml
EXEC @hr = sp_OADestroy @http
EXEC @hr = sp_OADestroy @resp
RETURN
END
EXEC sp_OAGetProperty @resp, 'StatusCode', @iTmp0 OUT
PRINT 'Response status code = ' + @iTmp0
DECLARE @respXml int
EXEC @hr = sp_OACreate 'Chilkat.Xml', @respXml OUT
EXEC sp_OAGetProperty @resp, 'BodyStr', @sTmp0 OUT
EXEC sp_OAMethod @respXml, 'LoadXml', @success OUT, @sTmp0
PRINT 'Response body:'
EXEC sp_OAMethod @respXml, 'GetXml', @sTmp0 OUT
PRINT @sTmp0
-- Save our exchange token to a file to be used for subsequent requests.
EXEC sp_OAMethod @respXml, 'SaveXml', @success OUT, 'qa_data/tokens/nav_exchange_token.xml'
-- The result looks like this:
-- <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-- <TokenExchangeResponse xmlns="http://schemas.nav.gov.hu/OSA/2.0/api" xmlns:ns2="http://schemas.nav.gov.hu/OSA/2.0/data">
-- <header>
-- <requestId>RID789246611489</requestId>
-- <timestamp>2020-03-25T14:14:36Z</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>
-- <encodedExchangeToken>2lR5v57Tl ... 9n4tIWCYgjKQ==</encodedExchangeToken>
-- <tokenValidityFrom>2020-03-25T15:14:36.987+01:00</tokenValidityFrom>
-- <tokenValidityTo>2020-03-25T15:19:36.987+01:00</tokenValidityTo>
-- </TokenExchangeResponse>
-- Use this online tool to generate parsing code from sample XML:
-- Generate Parsing Code from XML
DECLARE @TokenExchangeResponse_xmlns nvarchar(4000)
EXEC sp_OAMethod @respXml, 'GetAttrValue', @TokenExchangeResponse_xmlns OUT, 'xmlns'
DECLARE @TokenExchangeResponse_xmlns_ns2 nvarchar(4000)
EXEC sp_OAMethod @respXml, 'GetAttrValue', @TokenExchangeResponse_xmlns_ns2 OUT, 'xmlns:ns2'
DECLARE @requestId nvarchar(4000)
EXEC sp_OAMethod @respXml, 'GetChildContent', @requestId OUT, 'header|requestId'
DECLARE @timestamp nvarchar(4000)
EXEC sp_OAMethod @respXml, 'GetChildContent', @timestamp OUT, 'header|timestamp'
DECLARE @requestVersion nvarchar(4000)
EXEC sp_OAMethod @respXml, 'GetChildContent', @requestVersion OUT, 'header|requestVersion'
DECLARE @headerVersion nvarchar(4000)
EXEC sp_OAMethod @respXml, 'GetChildContent', @headerVersion OUT, 'header|headerVersion'
DECLARE @funcCode nvarchar(4000)
EXEC sp_OAMethod @respXml, 'GetChildContent', @funcCode OUT, 'result|funcCode'
DECLARE @softwareId nvarchar(4000)
EXEC sp_OAMethod @respXml, 'GetChildContent', @softwareId OUT, 'software|softwareId'
DECLARE @softwareName nvarchar(4000)
EXEC sp_OAMethod @respXml, 'GetChildContent', @softwareName OUT, 'software|softwareName'
DECLARE @softwareOperation nvarchar(4000)
EXEC sp_OAMethod @respXml, 'GetChildContent', @softwareOperation OUT, 'software|softwareOperation'
DECLARE @softwareMainVersion nvarchar(4000)
EXEC sp_OAMethod @respXml, 'GetChildContent', @softwareMainVersion OUT, 'software|softwareMainVersion'
DECLARE @softwareDevName nvarchar(4000)
EXEC sp_OAMethod @respXml, 'GetChildContent', @softwareDevName OUT, 'software|softwareDevName'
DECLARE @softwareDevContact nvarchar(4000)
EXEC sp_OAMethod @respXml, 'GetChildContent', @softwareDevContact OUT, 'software|softwareDevContact'
DECLARE @softwareDevCountryCode nvarchar(4000)
EXEC sp_OAMethod @respXml, 'GetChildContent', @softwareDevCountryCode OUT, 'software|softwareDevCountryCode'
DECLARE @softwareDevTaxNumber nvarchar(4000)
EXEC sp_OAMethod @respXml, 'GetChildContent', @softwareDevTaxNumber OUT, 'software|softwareDevTaxNumber'
DECLARE @encodedExchangeToken nvarchar(4000)
EXEC sp_OAMethod @respXml, 'GetChildContent', @encodedExchangeToken OUT, 'encodedExchangeToken'
DECLARE @tokenValidityFrom nvarchar(4000)
EXEC sp_OAMethod @respXml, 'GetChildContent', @tokenValidityFrom OUT, 'tokenValidityFrom'
DECLARE @tokenValidityTo nvarchar(4000)
EXEC sp_OAMethod @respXml, 'GetChildContent', @tokenValidityTo OUT, 'tokenValidityTo'
EXEC @hr = sp_OADestroy @crypt
EXEC @hr = sp_OADestroy @dtNow
EXEC @hr = sp_OADestroy @prng
EXEC @hr = sp_OADestroy @sbRequestId
EXEC @hr = sp_OADestroy @sbFinalHashBase
EXEC @hr = sp_OADestroy @xml
EXEC @hr = sp_OADestroy @http
EXEC @hr = sp_OADestroy @resp
EXEC @hr = sp_OADestroy @respXml
END
GO