oWS = CREATEOBJECT("ws_sri")
IF ENCFST.eDocAmbi=1
ELSE
ENDIF
oWS.cRutafirmado = THISFORM.efactura1001.cDirFirmados+'\'+ENCFST.eDocClave+'.XML'
oWS.cRutaRespuesta = THISFORM.efactura1001.cDirFirmados+'\'+ENCFST.eDocClave+'_Rta.XML'
lcRespuesta = oWS.Enviar_comprobante()
IF oWS.iStatus != 0
MESSAGEBOX(oWS.sError,16,"Error al ejecutar WS")
ELSE
MESSAGEBOX(lcRespuesta,64,"EjecutandoWS desde VFP - PortalFOX")
ENDIF
**************************************************
*-- Class: ws_sri (c:\omega\fuentes\clases\efactura.vcx)
*-- ParentClass: custom
*-- BaseClass: custom
*-- Time Stamp: 09/26/19 01:00:07 AM
*
DEFINE CLASS ws_sri AS custom
Height = 22
Width = 138
*-- String que contiene un error
serror = ""
*-- Estado de respuesta
istatus = 0
*-- URL del WS al que se quiere comunicar.
surl_ws = ""
*-- Ruta y nombre del archivo de Respuesta.
crutarespuesta = ""
*-- Ruta y Nombre del archivo donde esta el archivo firmado que se va ha enviar.
crutafirmado = ""
Name = "ws_sri"
*-- Envía un comprobante firmado en formato XML.
PROCEDURE enviar_comprobante
* --- Paso 1. Creo el XML Request ---
*Llamada a EnviarComprobante, en base64
cXMLTo2Byte = STRCONV(FILETOSTR(THIS.cRutaFirmado),11)
cByteToBase64 = STRCONV(STRCONV(cXMLTo2Byte,2),13)
sXMLRequest = this.Crearrequest_comprobante(cByteToBase64) && Crear estructura SOAP de para Requerimiento de Envio de documento Firmado
pXMLResponse = THIS.cRutaRespuesta && Establecer la Ruta y nombre del archivo donde se depositará la respuesta
* --- Paso 2. Ejecuto el WS | Paso 3. Obtengo el Response ---
this.iStatus = this.Enviar( this.sURL_WS, sXMLRequest , pXMLResponse )
IF this.iStatus != 0 && Ocurrió un error el cual está especificado en sError.
RETURN ""
ENDIF
sXMLResponse = FILETOSTR(pXMLResponse)
RETURN sRespuestaWS
ENDPROC
*-- Envía (ejecuta) un request al WS del SRI.
PROCEDURE enviar
LPARAMETERS pURL_WSDL, pFileRequest , pFileResponse
*---------------------------------------------------
TRY
oHTTP = CREATEOBJECT('winhttp.winhttprequest.5.1')
oHTTP.OPEN("POST", pURL_WSDL, .F.)
oHTTP.setRequestHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; MS Web Services Client Protocol 4.0.30319.17929)")
oHTTP.setRequestHeader("Content-Type", "text/xml;charset=utf-8")
oHTTP.SEND(pFileRequest)
CATCH TO loErr
this.sError = "Error: " + TRANSFORM(loErr.ErrorNo) + " Mensaje: " + loErr.Message
this.iStatus = -1
ENDTRY
IF this.iStatus != 0
RETURN -1
ENDIF
* --- Si el status es diferente a 200, ocurrió algún error de conectividad con el WS ---
IF oHTTP.STATUS = 200
RespuestaWS = oHTTP.responseText
* --- Se genera el XML del response | Este es el paso 3!! ---
STRTOFILE(STRCONV(RespuestaWS,9),pXMLResponse)
this.iStatus = 0
this.sError = ""
RETURN 0
ELSE
this.sError = "Error: No se logró la conexión con el Web Service."+STR(oHTTP.STATUS)+oHTTP.ResponseText
this.iStatus = -1
RETURN -1
ENDIF
ENDPROC
*-- Crea la estructura que debe tener un requerimiento (REQUEST) de un comprobante firmado del SRI.
PROCEDURE crearrequest_comprobante
LPARAMETERS vMensaje
TEXT TO sXMLRequest TEXTMERGE NOSHOW PRETEXT 7
<?xml version="1.0" encoding="utf-8"?>
<soap:Body>
<xml xmlns=""><<vMensaje>></xml>
</validarComprobante>
</soap:Body>
</soap:Envelope>
ENDTEXT
RETURN sXMLRequest
ENDPROC
*-- Elimina archivo de Respuesta.
PROCEDURE eliminararchivo
LPARAMETERS pFile
IF FILE(pFile)
DELETE FILE (pFile)
ENDIF
ENDPROC
*-- Crea la estructura que debe tener un requerimiento (REQUEST) de una consulta del estado de la autorización.
PROCEDURE crearrequest_autorizacion
LPARAMETERS vMensaje
TEXT TO sXMLRequest TEXTMERGE NOSHOW PRETEXT 7
<?xml version="1.0" encoding="utf-8"?>
<soap:Body>
<claveAccesoComprobante xmlns=""><<vMensaje>></claveAccesoComprobante>
</autorizacionComprobante>
</soap:Body>
</soap:Envelope>
ENDTEXT
RETURN sXMLRequest
ENDPROC
PROCEDURE Init
LPARAMETERS tcURLWS
this.sURL_WS = tcURLWS
this.iStatus = 0
this.sError = ""
ENDPROC
ENDDEFINE
*
*-- EndDefine: ws_sri
**************************************************