Sample code for 30+ languages & platforms
Visual Basic 6.0

Create SOAP with multiple VeriFactu Digitally Signed Registration Records

See more Verifactu Examples

Creates a SOAP message containing a multiple digitally signed invoice registration records, formatted according to the specifications for Spain's Veri*Factu system.

Chilkat Visual Basic 6.0 Downloads

Visual Basic 6.0
Dim success As Long
success = 0

success = 1

' Begin with the following SOAP XML:

' <?xml version="1.0" encoding="utf-8"?>
' <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sum="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroLR.xsd" xmlns:sum1="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd" xmlns:xd="http://www.w3.org/2000/09/xmldsig#">
'     <soapenv:Header/>
'     <soapenv:Body>
'         <sum:RegFactuSistemaFacturacion>
'             <sum:Cabecera>
'                 <sum1:ObligadoEmision>
'                     <sum1:NombreRazon>XYZ STORE SL</sum1:NombreRazon>
'                     <sum1:NIF>B99999999</sum1:NIF>
'                 </sum1:ObligadoEmision>
'                 <sum1:RemisionRequerimiento>
'                     <sum1:RefRequerimiento>3333333333</sum1:RefRequerimiento>
'                     <sum1:FinRequerimiento>S</sum1:FinRequerimiento>
'                 </sum1:RemisionRequerimiento>
'             </sum:Cabecera>
' 
'         </sum:RegFactuSistemaFacturacion>
'     </soapenv:Body>
' </soapenv:Envelope>

Dim xml As New ChilkatXml
xml.Tag = "soapenv:Envelope"
success = xml.AddAttribute("xmlns:soapenv","http://schemas.xmlsoap.org/soap/envelope/")
success = xml.AddAttribute("xmlns:sum","https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroLR.xsd")
success = xml.AddAttribute("xmlns:sum1","https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd")
success = xml.AddAttribute("xmlns:xd","http://www.w3.org/2000/09/xmldsig#")
xml.UpdateChildContent "soapenv:Header",""
xml.UpdateChildContent "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:Cabecera|sum1:ObligadoEmision|sum1:NombreRazon","XYZ STORE SL"
xml.UpdateChildContent "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:Cabecera|sum1:ObligadoEmision|sum1:NIF","B99999999"
xml.UpdateChildContent "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:Cabecera|sum1:RemisionRequerimiento|sum1:RefRequerimiento","3333333333"
xml.UpdateChildContent "soapenv:Body|sum:RegFactuSistemaFacturacion|sum:Cabecera|sum1:RemisionRequerimiento|sum1:FinRequerimiento","S"

' Prior to this code, we created N signed SOAP messages, each containing a single signed record.
' Load each of these signed SOAP messages into a StringBuilder and insert after the "</sum:Cabecera>"
' Note: We must NOT use Chilkat.Xml for this.  We must do string operations using Chilkat StringBuilder to prevent whitespace or formatting modifications which would break the signatures.

Dim sbXml As New ChilkatStringBuilder
success = xml.GetXmlSb(sbXml)

' ---------------------------------------------------------------------------------------------
' Load the previously signed XML containing just one signed record.
Dim sbSignedSoap As New ChilkatStringBuilder
success = sbSignedSoap.LoadFile("c:/temp/qa_output/signedSoapXml1.xml","utf-8")
If (success = 0) Then
    Debug.Print sbSignedSoap.LastErrorText
    Exit Sub
End If

' Remove everything before "</sum:Cabecera>", including the "</sum:Cabecera>"
success = sbSignedSoap.RemoveBefore("</sum:Cabecera>")

' Remove everything after the "</sum:RegFactuSistemaFacturacion>", including the "</sum:RegFactuSistemaFacturacion>"
success = sbSignedSoap.RemoveAfterFinal("</sum:RegFactuSistemaFacturacion>")

' We now have the portion of the signed SOAP xml from <sum:RegistroFactura> to </sum:RegistroFactura>
' Insert it after the </sum:Cabecera>
success = sbSignedSoap.Prepend("</sum:Cabecera>")
success = sbXml.ReplaceFirst("</sum:Cabecera>",sbSignedSoap.GetAsString())

' ---------------------------------------------------------------------------------------------
' Add the next signed SOAP containing a single signed record.
success = sbSignedSoap.LoadFile("c:/temp/qa_output/signedSoapXml2.xml","utf-8")
If (success = 0) Then
    Debug.Print sbSignedSoap.LastErrorText
    Exit Sub
End If

' Remove everything before "</sum:Cabecera>", including the "</sum:Cabecera>"
success = sbSignedSoap.RemoveBefore("</sum:Cabecera>")

' Remove everything after the "</sum:RegFactuSistemaFacturacion>", including the "</sum:RegFactuSistemaFacturacion>"
success = sbSignedSoap.RemoveAfterFinal("</sum:RegFactuSistemaFacturacion>")

' We now have the portion of the signed SOAP xml from <sum:RegistroFactura> to </sum:RegistroFactura>
' Insert it after the </sum:Cabecera>
success = sbSignedSoap.Prepend("</sum:Cabecera>")
success = sbXml.ReplaceFirst("</sum:Cabecera>",sbSignedSoap.GetAsString())

' ---------------------------------------------------------------------------------------------
' Continue adding more signed records if needed.

' Save the SOAP containing multiple signed records..
success = sbXml.WriteFile("c:/temp/qa_output/soap_combined.xml","utf-8",0)