Posts Tagged 'Desarrollo'

SII (Suministro Inmediato de Información) en Visual FoxPro sin morir en el intento

Esto estaba ya casi abandonado, pero añado un post explicando mis vicisitudes en el trabajo conectando con los servicios web de Hacienda para remitir el SII (Suministro Inmediato de Información) por si a alguien está en la misma situación de desespero y mis avances en el tema le resultan útiles, aunque no creo que quede ya nadie en la misma situación: en las empresas normales esto se resolvió hace meses, pero en mi empresa somos tan chulos que dejamos esto para una semana antes de entrar en vigor.

La situación es la siguiente: aplicación de gestión desarrollada en Visual FoxPro, por lo que nuestra intención es hacerlo también en VFP. La generación de XMLs no supone ningún problema, ya me he pegado antes con ellos en el índice único de ANCERT, los hacemos a mano (mejor dicho a martillo), y aunque es un trabajo costoso y sufrido no supone mayor problema. El tema de realizar la conexión segura y envío a los servicios web de Hacienda ya es otra historia, no es una técnica que usemos habitualmente más allá de conexiones simples como las del Catastro, y la de Hacienda, con certificados seguros mediante, dista mucho de ser simple.

Los primeros intentos fueron infructuosos y por más que buscamos información no conseguimos resolverlo. Intentamos resolverlo de forma nativa en VFP mediante _ws3client.vcx (la forma nativa que tiene VFP para tratar con los web services) y también con MSSOAP.SoapClient30, las dos funcionaban parcialmente pero se atascaban a la hora procesar el certificado seguro, y por más que buscamos y probamos cosas –y creedme, busqué y probé de TODO– no conseguimos pasar de ahí. Incluso me lancé de forma desesperada a una solución híbrida en Visual Basic .net, generando los XML en Fox, enviándolos con el bridge .net y procesando la respuesta de nuevo con Fox, pero las prisas y desarrollar algo en una herramienta que no es la habitual no es la mejor combinación.

Al final y casi de casualidad lo intenté mediante una conexión simple HTTP (la forma más sencilla y clásica de consumir servicios web) y funcionó sin muchos problemas y desde Fox, quedando además el código resultante en unas ridículas cuatro líneas (quitando todas las validaciones y controles adicionales, claro). A continuación dejo el código simplificado y detalles técnicos por si a alguien les resulta útil:

Lo primero es generar los XML, como he dicho anteriormente lo hacemos a mano mediante:

set console off
set talk off
set textmerge on to memvar xmltmp NOSHOW
*...
set textmerge to

*Conversión UTF-8
xmltmp =STRCONV(xmltmp,9)

Después de eso iniciamos la conexión al web service. Las conexiones HTTP no entienden de namesservices ni de bindingports, así que lo que hago es abrir el .wsdl del servicio que queremos enviar (los siete disponibles están en el anexo I del manual de Hacienda, o aquí), y extraigo la dirección de los servicios a llamar que se encuentran al final en el tag <wsdl:service name=”siiService”>. Tener en cuenta que hay direcciones para producción y para pruebas, por lo que habrá que tratar las dos como corresponda.


IF UPPER(thisform.cmbModo.displayValue)="PRUEBAS"
sEndPoint="https://www7.aeat.es/wlpl/SSII-FACT/ws/fe/SiiFactFEV1SOAP"
ELSE
sEndPoint="https://www1.agenciatributaria.gob.es/wlpl/SSII-FACT/ws/fe/SiiFactFEV1SOAP"
endif

IF TYPE("oHTTP")#"O"
oHTTP=createobject("winhttp.winhttprequest.5.1")
endif
oHTTP.Open("POST", sEndPoint, .F.)

*Elegir Certificado, el common name del certificado se puede sacar de la ventana de certificados de opciones de internet, o mediante comando en la powershell: dir cert:\currentuser\my
*El nombre a sacar viene identificado como CN en algúno de los elementos de la pestaña detalles del certificado
*Debe ser un certificado válido, vigente y dado de alta en Hacienda
oHTTP.SetClientCertificate("CURRENT_USER\My\"+ALLTRIM(emp.cncertif))

ohttp.Send(xmlFraE) && El XML generado junto con las cabeceras y cierres finales

XMLRespuesta=ohttp.ResponseText

*Procesar la respuesta
*...

Y básicamente eso es todo, por supuesto queda todo el tema de la generación, encadenación de distintos servicios (no entiendo muy bien por qué no han definido un único esquema para todos los casos), pero la parte de comunicar con el web service se reduce a eso.

Y para finalizar una cita del entrañable Necronomicón aparentemente dirigida a Visual Fox Pro: “Que no está muerto lo que yace eternamente, y con los eones extraños incluso la muerte puede morir”.


Flashbacks

RSS Últimos temas escuchados

  • Se ha producido un error; es probable que la fuente esté fuera de servicio. Vuelve a intentarlo más tarde.

Licencia

Creative Commons License


Esta obra está bajo una licencia de Creative Commons.

Member of The Internet Defense League