lugo puedes generar el xml final y guardarlo como un archivo o usarlo como cadena
**ENVIAR PETICION HKA FACT FE VIA WS
**USANDO CHILKAT
**EJECUTA METODO DESCARGARREPGRAFICA en pdf
**GFC:2022-07-15
LOCAL loHttp
LOCAL lnSuccess
LOCAL loXml
LOCAL lcStrXml
LOCAL lnResponseStatusCode
LOCAL lcEndPoint
LOCAL loResp
LOCAL loXmlResp
SET SAFETY OFF
SET TALK OFF
s_LicenciaChilkat="xxxxxxxxxxxxxxxxxxxxxxxx"
CLEAR
**ACTIVA CHILKAT
Ck_Glob = CreateObject('Chilkat_9_5_0.Global') &&LIBRERIAS DE GESTION XML, HTTP, DIGSIGNATURES..
lnSuccess = Ck_Glob.UnlockBundle(s_licenciachilkat) &&VERSION 9.5.77 ABRIL 2019.04.22
IF (lnSuccess <> 1) THEN
WAIT WINDOW "LA LIBRERIA CHILKAT FE NO HA SIDO INSTALADA !!"
RELEASE Ck_Glob
RETURN
ENDIF
loHttp = CreateObject('Chilkat_9_5_0.Http')
**GENERAR XML O CARGAR DESDE ARCHIVO
loXml = CreateObject('Chilkat_9_5_0.Xml')
XFILEXML="E:\PLANTILLAS_XML\DESCARGARREPGRA.XML"
lnSuccess = loXml.LoadXmlFile(XFILEXML)
IF lnsuccess=1
C_IDEMISOR="3793242"
C_DOCUMENTO="HEFE648"
C_TOKENEMPRESA="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
C_TOKENPWD="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
C_TIPOIDEMISOR="31"
loXml.UpdateChildContent("soapenv:Header","")
loXml.UpdateChildContent("soapenv:Body|tem:DescargarRepGrafica|tem:request|wcf:identificadorEmisor",C_IDEMISOR)
loXml.UpdateChildContent("soapenv:Body|tem:DescargarRepGrafica|tem:request|wcf:numeroDocumento",C_DOCUMENTO)
loXml.UpdateChildContent("soapenv:Body|tem:DescargarRepGrafica|tem:request|wcf:tipoIdentificacionemisor",C_TIPOIDEMISOR)
loXml.UpdateChildContent("soapenv:Body|tem:DescargarRepGrafica|tem:request|wcf:tokenEmpresa",C_TOKENEMPRESA)
loXml.UpdateChildContent("soapenv:Body|tem:DescargarRepGrafica|tem:request|wcf:tokenPassword",C_TOKENPWD)
**ARMA XML DE PETICION CUANDO ES EN MEMORIA...
*lcStrXml = ARMAXML() && ver abajo funcion
lcStrXml=loXml.getXML()
* We'll need to add this in the HTTP header:
loHttp.SetRequestHeader("SOAPAction","
http://tempuri.org/IReceptorWS/DescargarRepGrafica")
loHttp.SetRequestHeader("Content-Type","text/xml; charset=UTF-8")
* The endpoint for this soap service is:
lcEndPoint = "
https://recepcion21.thefactoryhka.com.co/ReceptorWS.svc"
loResp = loHttp.PostXml(lcEndPoint,lcStrXml,"utf-8")
IF ISNULL(LORESP) && ERROR EN LA PETICION
?"ERROR EN PETICION REVISE ERROR"
ENDIF
IF (loHttp.LastMethodSuccess <> 1) THEN
*? loHttp.LastErrorText
*? "LastHeader:"
XERROR=STREXTRACT(loHttp.LastErrorXML,"<SocketError>","</SocketError>")
WAIT WINDOW "ERROR: "+XERROR
*? loHttp.LastHeader
RELEASE loHttp
RELEASE loXml
CANCEL
ENDIF
lnResponseStatusCode = loResp.StatusCode
* You may wish to verify that the responseStatusCode equals 200...
? "Response Status Code: " + STR(lnResponseStatusCode)
* You may examine the exact HTTP header sent with the POST like this:
? "LastHeader:"
? loHttp.LastHeader
* Examine the XML returned by the web service:
? "XML Response:"
loXmlResp = CreateObject('Chilkat_9_5_0.Xml')
loXmlResp.LoadXml(loResp.BodyStr)
C_XML=loXmlResp.GetXml()
XX_XML=STREXTRACT(C_XML,"<a:archivo>","</a:archivo>")
*DECODIFICA DE BASE64 EL XML
loBd2 = CreateObject('Chilkat_9_5_0.BinData')
loBd2.AppendEncoded(XX_XML,"base64")
lcDecoded = loBd2.GetString("utf-8")
loBd2.WRITEFILE("REPGRA.PDF")
**EXTRAE LA PORCION INVOICE DEL XML
*cinvoice=STREXTRACT(lcdecoded,"<Invoice ","</Invoice>",1,4) && EXTRAE NODO INVOICE inlcuye los tags
*ESCRIBE A UN ARCHIVO EL XML
*STRTOFILE(cinvoice,"invoice.xml")
ELSE
WAIT WINDOW "ERROR AL CARGAR XML: "+XFILEXML TIMEOUT 4
ENDIF
RELEASE loResp
RELEASE loHttp
RELEASE loXml
RELEASE loXmlResp
RETURN
PROCEDURE ARMAXML
PRIVATE ls_xml
**ARMA CADENA DE LA PETICION XML
C_IDEMISOR="3793242"
C_DOCUMENTO="HEFE648"
C_TOKENEMPRESA="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
C_TOKENPWD="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
C_TIPOID="31"
TEXT TO ls_xml TEXTMERGE NOSHOW PRETEXT 0015 FLAGS 1
<soapenv:Envelope xmlns:soapenv="
http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="
http://tempuri.org/" xmlns:wcf="
http://schemas.datacontract.org/2004/07/WcfRecepcionSOAP">
<soapenv:Header/>
<soapenv:Body>
<tem:DescargarXML>
<!--Optional:-->
<tem:request>
<!--Nit del emisor segun tipoIdentifcadorEmisor a consultar: -->
<wcf:identificadorEmisor><<C_IDEMISOR>></wcf:identificadorEmisor>
<!--Número de documento a consultar:-->
<wcf:numeroDocumento><<C_DOCUMENTO>></wcf:numeroDocumento>
<!--Tipo de documento segun tabla de codigo de tipo identidad
tipoIdentificador Emisor:-->
<wcf:tipoIdentificacionemisor><<C_TIPOID>></wcf:tipoIdentificacionemisor>
<!--Token receptor:-->
<wcf:tokenEmpresa><<C_TOKENEMPRESA>></wcf:tokenEmpresa>
<!--Token receptor:-->
<wcf:tokenPassword><<C_TOKENPWD>></wcf:tokenPassword>
</tem:request>
</tem:DescargarXML>
</soapenv:Body>
</soapenv:Envelope>
ENDTEXT
RETURN ls_xml