Skip to content

Instantly share code, notes, and snippets.

@MaskeZen
Last active October 11, 2023 17:10
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save MaskeZen/bb33acc685732ce0161bb23bdf5f4ab8 to your computer and use it in GitHub Desktop.
Save MaskeZen/bb33acc685732ce0161bb23bdf5f4ab8 to your computer and use it in GitHub Desktop.
WS DGI

WS DGI

Para obtener Datos de una empresa mediante su rut

https://efactura.dgi.gub.uy:6475/efactura/ws_personaGetActEmpresarial

Para realizar las pruebas de homologación simplificada

https://efactura.dgi.gub.uy:6443/efactura/ws_certificacion?wsdl

Envío de comprobantes electrónicos

Consulta estado envios de comprobantes y reportes

@amav96
Copy link

amav96 commented Mar 8, 2021

Hola que tal! Saludos. Por lo que veo no se encuentra en vigencia este SOAP., Intento conectarme de varias maneras y no tengo exito. Sabras si sigue en vigencia este soap de uruguay. Gracias

@MaskeZen
Copy link
Author

MaskeZen commented Mar 8, 2021

Hola, hace un par de años que no lo utilizo, pero luego me fijo y si lo confirmo te aviso.
¿cuál en particular te interesa?
Podés obtener información en el sitio de la DGI
Saludos.

@amav96
Copy link

amav96 commented Mar 8, 2021 via email

@amav96
Copy link

amav96 commented Mar 8, 2021 via email

@amav96
Copy link

amav96 commented Apr 12, 2021

Hola diego. Pudiste ver algo con respecto al SOAP, Obtuve el certificado digital y no pude conectarme desde php.

@MaskeZen
Copy link
Author

Hola @amav96, no lo he visto, si aún seguis con ese tema voy a intentar investigarlo un poco el fin de semana, le escribo también a un compañero que aún está con eso a ver si cambió algo.
Lo que recuerdo es que esos webservices solo funcionaban para los postulados, o es la idea que tengo por lo menos.

Disculpá que se me pasó responder antes.

@amav96
Copy link

amav96 commented Apr 15, 2021

Tranquilo MaskeZen, dale, si obtienes alguna informacion seria bueno saberla. Si, estos webservices te piden un certificado digital

@iurrieta
Copy link

iurrieta commented May 3, 2021

Hola MaskeZen espero estés bien. Quería saber si llegaste a implementar llamados a DGI para obtener datos de una empresa mediante su RUT https://efactura.dgi.gub.uy:6475/efactura/ws_personaGetActEmpresarial utilizando PHP, actualmente tengo un problema solamente con ese servicio. Al momento agregar el certificado me devuelve: Hash values do not match.

@MaskeZen
Copy link
Author

MaskeZen commented May 4, 2021

Hola @iurrieta, en algún momento utilicé tanto C# como PHP, pero hace tiempo que no interactuo con los WS de DGI.
Recuerdo que había un repositorio de una implementación de factura electrónica en PHP.

Si llego a tener un tiempo en el fin de semana pruebo algún experimento, el problema es que para esos WS si no mal recuerdo tenés que tener una empresa en estado de postulación por lo menos.

Le habia dicho a @amav96 que lo iba a revisar pero no he tenido tiempo, o cuando lo he tenido no lo he tenido presente.
Si obtengo alguna información que les pueda ser de utilidad les escribo, saludos.

@luisferreira22
Copy link

Buenas, hace unos meses intente realizar esa consulta con c# y no pude lograrlo. En Soapui funciona no así al momento de pasar a c# o otro lenguaje. Si alguno puede lograrlo y puede compartir se agradece. (Para cualquier consulta de web service de DGI deben contar con un certificado digital)

@MaskeZen
Copy link
Author

@luisferreira22, algo que podés hacer es debuguear lo que envías con wireshark por ejemplo, y así ver que diferencias tenés entre el XML que te esta generando el SOAPUI y el que estás generando vos en C#.

@rodrigocabraln
Copy link

Funciona perfectamente, tienen que tener el certificado

@luisferreira22
Copy link

En mi caso pruebo el servicio en SOAPUI y funciona (por ende el certificado funciona) pero al momento de realizarlo en .net me da un error.
En un post de Genexus alguien de esta empresa contesto que hay un error en los nombres dentro de los servicios que cuando lo invocas desde por ejemplo .Net da error. Alguien puedo hacer uso de los servicios desde .Net, Java o cualquier otro lenguaje sin utilizar genexus?

@iurrieta
Copy link

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.

@luisferreira22
Copy link

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............

@alvaro-canepa
Copy link

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*

@alvaro-canepa
Copy link

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}&#13;
{LINE 2}&#13;
{LINE 3}&#13;
{LINE 4}&#13;
{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
Copy link

amav96 commented Jul 27, 2021 via email

@alvaro-canepa
Copy link

@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.

@luisferreira22
Copy link

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.

@alvaro-canepa
Copy link

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());

@amav96
Copy link

amav96 commented Nov 17, 2021

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 ?

@alvaro-canepa
Copy link

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!

@amav96
Copy link

amav96 commented Nov 17, 2021

\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?

@alvaro-canepa
Copy link

\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.

@dlespinosa365
Copy link

Si encuentran el repositorio con el ejemplo porfa compartan

@alvaro-canepa
Copy link

@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!!!

@diegolorenzomolinero
Copy link

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.

@kmonsanto
Copy link

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!

2023-01-30_11-53-51

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment