Sample code for 30+ languages & platforms
Lua

PEPPOL Document Validation

See more HTTP Misc Examples

Demonstrates how to call a Web service to validate your PEPPOL documents according to the latest PEPPOL rules. The validation service requires UBL files.

Chilkat Lua Downloads

Lua
local chilkat = require("chilkat")

-- This example assumes the Chilkat HTTP API to have been previously unlocked.
-- See Global Unlock Sample for sample code.

-- --------------------------------------------------------------------------------
-- Also see Chilkat's Online WSDL Code Generator
-- to generate code and SOAP Request and Response XML for each operation in a WSDL.
-- --------------------------------------------------------------------------------

local http = chilkat.Http.new()

-- We are sending the following POST:

-- POST /wsdvs HTTP/1.1
-- Host: peppol.helger.com
-- Content-Type: application/soap+xml; charset=utf-8
-- Content-Length: <length>
--
-- <?xml version="1.0"?>
-- <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
-- <S:Body>
-- <validateRequestInput xmlns="http://peppol.helger.com/ws/documentvalidationservice/201701/" VESID="eu.peppol.bis2:t10:3.3.0" displayLocale="en">
-- <XML>...ENTITY_ENCODED_INVOICE_XML_GOES_HERE...</XML>
-- </validateRequestInput>
-- </S:Body>
-- </S:Envelope>

-- Build the SOAP XML shown above.
-- First load the PEPPOL invoice that will be the data contained in the <XML>...</XML> SOAP element.
-- We are using the XML invoice obtained from https://github.com/austriapro/ebinterface-standards/blob/master/schemas/ebInterface5p0/samples/ebinterface_5p0_sample_ecosio.xml
local sbPeppolInvoiceXml = chilkat.StringBuilder.new()
local success = sbPeppolInvoiceXml:load_file("qa_data/xml/peppol_invoice.xml", "utf-8")

local xml = chilkat.Xml.new()
xml.tag = "S:Envelope"
xml:add_attribute("xmlns:S", "http://schemas.xmlsoap.org/soap/envelope/")
xml:update_attr_at("S:Body|validateRequestInput", true, "xmlns", "http://peppol.helger.com/ws/documentvalidationservice/201701/")
xml:update_attr_at("S:Body|validateRequestInput", true, "VESID", "at.ebinterface:invoice:5.0")
xml:update_attr_at("S:Body|validateRequestInput", true, "displayLocale", "en")
xml:update_child_content("S:Body|validateRequestInput|XML", sbPeppolInvoiceXml:get_as_string())

-- We don't need to specify the Content-Length or Host headers.  Chilkat automatically adds them.

-- Send the request...
local resp = chilkat.HttpResponse.new()
success = http:http_str("POST", "https://peppol.helger.com/wsdvs", xml:get_xml(), "utf-8", "text/xml", resp)
if not success then
    print(http.last_error_text)
    return
end

print("Response Status Code = " .. resp.status_code)

local respXml = chilkat.Xml.new()
respXml:load_xml(resp.body_str)

print("Response XML:")
print(respXml:get_xml())

-- A success repsonse looks like this:

-- <?xml version="1.0" encoding="UTF-8"?>
-- <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
--     <S:Body>
--         <validateResponseOutput xmlns="http://peppol.helger.com/ws/documentvalidationservice/201701/" success="true" interrupted="false" mostSevereErrorLevel="SUCCESS">
--             <Result success="true" artifactType="xsd" artifactPath="/schemas/ebinterface/ebinterface-5.0.xsd"/>
--         </validateResponseOutput>
--     </S:Body>
-- </S:Envelope>