Estimados compañeros.Ya logre loguearme en el Servicio web de tributacion con codigo puro de VFP.Nada mas necesito depurar un poco el codigo. Y lo estare compartiendo.Necesito que algunos de ustedes vayan creando las estructuras de los XLM que se necesitan que eso no es tan dificil en VFOX y obviamente que se comprometan a compartir el codigo.Necesito que me apoyen para poder llevar a cabo este proyecto. Del cual todos nos vamos a beneficiar.ATTEHernan Serrano M.
El 23 de diciembre de 2017, 19:24, Hernan Serrano <hernan.serrano.morales@gmail.com> escribió:Seguire intentanto.Si doy con la respuesta la publico. NO lo duden--El 23 de diciembre de 2017, 17:21, Geovanni Solís Perez <solis...@gmail.com> escribió:Compañero, yo tambien estoy detras de lo de hacienda, me parece que lo mas sencillo es conectar los ERP hechos en Visual Fox a plataformas de terceros. Eso estoy tratando de hacer yo.Saludos.Geovanni Solis--
Estimados amigos, Continuo con el progreso en este proyectos.Despues de lidiar con el tema de la Autenticación y Autorizacion.Estoy en el Armado de los XML.Esta parte es critica. Pues consta de:1. Creación del documento. (Según especificaciones de Hacienda)2. Su encriptación para ser enviado.3. Firmado del documento para que sea aceptado.Logrado lo anterior el proyecto estara avanzado casi completamente. Y es alli, en donde me permitire compartirlo.Ha sido un trabajo arduo, por que solo he tenido las noches para llevarlo a cabo. Pues si no trabajo, no como. Pero esto no es queja.Todo lo que cuesta al final, tiene su recompensa. Y para mi es la satisfacción de haber ayudado y devolver un poco lo que me han ayudado a mi.ATTEHErnan Serrano M.
El 15 de enero de 2018, 7:27, Hernan Serrano <hernan.serr...@gmail.com> escribió:
Estimados compañeros.Ya logre loguearme en el Servicio web de tributacion con codigo puro de VFP.Nada mas necesito depurar un poco el codigo. Y lo estare compartiendo.Necesito que algunos de ustedes vayan creando las estructuras de los XLM que se necesitan que eso no es tan dificil en VFOX y obviamente que se comprometan a compartir el codigo.Necesito que me apoyen para poder llevar a cabo este proyecto. Del cual todos nos vamos a beneficiar.ATTEHernan Serrano M.
El 23 de diciembre de 2017, 19:24, Hernan Serrano <hernan.serr...@gmail.com> escribió:Seguire intentanto.Si doy con la respuesta la publico. NO lo duden--El 23 de diciembre de 2017, 17:21, Geovanni Solís Perez <solis...@gmail.com> escribió:Compañero, yo tambien estoy detras de lo de hacienda, me parece que lo mas sencillo es conectar los ERP hechos en Visual Fox a plataformas de terceros. Eso estoy tratando de hacer yo.Saludos.Geovanni Solis--
O tal vez solo como configuran el envio al service web de hacienda. Yo tambien estoy haciendo pruebas, Y segun cambio el codigo me da uno u otro error.
Compañeros, ya logre el envio a Tributacion.Excepto que no me devuelve error. (Creo que es aceptacion.)Apenas depure el codigo lo comparto.ATTEHernan
El JSON, devuelto trae el mensaje. En este caso rechazado. Pero ahora hay que revisar para ver por que no lo esta aceptando. Tarea para hoy.
Saludos a todos, por aca me estoy integrando al grupo y los puedo apoyar con la resolución de dudas, ya yo logre realizar toda la facturación electrónica para Costa Rica enteramente en visual foxpro y usando openssl para calcular los digest de la firma, no les puedo entregar codigo fuente por razones laborales, sin embargo ya el codigo fuente que podia entregar se lo di al amigo hernan y vi que integro parte de el en la solución que publicó.
Les queda todavia un camino tortuoso, yo estuve mas 2 meses lidiando con esto y mi principal problema fue la la firma digital, lo cual es una pesadilla hacerla con foxpro, solo en la firma estuve casi mes y medio ya que Hacienda no ayuda para nada, ni se molesten en solicitar ayuda la documentación esta desactualizada y no responden a los correos o los responden de mala gana.
De manera rápida los ayuda con el error de "rechazado" que estan teniendo ahora mismo, les informo que el error es por la firma digital, no importa lo que envien a hacienda simepre les va a responder "firma no válida", hasta tanto no logren hacer la firma de manera correcta no van a poder pasar de ahi, cuando ya hagan la firma válida y hacienda se las acepte es cuando apenas van a poder ver errores del XML como tal. Para poder ver el mensaje de error decodificar el base 64 que viene en el campo respuesta-xml del json, al decodificarlo obtienen el xml de respuesta de hacienda donde les dice el motivo por el cual fue rechazado, por ahora siempre van a ver "firma no válida" y tampoco les va a decir porque no es valida la firma, tienen que hacerla correctamente sin ayuda de ningun tipo por parte de hacienda.
Tenemos modulo de clase en php y foxpro para elaborar la firma electrónica digital XAdES-EPES para Costa Rica, que es la parte más difícil. Si estan interesados, podemos negociar. Ambas clases no requieren ningun tipo de libreria externa, estan echas 100% en PHP y FoxPro, la del foxpro solo requiere el archivo openssl.exe para calcular los digest de la firma.
El orden de los pasos serian:
1- Construccion del XML original.
2- Construccion de la Firma, ojo con la canonicalización es muy tediosa, sobre todo con la herencia de los espacios de nombre de los nodos a los que se les calcula digest. Ojo tambien con los saltos de linea e indentación, es preferible hacerla todo el texto junto sin saltos de linea ni indentación.
3- Inserción de la firma dentro del XML original, va al final, justo antes del cierre del nodo facturacionelectronica.
4-Conversión de todo el XML con firma a Base 64, olvidense de la parte de pasar a binario, el string de vfp ya es una array de bytes, solo tienen que convertir a base64 la variable que contiene el string del XML.
5-Construcción del JSON de recepcion, incluyendo el base64 en el nodo comprobanteXml.
6-Envio del JSon a Hacienda.
7-Recepcion de la Respuesta de Hacienda.
Si, el elefante blanco de todo este proceso es la firma, en mi caso yo la hice enteramente en foxpro, pero me ayude con la libreria, aplicando un analisis en reversa de una firma válida generada con dicha libreria pude deducir los pasos que tenia que realizar en foxpro para generar mi firma igual a esa, tuve que hacer todos los pasos de forma manual, canonicalización, calculo de digests, manejo del certificado, etc, si usan libreria es mucho mas facil, yo no quize usar libreria para no tener que incluir dependencias de .net en nuestros instaladores ya que nuestro software debe ser de facil instalacion para el cliente tipo "hagalo usted mismo" y tener que estar lidiando con el .net framework, que si esta instalado, que si no esta, que si es la version correcta, etc, no es factible para nosotros.
El orden de los pasos serian:
1- Construccion del XML original.
2- Construccion de la Firma, ojo con la canonicalización es muy tediosa, sobre todo con la herencia de los espacios de nombre de los nodos a los que se les calcula digest. Ojo tambien con los saltos de linea e indentación, es preferible hacerla todo el texto junto sin saltos de linea ni indentación.
3- Inserción de la firma dentro del XML original, va al final, justo antes del cierre del nodo facturacionelectronica.
4-Conversión de todo el XML con firma a Base 64, olvidense de la parte de pasar a binario, el string de vfp ya es una array de bytes, solo tienen que convertir a base64 la variable que contiene el string del XML.
5-Construcción del JSON de recepcion, incluyendo el base64 en el nodo comprobanteXml.
6-Envio del JSon a Hacienda.
7-Recepcion de la Respuesta de Hacienda.
El martes, 30 de enero de 2018, 21:35:25 (UTC-4), Hernan Serrano escribió:
Ronny S.Saludos Hernan he estado dandole seguimiento a tus correos, estoy empezando con esto de la Facturación Electrónica para mi aplicación, la gente de Delloite tiene una plataforma que ayuda a depurar los errores ya que segun me comentaron Tributación no da mucha inormación al respecto, si tienes alguna duda creo que me puedo apoyar en ellos en estos temas, me escribes a ronny...@hotmail.com si necesitas algun apoyo en temas de investigación y lo compartimos al foro.Saludos!
El 29 de enero de 2018, 7:28, Hernan Serrano <hernan.serr...@gmail.com> escribió:
El JSON, devuelto trae el mensaje. En este caso rechazado. Pero ahora hay que revisar para ver por que no lo esta aceptando. Tarea para hoy.
Saludos Sebastian, si me envias el JSON con el Base64 incrustado (tal como lo envias a hacienda) yo te lo puedo revisar y brindarte alguna ayuda.
Si hacienda te responde "Firma No Valida" hermano creame que es problema con la firma, si hubiese un problema con la transmision te da el error de ·Bad Request", yo lidie con esto casi 2 meses.
--
Saludos Sebastian, si me envias el JSON con el Base64 incrustado (tal como lo envias a hacienda) yo te lo puedo revisar y brindarte alguna ayuda.
Si hacienda te responde "Firma No Valida" hermano creame que es problema con la firma, si hubiese un problema con la transmision te da el error de ·Bad Request", yo lidie con esto casi 2 meses.
El miércoles, 31 de enero de 2018, 22:42:45 (UTC-4), Sebastian K escribió:
Buen día a todos.Consulta en especial para los intengrantes del grupo en Costa Rica. Como va el tema de factura electrónica? Ya lograron desarrollar en sus sistemas de Visual Fox las facturas electrónicas? He intentado averiguar desde hace varios días sobre estos temas pero me es dificil encontrar información valiosa y entender como hago o en donde para comprobar que los documentos generados por mi sistema son correctos y aprobados por Hacienda y que los formatos están bien? Esas y mas consultas, como ven estoy un poco perdido en este tema. Quién pueda guiarme un poco se lo agradezco.Saludos...
Otra cosa, me acabo de dar cuenta que tu base 64 esta mal construido, los caracteres "77u/" que estan al principio no van, debe empezar siempre con PD9..., pero esto es una caracteristica de foxpro, supongo que usaste strconv(), a mi tampoco me daba asi, y lo resolvi usando una funcion de la api de windows para convertir el base64.
Declare Integer CryptBinaryToString In Crypt32 String @pbBinary, Long cbBinary, Long dwFlags, String @pszString, Long @pcchString
Muchas gracias José,
Tengo una consulta, sucede que a la hora de realizar la conexión con hacienda envío como comprobanteXML lo siguiente:
Primer linea del adjuno PruebasFirma.txt
Pero todos los resultados que recibo son rechazados.
Y el error que me indica es el siguiente:
Segunda linea del adjuno PruebasFirma.txt
No sé si lo estoy firmando mal, o a la hora de convertir el xml en base64 falla, les ha pasado?
Adjunto un documento firmado.
Saludos Sebastian, mira, la firma que esta realizando no es correcta, te esta pasando lo mismo que me pasó a mi, que trate de hacer la firma tal como esta en la documentación de hacienda y resulta que esa firma no sirve, yo perdi un mes probando con ese formato de firma y nunca iba a llegar porque esta mala, haz la firma como la que publicó Hernan, solo con que corrije el detalle del base64, la firma de Hernan si es correcta, cuando las compares las dos te vas a dar cuenta de las grandes diferencias entre ambas, esta gente de hacienda de verdad que dan pena ajena en tener una documentación oficial de algo que no funciona.
en el xml
Les recuerdo que tengo lista una clase en foxpro que realiza la firma y otra en PHP puro, ya ayude hasta donde pude, de aqui para adelante podemos negociar, ya que veo que por parte de algunos el foro se va encaminando hacia alla despues de empezar solicitando todos ayuda gratuita.
Ojo, que todavia falta, no veo por ningun lado que alguien haya obtenido un estatus de "aceptado" con su respectiva respuesta firmada por hacienda, lo cual es el estatus final del proceso.
<CorreoElectronico>info@ticosfotcr.com</CorreoElectronico>
</Emisor><Receptor><Nombre>HERNAN SERRANO MORALES</Nombre><Identificacion><Tipo>01</Tipo><Numero>204280319</Numero></Identificacion><IdentificacionExtranjero></IdentificacionExtranjero><NombreComercial>HERNAN SERRANO MORALES</NombreComercial><Ubicacion><Provincia>2</Provincia><Canton>01</Canton><Distrito>01</Distrito><Barrio>01</Barrio><OtrasSenas>ALAJUELA,DESAMPARADOS,DESAMPARADOS</OtrasSenas></Ubicacion><Telefono><CodigoPais>506</CodigoPais><NumTelefono>88194369</NumTelefono></Telefono><Fax><CodigoPais>0</CodigoPais><NumTelefono>0</NumTelefono></Fax>
<CorreoElectronico>hserrano@costarricense.cr</CorreoElectronico>
La idea es poder desencriptarlo y obtener el mensaje de error automáticamente en caso de que haya.Saludos!
Tenemos modulo de clase en php y foxpro para elaborar la firma electrónica digital XAdES-EPES para Costa Rica, que es la parte más difícil. Si estan interesados, podemos negociar. Ambas clases no requieren ningun tipo de libreria externa, estan echas 100% en PHP y FoxPro, la del foxpro solo requiere el archivo openssl.exe para calcular los digest de la firma.
CLEAR*ObtieneTOKEN()*ConsultarDocumento()EnviarDocumento()*FirmarDoc()FUNCTION ObtieneTOKEN()ObjetoP = CREATEOBJECT("FElectronicaCR")ObjetoP.IDP_CLIENT_ID = "api-stag"
ObjetoP.APIUsuario = "cpf-01-1449-0212@stag.comprobanteselectronicos.go.cr"
ObjetoP.APIClave = "}:m_CXS:bO%e^_jI}?l*"&&Ejemplo de OBTENER TOKEN?ObjetoP.PRO_ConectaDGTD(ObjetoP.IDP_CLIENT_ID, ObjetoP.IDP_URI, ObjetoP.APIUsuario, ObjetoP.APIClave)RELEASE ObjetoPENDFUNCFUNCTION ConsultarDocumento()&&Definimos las variables locales. Se toman de parametros o del programa principal.Dir_archivo = "D:\\Trabajos\\PRONEXIS\\facturacr.xml"XML_Proceso = ""Dir_Base = "D:\\Trabajos\\PRONEXIS\\"text1=""ObjetoP = CREATEOBJECT("FElectronicaCR")ObjetoP.IDP_CLIENT_ID = "api-stag"ObjetoP.IDP_URI = "https://idp.comprobanteselectronicos.go.cr/auth/realms/rut-stag/protocol/openid-connect/token"ObjetoP.URL_RECEPCION = "https://api.comprobanteselectronicos.go.cr/recepcion-sandbox/v1/"
ObjetoP.APIUsuario = "cpf-01-1449-0212@stag.comprobanteselectronicos.go.cr"
ObjetoP.APIClave = "}:m_CXS:bO%e^_jI}?l*"XML_Proceso = FileToStr( Dir_archivo )ObjetoP.PRO_ProcesoExtraeDataXML(XML_Proceso, Dir_Base)Stoken = ObjetoP.PRO_GetToken(ObjetoP.IDP_CLIENT_ID, ObjetoP.IDP_URI, ObjetoP.APIUsuario, ObjetoP.APIClave)ObjetoP.PS_EstadoDocumento = ObjetoP.COM_ConsultaEstatus(ObjetoP.URL_RECEPCION, Stoken, ObjetoP.PS_Clave)?"Consecutivo: " + ObjetoP.PS_Consecutivo?"Clave: " + ObjetoP.PS_Clave?"Emisor ID: " + ObjetoP.PS_EmisorNumero?"Emisor Tipo ID: " + ObjetoP.PS_EmisorTipo?"Receptor ID: " + ObjetoP.PS_ReceptorNumero?"Receptor Tipo ID: " + ObjetoP.PS_ReceptorTipo?"Estado Documento: "+ObjetoP.PS_EstadoDocumentoENDFUNCFUNCTION EnviarDocumento()&&Definimos las variables locales. Se toman de parametros o del programa principal.Dir_archivo = "D:\\Trabajos\\PRONEXIS\\facturacr.xml"XML_Proceso = ""Nom_Cert = "011449021237.p12"Clave_cert = "1234"Dir_Base = "D:\Trabajos\PRONEXIS\"ObjetoP = CREATEOBJECT("FElectronicaCR")ObjetoP.IDP_CLIENT_ID = "api-stag"ObjetoP.IDP_URI = "https://idp.comprobanteselectronicos.go.cr/auth/realms/rut-stag/protocol/openid-connect/token"ObjetoP.URL_RECEPCION = "https://api.comprobanteselectronicos.go.cr/recepcion-sandbox/v1/"
ObjetoP.APIUsuario = "cpf-01-1449-0212@stag.comprobanteselectronicos.go.cr"
ObjetoP.APIUsuario = "cpf-01-1449-0212@stag.comprobanteselectronicos.go.cr"
ObjetoP.APIClave = "}:m_CXS:bO%e^_jI}?l*"ObjetoP.FirmarXAdes(Dir_Base, nombreArchivo + "_01_SF.xml", Dir_Base, nombreArchivo + "_02_Firmado.xml", Dir_Base + Nom_Cert, Clave_cert)RETURN
--El 9 de mayo de 2018, 13:40, RavenCorpSA SA <raven...@gmail.com> escribió:Me puedes enviar un mensaje por whatsapp al 7011-2456, me gustaría ver como funciona tu app
El viernes, 20 de abril de 2018, 9:30:32 (UTC-6), facelec...@gmail.com escribió:Saludos amigo, el codigo no sirve para Colombia, es para Costa Rica, es muy similar pero necesita varias adaptaciones para que sirva para colombia, a corto plazo estare trabajando en el fuente para Colombia pero no será ahora mismo porque no tengo tiempo.Tico Support S. A.
Tel. (506)8819-4369
Esta es una pantalla, que me consegui en españa. Esta tenia una funcionalidad limintada. Yo le agregue todas las funcionalidades que se necesitan para Costa Rica
El 10 de mayo de 2018, 9:32, Hernan Serrano <hernan.serr...@gmail.com> escribió:
CLEAR*ObtieneTOKEN()*ConsultarDocumento()EnviarDocumento()*FirmarDoc()FUNCTION ObtieneTOKEN()ObjetoP = CREATEOBJECT("FElectronicaCR")ObjetoP.IDP_CLIENT_ID = "api-stag"
ObjetoP.APIUsuario = "cpf-01-1...@stag.comprobanteselectronicos.go.cr"
ObjetoP.APIClave = "}:m_CXS:bO%e^_jI}?l*"&&Ejemplo de OBTENER TOKEN?ObjetoP.PRO_ConectaDGTD(ObjetoP.IDP_CLIENT_ID, ObjetoP.IDP_URI, ObjetoP.APIUsuario, ObjetoP.APIClave)RELEASE ObjetoPENDFUNCFUNCTION ConsultarDocumento()&&Definimos las variables locales. Se toman de parametros o del programa principal.Dir_archivo = "D:\\Trabajos\\PRONEXIS\\facturacr.xml"XML_Proceso = ""Dir_Base = "D:\\Trabajos\\PRONEXIS\\"text1=""ObjetoP = CREATEOBJECT("FElectronicaCR")ObjetoP.IDP_CLIENT_ID = "api-stag"ObjetoP.IDP_URI = "https://idp.comprobanteselectronicos.go.cr/auth/realms/rut-stag/protocol/openid-connect/token"ObjetoP.URL_RECEPCION = "https://api.comprobanteselectronicos.go.cr/recepcion-sandbox/v1/"
ObjetoP.APIUsuario = "cpf-01-1...@stag.comprobanteselectronicos.go.cr"
ObjetoP.APIClave = "}:m_CXS:bO%e^_jI}?l*"XML_Proceso = FileToStr( Dir_archivo )ObjetoP.PRO_ProcesoExtraeDataXML(XML_Proceso, Dir_Base)Stoken = ObjetoP.PRO_GetToken(ObjetoP.IDP_CLIENT_ID, ObjetoP.IDP_URI, ObjetoP.APIUsuario, ObjetoP.APIClave)ObjetoP.PS_EstadoDocumento = ObjetoP.COM_ConsultaEstatus(ObjetoP.URL_RECEPCION, Stoken, ObjetoP.PS_Clave)?"Consecutivo: " + ObjetoP.PS_Consecutivo?"Clave: " + ObjetoP.PS_Clave?"Emisor ID: " + ObjetoP.PS_EmisorNumero?"Emisor Tipo ID: " + ObjetoP.PS_EmisorTipo?"Receptor ID: " + ObjetoP.PS_ReceptorNumero?"Receptor Tipo ID: " + ObjetoP.PS_ReceptorTipo?"Estado Documento: "+ObjetoP.PS_EstadoDocumentoENDFUNCFUNCTION EnviarDocumento()&&Definimos las variables locales. Se toman de parametros o del programa principal.Dir_archivo = "D:\\Trabajos\\PRONEXIS\\facturacr.xml"XML_Proceso = ""Nom_Cert = "011449021237.p12"Clave_cert = "1234"Dir_Base = "D:\Trabajos\PRONEXIS\"ObjetoP = CREATEOBJECT("FElectronicaCR")ObjetoP.IDP_CLIENT_ID = "api-stag"ObjetoP.IDP_URI = "https://idp.comprobanteselectronicos.go.cr/auth/realms/rut-stag/protocol/openid-connect/token"ObjetoP.URL_RECEPCION = "https://api.comprobanteselectronicos.go.cr/recepcion-sandbox/v1/"
ObjetoP.APIUsuario = "cpf-01-1...@stag.comprobanteselectronicos.go.cr"
ObjetoP.APIUsuario = "cpf-01-1...@stag.comprobanteselectronicos.go.cr"
ObjetoP.APIClave = "}:m_CXS:bO%e^_jI}?l*"ObjetoP.FirmarXAdes(Dir_Base, nombreArchivo + "_01_SF.xml", Dir_Base, nombreArchivo + "_02_Firmado.xml", Dir_Base + Nom_Cert, Clave_cert)RETURN
--El 9 de mayo de 2018, 13:40, RavenCorpSA SA <raven...@gmail.com> escribió:Me puedes enviar un mensaje por whatsapp al 7011-2456, me gustaría ver como funciona tu app
El viernes, 20 de abril de 2018, 9:30:32 (UTC-6), facelec...@gmail.com escribió:Saludos amigo, el codigo no sirve para Colombia, es para Costa Rica, es muy similar pero necesita varias adaptaciones para que sirva para colombia, a corto plazo estare trabajando en el fuente para Colombia pero no será ahora mismo porque no tengo tiempo.Tico Support S. A.
Tel. (506)8819-4369
Buen día señores:Nosotros hemos pasado muchos días y noches integrando este proceso de Facturación Electrónica. El trabajo es arduo y se requiere de colaboración de varios desarrolladores con sus respectivos conocimientos en varios campos, hemos invertido tiempo y dinero ya que por experiencia, una sola persona no podría llevar a cabo este proceso que a Hacienda le ha costado meses en crearlo con un equipo muy grande que han de tener.Nosotros tenemos desarrollada un aplicación desde convertir las facturas de un ERP a al estándar que pide el Ministerio de Hacienda, Proceso de creación a documento XML con el proceso exclusivo como lo pide Hacienda(no con un generador xml), el firmado de documento con la llave criptográfica, conversión de documento JSON con los datos de emisor y receptor y documento XML en base 64, Comunicación con Hacienda mediante Tokens, envío del documento y consulta de documentos con los tokens, Recepción del JSON de Respuesta y Transcripción en formato XML de los errores que tiene el documento que en la mayoría de los casos es por mal procesamiento de los datos o campos inconsistentes. Todos estos procesos los podemos ofrecer en forma independiente de acuerdo con cada necesidad. Tambíen podemos ofrecer el almacenamiento de estos datos en la nube con protocolo HTTPS.
Podríamos integrar los registros de facturas de su sistema. Consultas a facturaelectronica@publicidadwebcr.com