Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Webservice descarga masiva SAT (mexico) (https://www.clubdelphi.com/foros/showthread.php?t=96155)

pgranados 12-03-2023 00:42:56

Webservice descarga masiva SAT (mexico)
 
Buen día, alguien ha consumido el webservice que proporciona el SAT para descarga masiva de cfdi en Delphi o en un cliente como SOAPUI o PostMan? si alguien lo ha hecho y tiene un request de autenticación que este correcto me lo puede compartir por favor? utilizando el request de ejemplo de la documentación del SAT no obtengo conexión, y utilizando el request publicado por https://developers.sw.com.mx/knowled...uthenticacion/

obtengo respuesta pero es negativa, no menciona nada mas que: "An error occurred when verifying security for the message."

saludos

mRoman 14-03-2023 17:40:12

Pues en el mismo link q colocaste, viene un comentario que dice que tiene q ver con la hora...

pgranados 14-03-2023 18:07:22

Ya pude autenticarme, estaba cifrando mal uno de los nodos, gracias por la respuesta.

dani36652 22-03-2023 20:08:55

Cita:

Empezado por pgranados (Mensaje 550745)
Ya pude autenticarme, estaba cifrando mal uno de los nodos, gracias por la respuesta.

Amigo pgranados... Tendrás algún ejemplo de código para poder consumir el web service de descarga masiva de CFDI del sat con Delphi desde la autenticacion hasta la descarga por favor? ocurre que soy novato en el tema. Sin embargo quisiera aprender con algún ejemplo.
Muchas gracias y saludos

pgranados 22-03-2023 20:36:37

Cita:

Empezado por dani36652 (Mensaje 550807)
Amigo pgranados... Tendrás algún ejemplo de código para poder consumir el web service de descarga masiva de CFDI del sat con Delphi desde la autenticación hasta la descarga por favor? ocurre que soy novato en el tema. Sin embargo quisiera aprender con algún ejemplo.
Muchas gracias y saludos

Acá viene realmente toda la información explicada. https://developers.sw.com.mx/knowled...ga-masiva-sat/

Para poder ayudarte necesito que me digas en que tienes duda y con gusto te apoyo. Saludos.

Edit: Ellos tienen un proyecto, aunque este en otro lenguaje y los métodos para calcular los valores son totalmente diferentes, te ayuda a saber si el valor que obtienes es correcto o no

dani36652 22-03-2023 21:33:13

Cita:

Empezado por pgranados (Mensaje 550809)
Acá viene realmente toda la información explicada. https://developers.sw.com.mx/knowled...ga-masiva-sat/

Para poder ayudarte necesito que me digas en que tienes duda y con gusto te apoyo. Saludos.

Edit: Ellos tienen un proyecto, aunque este en otro lenguaje y los métodos para calcular los valores son totalmente diferentes, te ayuda a saber si el valor que obtienes es correcto o no

Mi duda es mas que nada la siguiente:
En el ejemplo del link que me acabas de compartir que por cierto, se agradece...
A la hora de asignar valor a la parte de "SignatureValue" del XML se hace uso de este código
Código:

public string Sign(string sourceData, X509Certificate2 certificate)
        {
            byte[] data = GetBytes(sourceData);
            byte[] signature = null;

            using (RSA rsaCryptoServiceProvider = certificate.GetRSAPrivateKey())
            {
                signature = rsaCryptoServiceProvider.SignData(data, HashAlgorithmName.SHA1, RSASignaturePadding.Pkcs1);
            }
            return System.Convert.ToBase64String(signature);
        }

Lo que quisiera hacer es escribir el homólogo pero en Delphi Muchas gracias.
PD. estoy en el paso 1 que es la autenticacion

pgranados 22-03-2023 23:19:10

Cita:

Empezado por dani36652 (Mensaje 550810)
Mi duda es mas que nada la siguiente:
En el ejemplo del link que me acabas de compartir que por cierto, se agradece...
A la hora de asignar valor a la parte de "SignatureValue" del XML se hace uso de este código
Código:

public string Sign(string sourceData, X509Certificate2 certificate)
        {
            byte[] data = GetBytes(sourceData);
            byte[] signature = null;

            using (RSA rsaCryptoServiceProvider = certificate.GetRSAPrivateKey())
            {
                signature = rsaCryptoServiceProvider.SignData(data, HashAlgorithmName.SHA1, RSASignaturePadding.Pkcs1);
            }
            return System.Convert.ToBase64String(signature);
        }

Lo que quisiera hacer es escribir el homólogo pero en Delphi Muchas gracias.
PD. estoy en el paso 1 que es la autenticacion


Necesitas tomar todo el nodo que viene en la pagina y pasarlo a un .txt y luego con ayuda del openssl debes de ejecutar algo así:

Código Delphi [-]
'dgst -sha1 -out "'+DestinoFirma+'" -sign "'+FielPem+'" "'+SignatureValue+'"';

Donde:
DestinoFirma: es el archivo resultante de la dgst en formato .bin
FielPem: es la key en .Pem
SignatureValue: es el .txt del nodo exportado


Despues el archivo .bin debes de pasarlo a Base64 y es lo que pondrás en el nodo

dani36652 23-03-2023 23:45:13

Cita:

Empezado por pgranados (Mensaje 550811)
Necesitas tomar todo el nodo que viene en la pagina y pasarlo a un .txt y luego con ayuda del openssl debes de ejecutar algo así:

Código Delphi [-]
'dgst -sha1 -out "'+DestinoFirma+'" -sign "'+FielPem+'" "'+SignatureValue+'"';

Donde:
DestinoFirma: es el archivo resultante de la dgst en formato .bin
FielPem: es la key en .Pem
SignatureValue: es el .txt del nodo exportado


Despues el archivo .bin debes de pasarlo a Base64 y es lo que pondrás en el nodo


Intentaré eso amigo muchas gracias.
De igual manera me puse a leer y estudiar mas sobre OpenSSL y saber qué estoy haciendo.
Saludos cordiales

pgranados 23-03-2023 23:48:19

Cita:

Empezado por dani36652 (Mensaje 550818)
Intentaré eso amigo muchas gracias.
De igual manera me puse a leer y estudiar mas sobre OpenSSL y saber qué estoy haciendo.
Saludos cordiales

Claro, cualquier cosa aquí estoy. Saludos.

User_123456_yes 14-05-2023 20:52:07

LLamad al WS de autenticación del SAT
 
Hola,

Estoy tratando de obtener el token de autenticación utilizando postman.
Veo que hay usuarios que comentan que hay un desfase de hora al informar los campos <u:Created> y <u:Expires>.

Alguien ha conseguido obtener el token utilizando postman o soapUi?
Afectaría en algún modo si estoy lanzando la petición desde España? (UTC del PC puede tener algo que ver?)

Gracias!

Maharba 28-10-2024 22:46:42

Autenticación en el web service del SAT
 
Hola compañeros

He intentado realizar la autenticación, para obtener el token, esto desde postman, pero siempre recibo el siguiente mensaje:


<faultstring xml:lang="en-US">An error occurred when verifying security for the message.</faultstring>


Ya he checado lo del horario
Si alguiem puede ayudarme se lo agradeceria mucho

rdaniel2000 28-11-2024 20:13:52

Hola

A Todos,

Alguien usando Delphi ha podido pasar la Autenticacion???

El primer paso pues es generar el XML

El Segundo paso es enviarlo por Delphi usando THTTPRIO, alguien ya lo hizo???

pgranados 28-11-2024 20:16:23

Cita:

Empezado por rdaniel2000 (Mensaje 560258)
Hola

A Todos,

Alguien usando Delphi ha podido pasar la Autenticacion???

El primer paso pues es generar el XML

El Segundo paso es enviarlo por Delphi usando THTTPRIO, alguien ya lo hizo???

No necesariamente debes de usar el THTTPRIO, yo uso el Http de Indy10, que duda tienes para el consumo?

rdaniel2000 28-11-2024 20:42:08

Hola

Oye es que estoy tratando de consumir el servicio pero obtengo esta respuesta:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><s:Fault><faultcode xmlns:a="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">a:InvalidSecurity</faultcode><faultstring xml:lang="en-US">An error occurred when verifying security for the message.</faultstring></s:Fault></s:Body></s:Envelope>


Lo mas probable es que no estoy enviando correctamente el Request...

Segun yo tengo validado el XML y verificadas todas las firmas...



<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"><s:Header><ActivityId CorrelationId="c5478a6f-8f27-43f4-bc97-bea17612517c" xmlns="http://schemas.microsoft.com/2004/09/ServiceModel/Diagnostics">00000000-0000-0000-0000-000000000000</ActivityId><o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"><u:Timestamp u:Id="_0"><u:Created>2024-11-28T19:35.59Z</u:Created><u:Expires>2024-11-29T19:35.59Z</u:Expires></u:Timestamp><o:BinarySecurityToken u:Id="uuid-baa2a981-3299-4361-b0b8-d68c7318e634-1" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">......................
</o:BinarySecurityToken><Signature xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/><Reference URI="#_0"><Transforms><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><DigestValue>Z+uB4zr2+2uXw7TEvdlAY2BFEh8=</DigestValue></Reference></SignedInfo><SignatureValue>.............................................</SignatureValue><KeyInfo><o:SecurityTokenReference>
<o:Reference ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" URI="#uuid-baa2a981-3299-4361-b0b8-d68c7318e634-1"/>
</o:SecurityTokenReference></KeyInfo></Signature></o:Security></s:Header><s:Body><Autentica xmlns="http://DescargaMasivaTerceros.gob.mx"/></s:Body></s:Envelope>

All signatures were successfully verified.

pgranados 28-11-2024 23:00:52

Ese error es por XML mal formado, por favor dime como calculas cada valor para orientarte un poco mas.

rdaniel2000 29-11-2024 03:17:38

Hola

Al parecer si tengo bien el XML, ahora tengo este error:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"><s:Header><o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"><u:Timestamp u:Id="_0"><u:Created>2024-11-29T02:16:13.913Z</u:Created><u:Expires>2024-11-29T02:21:13.913Z</u:Expires></u:Timestamp></o:Security></s:Header><s:Body><s:Fault><faultcode xmlns:a="http://schemas.microsoft.com/ws/2005/05/addressing/none">a:ActionNotSupported</faultcode><faultstring xml:lang="en-US">The message with Action '' cannot be processed at the receiver, due to a ContractFilter mismatch at the EndpointDispatcher. This may be because of either a contract mismatch (mismatched Actions between sender and receiver) or a binding/security mismatch between the sender and the receiver. Check that sender and receiver have the same contract and the same binding (including security requirements, e.g. Message, Transport, None).</faultstring></s:Fault></s:Body></s:Envelope>

pgranados 29-11-2024 15:45:17

No, si tienes un error en el XML o en el envío de tu petición,

Para poder ayudarte necesito que me digas lo siguiente:

1. Estas consumiendo el webservice de autenticación o cual (autenticación, solicitud, consulta, descarga) ?
2. Como estas mandando la petición al webservice (headers, request, etc ?
3. En caso de ser el webservice de autenticación, como calculas los siguientes valores?

SignatureValue
DigestValue
Version del uuid generado


Saludos cordiales

rdaniel2000 29-11-2024 18:53:24

Ya revise el XML y pude duplicar el mismo XML de ejemplo de https://developers.sw.com.mx/knowled...uthenticacion/

Asi que creo que no es el xml..


Mas bien es como consumo el WebService... es que ahi es donde estoy perdido, no se como enviar el XML con THTTPRIO

Maharba 06-12-2024 18:34:06

Hola rdaniel2000

¿Puedes enviar un ejemplo de como estas haciendo el envío de datos con THTTPRIO?

rdaniel2000 06-12-2024 19:24:57

Hola,

Es que no he sabido como enviar dicho xml.


Tengo la Funcion creada por el mismo Delphi y la con la cual mando llamar a la funcion del Web Service asi:

Código Delphi [-]
GetIAutenticacion(True, '', Nil).Autentica();

Pero como la funcion no tienen parametros, no se en que parte va el XML.

Gracias por la ayuda..



Código Delphi [-]

  IAutenticacion = interface(IInvokable)
  ['{A87F3A38-6E93-6F43-CEB6-B92C0862B638}']
    function  Autentica: string; stdcall;
  end;

function GetIAutenticacion(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): IAutenticacion;
const
  defWSDL = 'https://cfdidescargamasivasolicitud.clouda.sat.gob.mx/Autenticacion/Autenticacion.svc?wsdl';
  defURL  = 'https://cfdidescargamasivasolicitud.clouda.sat.gob.mx/Autenticacion/Autenticacion.svc';
  defSvc  = 'Autenticacion';
  defPrt  = 'BasicHttpBinding_IAutenticacion';
var
  RIO: THTTPRIO;
begin
  Result := nil;
  if (Addr = '') then
  begin
    if UseWSDL then
      Addr := defWSDL
    else
      Addr := defURL;
  end;
  if HTTPRIO = nil then
    RIO := THTTPRIO.Create(nil)
  else
    RIO := HTTPRIO;
  try
    Result := (RIO as IAutenticacion);
    if UseWSDL then
    begin
      RIO.WSDLLocation := Addr;
      RIO.Service := defSvc;
      RIO.Port := defPrt;
    end else
      RIO.URL := Addr;
  finally
    if (Result = nil) and (HTTPRIO = nil) then
      RIO.Free;
  end;
end;


La franja horaria es GMT +2. Ahora son las 13:36:25.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi