Crear DLL para timbrar CFDI con Finkok en Visual Fox Pro 9

1,984 views
Skip to first unread message

Dave

unread,
Sep 5, 2013, 4:10:41 PM9/5/13
to vfp-factura-ele...@googlegroups.com
Hola amigos, hice el timbrado en VB.net con finkok, pero tengo la necesidad de hacerlo en VFP9 tambien, he intentado de varias formas y como nunca habia tocado este lenguaje no me ha sido posible timbrar exitosamente.

Como otra alternativa hice una DLL en VB.net para usarla en VFP, es para puro timbrado, pero no logro poder usarla en VFP, haber si alguien de ustedes puede echarme un cable ya que mis bajos conocimientos de este lenguaje no me ha permitido terminar el timbrado.

Adjunto el archivo DLL en busca de ayuda para utilizarlo en VFP, adicionalmente dejo el codigo que intente usar en VFP usando un boton.

mydll = "C:\Users\Cyborg\Desktop\dlltimbradoV1.dll"
DECLARE STRING timbrar IN mydll string, string, string
DIMENSION timbre(8) as String
username = "finkok username"
pas = "finkok password"
XMLfile = FILETOSTR('C:\factura.xml')
timbre = timbrar(username, pas, XMLfile)
CLEAR DLLS

La DLL recibe 3 paramentros, usuario, password y archivo xml y regresa un arreglo string con 8 valores:
  • xml - optional, nillable; type string
  • UUID - optional, nillable; type string
  • faultstring - optional, nillable; type string
  • Fecha - optional, nillable; type string
  • CodEstatus - optional, nillable; type string
  • faultcode - optional, nillable; type string
  • SatSeal - optional, nillable; type string
  • NoCertificadoSAT - optional, nillable; type string

Nota: el archivo XML no necesita codificarse en base64 ya que la DLL lo hace.

Si alguien puede indicarme el camino y denotar mis errores en el codigo, por favor seria de mucha ayuda, tambien si es recomendable cambiar la DLL por favor haganmelo saber.

Saludos.

dlltimbradoV1.zip

Dave

unread,
Sep 14, 2013, 12:36:08 PM9/14/13
to vfp-factura-ele...@googlegroups.com
Hola Amigos.

Despues de tantos intentos pude conseguir la forma de timbrar con Finkok, me base en un tutorial hecho por Baltazar Moreno, Espero les pueda servir a alguno de ustedes.

*!*Cargamos el archivo XML version 3.2

XMLfile = FILETOSTR('C:\factura.xml')
*!*Codificamos a base64 el XML
XMLfile = STRCONV(XMLfile,13)
uss = "Finkok User"
pas = "Finkok Password"
oWS = CREATEOBJECT("VFP_WebService","http://demo-facturacion.finkok.com/servicios/soap/stamp.wsdl")
lcRespuesta = oWS.GetStamp(uss, pas, XMLfile)
IF oWS.iStatus != 0
    MESSAGEBOX(oWS.sError,16,"Error al ejecutar WS")
ELSE
    MESSAGEBOX(lcRespuesta,64,"EjecutandoWS desde VFP - PortalFOX")
ENDIF

*
*

DEFINE CLASS VFP_WebService as Custom

    * --- Definimos las propiedades ---
     sError = ""
     iStatus = 0
     sURL_WS = ""
     
    * --- Definimos la funcion del WebService ---
    FUNCTION GetStamp(us, pas, xml)
        * --- Paso 1. Creo el XML Request ---
        sXMLRequest = this.CreateRequest(us, pas, xml)
        pXMLResponse = ADDBS(SYS(2023)) + SYS(2015) + [.xml]
       
        * --- Paso 2. Ejecuto el WS | Paso 3. Obtengo el Response ---
        this.iStatus = this.EjecutaWS(this.sURL_WS,sXMLRequest, pXMLResponse)
        IF this.iStatus != 0 && Ocurrio un error el cual esta especificado en sError.
            RETURN ""
        ENDIF
       
        sXMLResponse = FILETOSTR(pxMLResponse)
       
        this.borraArchivo(pXMLResponse)
       
        RETURN sXMLResponse
       
    ENDFUNC

    FUNCTION EjecutaWS(pURL_WSDL,pFileRequest, pFileResponse)
        TRY
            oHTTP = CREATEOBJECT('Msxml2.ServerXMLHTTP.6.0')
            oHTTP.OPEN("POST",pURL_WSDL, .F.)
            oHTTP.setRequestHeader("User-Agent", "EjecutandoWS desde VFP - PortalFOX")
            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."
             this.iStatus = -1
                RETURN -1
         ENDIF
    ENDFUNC

    FUNCTION CreateRequest(us, pas, xml)
        TEXT TO sXMLRequest TEXTMERGE NOSHOW
            <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:stam="http://facturacion.finkok.com/stamp">
               <soapenv:Header/>
               <soapenv:Body>
                  <stam:stamp>
                     <stam:xml><<xml>></stam:xml>
                     <stam:username><<us>></stam:username>
                     <stam:password><<pas>></stam:password>
                  </stam:stamp>
               </soapenv:Body>
            </soapenv:Envelope>
    ENDTEXT
        RETURN sXMLRequest
    ENDFUNC

    FUNCTION BorraArchivo(pFile)
        IF FILE(pFile)
            DELETE FILE(pFile)
        ENDIF
    ENDFUNC

    PROCEDURE Init
        LPARAMETERS tcURLWS
            this.sURL_WS = tcURLWS
            this.iStatus = 0
            this.sError = ""
    ENDPROC

ENDDEFINE

Rodolfo Ortiz González

unread,
Sep 14, 2013, 1:20:44 PM9/14/13
to vfp-factura-ele...@googlegroups.com
Felicidades, con esto podré avanzar más, estaba atorado viendo como timbrar pero no llegaba a ningún lado, un saludo!


--
Has recibido este mensaje porque estás suscrito al grupo "vfp-factura-electronica-mexico" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a vfp-factura-electroni...@googlegroups.com.
Para publicar una entrada en este grupo, envía un correo electrónico a vfp-factura-ele...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/vfp-factura-electronica-mexico.
Para obtener más opciones, visita https://groups.google.com/groups/opt_out.

japama

unread,
Sep 17, 2013, 7:38:21 PM9/17/13
to vfp-factura-ele...@googlegroups.com
Muchas gracias por la rutina, hice una prueba pero me manda el mensaje que adjunto y no me timbra el xml, la función la puse después de generar el XML:

oCFD.CrearXML(ArchivoXml)

XMLfile = FILETOSTR(ArchivoXml)
*!*Codificamos a base64 el XML
XMLfile = STRCONV(XMLfile,13) 
uss = "Finkok User"
pas = "Finkok Password"
lcRespuesta = oWS.GetStamp(uss, pas, XMLfile)
IF oWS.iStatus != 0
    MESSAGEBOX(oWS.sError,16,"Error al ejecutar WS")
ELSE
    MESSAGEBOX(lcRespuesta,64,"EjecutandoWS desde VFP - PortalFOX")
ENDIF

Alguien sabe que es lo que tengo mal?

Muchas gracias por su apoyo
error.JPG

Mario Alberto Ruiz Reyes

unread,
Sep 17, 2013, 8:17:03 PM9/17/13
to vfp-factura-ele...@googlegroups.com

Buenas noches a todos

El error 300 en los incidentes es por el usuario y contraseña incorrecta, los que pusieron en el ejemplo no son validos,

Tienes que darte de alta en

http://demo-facturacion.finkok.com/cuentas/registrar/?upr=S

o mandale un correo a alfredo  aherrejon at finkok.com

Saludos

--

Carlos Medina

unread,
Sep 17, 2013, 11:31:31 PM9/17/13
to vfp-factura-ele...@googlegroups.com
Hola Cybgho: a mi también me da el mismo error y si me registré y activé la cuenta; lo que veo es que hay un proceso de encriptación (

openssl rsa -in RFC.key -des3 -out RFC.enc.key -passout pass:'su contraseña') que  no aparece en el código de Dave

Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a vfp-factura-electronica-mexico+unsubscribe@googlegroups.com.
Para publicar una entrada en este grupo, envía un correo electrónico a vfp-factura-electronica-mex...@googlegroups.com.

Mario Alberto Ruiz Reyes

unread,
Sep 18, 2013, 9:58:39 AM9/18/13
to vfp-factura-ele...@googlegroups.com

Hola buenos días

El encritado es para la cancelación

Hice una prueba y si me funciono, estas mandando el xml en base64?

Ahorita me sale que no hay respuesta del sat pero finkok si timbra

 

<s0:UUID>245EE74F-64F8-4A63-BBF9-B6ADB0D46E07</s0:UUID>

            <s0:faultstring>Could not connect to SAT Server</s0:faultstring>

            <s0:Fecha>2013-09-18T08:55:21</s0:Fecha>

            <s0:CodEstatus>Comprobante timbrado satisfactoriamente</s0:CodEstatus>

            <s0:faultcode>Could not connect to SAT Server</s0:faultcode>

            <s0:SatSeal>Ba2IzM3+esdFV73kCUewWzYCYymv2+j1BWzTYowHhNjYy3kW99aazFhutAgYHGawQjLxvXvs4lrfw9jCWyzhDk6445wVA6ieYb2dE25sm6Jm8KMYGZLO43y+LsBwSGin5Z7H6bRdAUSSGzJYtfVA9CCtOdMjgGuYHuySeeOjoK8=</s0:SatSeal>

            <s0:Incidencias>

               <s0:Incidencia>

                  <s0:IdIncidencia>456</s0:IdIncidencia>

                  <s0:Uuid>245EE74F-64F8-4A63-BBF9-B6ADB0D46E07</s0:Uuid>

                  <s0:CodigoError>708</s0:CodigoError>

                  <s0:WorkProcessId>123</s0:WorkProcessId>

                  <s0:MensajeIncidencia>No se pudo conectar al Servidor del SAT</s0:MensajeIncidencia>

                  <s0:RfcEmisor>AAD990814BP7</s0:RfcEmisor>

                  <s0:NoCertificadoPac>123</s0:NoCertificadoPac>

                  <s0:FechaRegistro>2013-09-18 08:55:23</s0:FechaRegistro>

               </s0:Incidencia>

            </s0:Incidencias>

 

De: vfp-factura-ele...@googlegroups.com [mailto:vfp-factura-ele...@googlegroups.com] En nombre de Carlos Medina
Enviado el: martes, 17 de septiembre de 2013 10:32 p.m.
Para: vfp-factura-ele...@googlegroups.com
Asunto: Re: [vfp-fem] Re: Crear DLL para timbrar CFDI con Finkok en Visual Fox Pro 9

 

Hola Cybgho: a mi también me da el mismo error y si me registré y activé la cuenta; lo que veo es que hay un proceso de encriptación (

Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a vfp-factura-electroni...@googlegroups.com.
Para publicar una entrada en este grupo, envía un correo electrónico a vfp-factura-ele...@googlegroups.com.

--

Has recibido este mensaje porque estás suscrito al grupo "vfp-factura-electronica-mexico" de Grupos de Google.

Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a vfp-factura-electroni...@googlegroups.com.
Para publicar una entrada en este grupo, envía un correo electrónico a vfp-factura-ele...@googlegroups.com.

Carlos Medina

unread,
Sep 18, 2013, 4:42:16 PM9/18/13
to vfp-factura-ele...@googlegroups.com
Corrección; efectivamente, introduje la contraseña errónea a propósito para efectos de prueba; sin embargo al poner la correcta me envió el error de que no se había conseguido la conexión con el web service.

Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a vfp-factura-electronica-mexico+unsubscribe@googlegroups.com.
Para publicar una entrada en este grupo, envía un correo electrónico a vfp-factura-electronica-mex...@googlegroups.com.

--
Has recibido este mensaje porque estás suscrito al grupo "vfp-factura-electronica-mexico" de Grupos de Google.

Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a vfp-factura-electronica-mexico+unsubscribe@googlegroups.com.
Para publicar una entrada en este grupo, envía un correo electrónico a vfp-factura-electronica-mex...@googlegroups.com.

Carlos Medina

unread,
Sep 23, 2013, 5:59:40 AM9/23/13
to vfp-factura-ele...@googlegroups.com
Recapitulando: usando el código tal cual de Dave, no he conseguido la conexión con el web service (Error: no se logró la conexión con el Web Service); no se si es por alguna cuestión de configuración o falta de algún programa adicional; ya tengo instalado el MS Soap toolkit 3.0, ya registré en My XML Web Service las dos URL de timbrado y cancelación de Finkok, ya tengo el registro y activación para pruebas de Finkok.
El Internet Informacion Service (IIS), ´creo que se instala cuando se usa VFP como servidor.
¿Me hará falta algo mas?
Saludos.
Message has been deleted

Dave

unread,
Sep 24, 2013, 10:46:02 PM9/24/13
to vfp-factura-ele...@googlegroups.com
Seria de gran ayuda si nos indicas el error que encuentras, nosotros ya tenemos en produccion el codigo.

Te envio un saludo.

Carlos Medina

unread,
Sep 26, 2013, 11:15:57 AM9/26/13
to vfp-factura-ele...@googlegroups.com
En el código, hay una variable o campo que se llama oHTTP.STATUS que es igual a 500 y manda decir que no se logró la conección con el web service

Dave

unread,
Oct 1, 2013, 7:13:09 PM10/1/13
to vfp-factura-ele...@googlegroups.com
Hola Carlos.

Por favor sube el codigo tal cual lo tienes para que haga pruebas y ver si puedo ayudarte, perdona los tiempos muertos pero estamos un poco atareados, pero con gusto tratare de ayudarte.

Saludos,

Carlos Medina

unread,
Oct 1, 2013, 11:28:02 PM10/1/13
to vfp-factura-ele...@googlegroups.com
Aquí está.
Gracias y saludos.
dave_dll.RAR

Héctor Lima

unread,
Dec 30, 2013, 10:12:54 PM12/30/13
to vfp-factura-ele...@googlegroups.com
Bueno, quizá un poco tarde, pero me pasó lo mismo y es por que utilicé el & como parte de la contraseña, y es un carácter reservado de vfox.
Reply all
Reply to author
Forward
0 new messages