https://efactura.dgi.gub.uy:6475/efactura/ws_personaGetActEmpresarial
https://efactura.dgi.gub.uy:6443/efactura/ws_certificacion?wsdl
- (ambiente test RUT 219999830019)
- (producción RUT 214844360018)
https://efactura.dgi.gub.uy:6475/efactura/ws_personaGetActEmpresarial
https://efactura.dgi.gub.uy:6443/efactura/ws_certificacion?wsdl
Los servicios de DGI consultados desde SOAPUI funcionan perfectamente, si utilizas Genexus también funcionan perfectamente ahora cuando te salís del entorno Genexus no funcionan. Muy extraño............
Buenas, tengo el mismo problema. Una sola vez me funcionó desde Postman. Después de eso dejó de andar. En PHP lo mismo.
Uso las mismas cabeceras que SoapUI
[
"Content-Type" => "text/xml;charset=UTF-8",
"Accept" => "*/*",
"accept-encoding" => "gzip, deflate",
"User-Agent" => "Apache-HttpClient/4.5.5 (Java/11.0.11)",
"Host" => "efactura.dgi.gub.uy:6475",
"SOAPAction" => "'DGI_Modernizacion_Consolidadoaction/AWS_PERSONAGETACTEMPRESARIAL.Execute'",
"Connection" => "Keep-Alive"
]
Solo que en mi caso, obtengo el error *RSA signature did not verify*
Logre hacerlo funcionar recreando el xml desde el log de soapui y probando primero en Postman.
Creo que el problema está en darle formato al xml. Desde PHP probe enviarlo usando Guzzle y logré que funcione.
Este es el xml que me funciono.
<soapenv:Envelope xmlns:dgi="DGI_Modernizacion_Consolidado" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header><wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"><wsse:BinarySecurityToken EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" wsu:Id="X509-B9D9D6EDB4705F978916232421499786">{TOKEN}</wsse:BinarySecurityToken><ds:Signature Id="SIG-B9D9D6EDB4705F9789162324215022910" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"><ds:SignedInfo><ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"><ec:InclusiveNamespaces PrefixList="dgi soapenv" xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"/></ds:CanonicalizationMethod><ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/><ds:Reference URI="#id-B9D9D6EDB4705F978916232421499799"><ds:Transforms><ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"><ec:InclusiveNamespaces PrefixList="dgi" xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"/></ds:Transform></ds:Transforms><ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><ds:DigestValue>TKTZ1TqvGJha5JbEY4XpF4FBJ40=</ds:DigestValue></ds:Reference></ds:SignedInfo><ds:SignatureValue>{LINE 1}
{LINE 2}
{LINE 3}
{LINE 4}
{LINE 5}</ds:SignatureValue><ds:KeyInfo Id="KI-B9D9D6EDB4705F978916232421499787"><wsse:SecurityTokenReference wsu:Id="STR-B9D9D6EDB4705F978916232421499788"><wsse:Reference URI="#X509-B9D9D6EDB4705F978916232421499786" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"/></wsse:SecurityTokenReference></ds:KeyInfo></ds:Signature></wsse:Security></soapenv:Header>
<soapenv:Body wsu:Id="id-B9D9D6EDB4705F978916232421499799" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<dgi:WS_PersonaGetActEmpresarial.Execute>
<dgi:Rut>211003420017</dgi:Rut>
</dgi:WS_PersonaGetActEmpresarial.Execute>
</soapenv:Body>
</soapenv:Envelope>
@amav96 Después de varias pruebas, incluso usando librerías externas, no funciona como se espera. Por alguna razón los token que se generan desde PHP no son validos para el ws de dgi. En mi caso logre que funcione parcialmente porque use la muestra generada previamente por SoapUI. Pero cuando cambie el RUT dejó de andar, ya que se debe generar un nuevo token basado en el RUT.
Buenas, me estuve enfocando mas en la opción de agregar un servicio de referencia por .Net. Al intentar consumir me retorna que el mensaje no ha sido firmado pero el servicio no tiene ningún mensaje. Por lo que probé descargar Genexus demo y intente crear un web service, al conectarlo a DGI este reconoce que hay un campo mensaje pero desde otras plataformas no. Volví a .Net y me puse o mirar todas las propiedades y encontré que el servicio al momento de conectarse intenta crear la propiedad mensaje pero se genera este error "CommunicationObjectFaultedException". Por lo que me puse a buscar y lo que encontré es que este error se produce cuando del lado del servidor en este caso DGI hay un error en el código.
Buenas, ahora sí puedo decir que logré hacer que funcione el servicio de DGI desde PHP.
Pero no directamente, es necesario contratar el servicio de uruware (ucfe) y ellos hacen de puente con DGI. De esa forma es posible obtener los datos de una empresa desde su rut.
Por si les interesa, estoy trabajando en una librería para consumir datos de UCFE desde PHP.
Es muy reciente y no tengo mucho aún, tampoco he llegado a documentar nada.
El siguiente es un ejemplo para obtener los datos de la empresa desde el rut, que es el unico servicio que tengo implementado hasta ahora.
\PlanetaDelEste\Ucfe\Auth::credentials(
env('UCFE_USERNAME'),
env('UCFE_PASSWORD'),
env('UCFE_CODCOMERCIO'),
env('UCFE_CODTERMINAL'),
env('UCFE_URL')
);
$obResponse = (new \PlanetaDelEste\Ucfe\Service\ActEmpresarial())->get('NUMERO_DE_RUT');
print_r ($obResponse->getResult());
Grande @alvaro-canepa Gran aporte, vi la documentacion, es simple y clara. Que tal ha sido tu experiencia con el servicio de URUWARE?
Por lo que veo la integracion las hiciste desde Laravel ?
Muchas gracias @amav96
La integración esta hecha para Laravel sí, pero debería funcionar en otros entornos.
Sobre el servicio de UW, por el momento no tengo ninguna queja. Hasta ahora estoy trabajando en modo desarrollo, no hemos pasado nada a producción aún. Tampoco tengo mucha experiencia como para comentar algo al respecto.
En el repo estoy actualizando la parte de facturación, que, de momento, esta en pleno desarrollo (WIP).
Cualquier aporte es bienvenido!
\PlanetaDelEste\Ucfe\Auth::credentials(
$ucfeUsername,
$ucfePassword,
$ucfeCodComercio,
$ucfeCodTerminal,
$ucfeUrl
);
Aca irian las credenciales del URUWARE? Me imagino que hay que contratar el servicio de ellos como si yo fuera una empresa. ¿Es Asi?
\PlanetaDelEste\Ucfe\Auth::credentials( $ucfeUsername, $ucfePassword, $ucfeCodComercio, $ucfeCodTerminal, $ucfeUrl );
Aca irian las credenciales del URUWARE? Me imagino que hay que contratar el servicio de ellos como si yo fuera una empresa. ¿Es Asi?
@amav96 Sí exacto, es necesario tener una cuenta en URUWARE.
Si encuentran el repositorio con el ejemplo porfa compartan
@dlespinosa365 Denis, el repositorio es este: https://github.com/planetadeleste/ucfe
Pero por falta de tiempo no tengo documentación aún y está en pleno desarrollo. Sí está funcionando la llamada de ActEmpresarial
.
Suerte y Felices fiestas!!!
Hola como estan?
una consulta alguien me podria indicar como se generan los claves para consultar el web service, de datos de empresa por RUT¡?
Gracias.
Hola @MaskeZen , te hago una consulta: existe algún servicio online que traiga los datos del CFE con este formato?
De ser así, cómo he de consumirlo?
Gracias!
Estimdos, como estan?, estoy intentando consumir el servicio desde Java, logre hacer el llamado con el certificado sin problema, pero al momento de hacer la consulta, me tira el error:
2024-06-12 12:15:27.757�[0;39m �[31mERROR�[0;39m �[35m1920�[0;39m �[2m---�[0;39m �[2m[nio-8080-exec-2]�[0;39m �[36mo.a.wss4j.dom.message.WSSecSignature �[0;39m �[2m:�[0;39m javax.xml.crypto.dsig.TransformException: org.apache.xml.security.c14n.CanonicalizationException: Element RUTPersonaGetEntidad.Execute has a relative namespace: xmlns="DGI_Modernizacion_Consolidado"
Original Exception was org.apache.xml.security.c14n.CanonicalizationException: Element RUTPersonaGetEntidad.Execute has a relative namespace: xmlns="DGI_Modernizacion_Consolidado"
A alguno le salio este mismo error y pudieron solucionarlo?
Hola @MaskeZen , te hago una consulta: existe algún servicio online que traiga los datos del CFE con este formato? De ser así, cómo he de consumirlo? Gracias!
Hola @kmonsanto, hace mucho que no trabajo con esto, pero no existía. Esto el receptor lo recibe por correo (a menos que se haga un servicio particular entre los emisores-receptores electrónicos).
Hola @MaskeZen , te hago una consulta: existe algún servicio online que traiga los datos del CFE con este formato? De ser así, cómo he de consumirlo? Gracias!
Hola @kmonsanto, existe un servicio pago (https://www.uruware.com/) que permite traer comprobantes en formato xml.
saludos
En mi caso poseo el certificado, haciendo pruebas desde SoapUI me funcinoa sin embargo desde PHP no. Me devuelve un error: Hash values do not match.