Visual Basic 6.0
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
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)