API DE INTEGRACIÓN - FIRMADO V0.5.3

                      API de Integración - FIRMADO V0.5.3

                      13 OCTUBRE, 2021

                      Documentación de la API de Integración FIRMADO V0.5.3

                      Revisión
                      Fecha
                      Comentarios
                      12021-­10-13
                      Documento inicial

                      Tabla de Contenido

                      • Introducción
                      • Métodos de firmado

                        • Descripción del método.

                        • Parámetros 

                        • Especificación del xml

                        • Especificación de los nodos del xml

                        • Respuesta del método de firmado.

                          • Atributos

                      • Métodos de firmado para el contrato de adhesión 

                        • Descripción del método.

                        • Parámetros 

                        • Especificación del xml

                        • Especificación de los nodos del xml

                        • Respuesta del método de firmado.

                          • Atributos

                      • Códigos de resultado

                      • Anexo


                        Introducción

                      Esta API permite la integración de los usuarios que deseen realizar el firmado de la carta de adhesión, el cual sirve para firmar una carta manifiesto o contrato de adhesión entre el cliente y el PAC .

                      La ubicación del WSDL del WebService es:

                      https://facturacion.pade.mx/PadeFirmadoApp-war/FirmarContrato?wsdl


                      Método de firmado para la Carta Manifiesto


                      String firmarManifiesto(String xml, boolean modoPrueba)

                      Descripción del método:

                      Permite firmar el contrato de adhesión entre contribuyente y Proveedor de Certificación de CFDi       (PCCFDI).

                      Parámetros: 

                      • xml : Es el XML en base64 que contiene el contrato y las firmas de contribuyente y PCCFDI. Se detalla a continuación.

                      • modoPrueba : Especifica si la solicitud se realizará en modo prueba o si se refiere a 

                        una solicitud real.

                      Estructura base del XML es: 

                      <?xml version="1.0" encoding="UTF-8" standalone="yes"?>

                      <Contrato>

                          <Fecha></Fecha>

                          <Hash><Hash>

                          <Texto></Texto>

                          <Firmas>

                              <Firma Quien="" Sello="" CertificadoSerie="" Certificado="" Nombre="" RepLegal="" Facultad="" CalleNumero="" Colonia="" Ciudad="" Estado="" CodigoPostal=""/>

                          </Firmas>

                      </Contrato>

                      Ejemplo de Plantilla XML:

                      NOTA: Se debe colocar tal cual se encuentra en el siguiente ejemplo, debido que dicha estructura si cambia no podrá validarse ya que se utiliza para validar que el texto del contrato sea original. 

                      Se deben de sustituir los valores entre las llaves por los valores de los atributos del XML en el nodo firmas.

                      • {RAZON SOCIAL} = Nombre

                      • {RFC} = RFC

                      • {CALLE} = CalleNumero

                      • {COLONIA}=Colonia

                      • {CIUDAD} = Ciudad

                      • {ESTADO} = Estado

                      • {CODIGOPOSTAL} = CodigoPostal

                      • {FACULTAD} = Facultad

                      • {FECHA} = Fecha de firmado del documento ejemplo (22 de Octubre de 2021)

                      • CLIENTE = {RAZON SOCIAL}

                      <Texto>

                      AUTORIZACIÓN Y MANIFESTACIÓN DE CONOCIMIENTO A PRODIGIA PROCESOS DIGITALES Y ADMINISTRATIVOS, S.A. DE C.V.

                      El Contribuyente {RAZON SOCIAL}, con clave de RFC {RFC} y domicilio fiscal en {CALLE}, col. {COLONIA}, {CIUDAD}, {ESTADO}, México. CP {CODIGOPOSTAL}, representada en este acto por {REPRESENTANTE LEGAL}, con facultades suficientes en su carácter de {FACULTAD}, otorga la presente autorización a favor PRODIGIA PROCESOS DIGITALES Y ADMINISTRATIVOS, S.A. DE C.V., proveedor de Certificación de Comprobantes Fiscales Digitales a través de Internet (CFDI) autorizado por el SAT en su resolución número 600-04-03-2013-09763 de fecha 19 de Febrero de 2013, para que le preste el servicio de Certificación de CFDI de conformidad a las siguientes:

                      CLÁUSULAS    

                      PRIMERA. El servicio de Certificación de CFDI que proveerá PRODIGIA PROCESOS DIGITALES Y ADMINISTRATIVOS, S.A. DE C.V. consiste en:

                      a)La validación de los requisitos del artículo 29-A del CFF;

                      b)La asignación de folios; y

                      c)La incorporación del sello digital del SAT

                      SEGUNDA. El servicio de Certificación de CFDI es prestado directamente por PRODIGIA PROCESOS DIGITALES Y ADMINISTRATIVOS, S.A. DE C.V.

                      TERCERA. De acuerdo a lo dispuesto en el segundo párrafo de la regla I.2.7.2.7 de la Resolución Miscelánea Fiscal para 2014, el contribuyente manifiesta su conocimiento y presta su autorización para que PRODIGIA PROCESOS DIGITALES Y ADMINISTRATIVOS, S.A. DE C.V. entregue al SAT copia de los comprobantes que le haya certificado.

                      CUARTA. Esta autorización es válida únicamente para el contribuyente especificado en este documento.

                      De conformidad con lo anterior se firma este documento el día {FECHA dd de mes de yyyy (22 de Octubre de 2021)}

                      PRODIGIA PROCESOS DIGITALES ADMINISTRATIVOS SA DE CV

                      PCCFDI: 9763

                      Nombre: Gustavo Antonio Aguilar Astiazarán

                      Cliente: CLIENTE

                      Nombre: CLIENTE

                      </Texto>

                      Link de descarga del documento Plantilla XML: 

                      Plantilla XML Firmado


                      Especificación de los nodos del XML


                      • Fecha: especifica la fecha y hora de petición de firmado. El formato es: yyyy-MM-dd'T'HH:mm:ss.

                      • Hash: es el hash calculado del texto de contrato. Se utiliza para validar que el texto del contrato sea el original. El hash se calcula con el algoritmo sha1, especificado más adelante.

                      • Texto: es el texto del contrato entre contribuyente, integrador y PCCFDI. Se genera mediante un XSLT y los datos de las dos partes que firman.

                      • Firmas: contiene las firmas de cada una de las partes involucradas en el contrato    .

                        • Firma: la solicitud debe contener la firma del contribuyente. Este nodo

                           contiene en sus atributos los datos de la entidad que firma.

                          • En el atributo 'Quien' se especifica: “Cliente”.

                          • El atributo 'Sello' se genera con el certificado, llave privada y password de la 

                            entidad en conjunto con el texto del contrato.

                          • El atributo 'CertificadoSerie' contiene el valor de la serie del certificado.

                          • El atributo 'Certificado' contiene el certificado en base64 de la entidad que 

                            firma.

                          • El atributo 'Nombre' contiene la razón social del contribuyente.

                          • El atributo 'RepLegal' contiene el nombre del representante legal del 

                            contribuyente.

                          • El atributo 'Facultad' contiene la descripción de la facultad del representante legal

                          • El atributo 'CalleNumero' contiene como parte del domicilio fiscal la calle y numero del cliente

                          • El atributo 'Colonia' contiene como parte del domicilio fiscal la colonia del cliente

                          • El atributo 'Ciudad' contiene como parte del domicilio fiscal la ciudad del cliente

                          • El atributo 'Estado' contiene como parte del domicilio fiscal el estado del cliente

                          • El atributo 'CodigoPostal' contiene como parte del domicilio fiscal el código postal del cliente 

                          • En caso de una firma exitosa, la plataforma devolverá un nodo adicional de

                            firma con el sello del PCCFDI.

                      Respuesta del método de firmado         

                      El servicio devuelve un XML sin esquemas. La estructura se describe a continuación: 

                      <?xml version="1.0" encoding="UTF-8"?>

                      <padeFirmado>

                          <firmaOk></firmaOk>

                          <codigoResultado></codigoResultado>

                          <mensajeResultado></mensajeResultado>

                          <fechaFirma></fechaFirma>

                          <xmlBase64></xmlBase64>

                      </padeFirmado>

                      • firmaOk: indica si la operación de firmado fue realizada con éxito. Los valores posible son ‘true’, que indica éxito, y ‘false’, que indica algún error en la operación que impidió firmar el contrato.

                      • codigoResultado: indica el código del error detectado, si hubo alguno. Cuando la transacción es exitosa, el código devuelto es 0 (cero), en caso contrario devuelve el código de error correspondiente (Ver tabla de códigos de resultado).

                      • mensajeResultado: describe el código devuelto por el servicio.

                      • fechaFirma: Especifica la fecha y hora en la que el servicio devuelve la respuesta. Solo se incluye cuando la respuesta es exitosa. El formato es:

                        yyyy-MM-dd'T'HH:mm:ss.

                      • xmlBase64: contiene el XML firmado en formato base64. Sólo se incluye cuando la transacción es exitosa.


                      Códigos de resultado 

                      Código
                      Descripción
                      0 Firma exitos
                      1 Usuario, contraseña o código de contrato del asociado inválido
                      2 Contrato firmado previamente
                      301 Xml mal formado 
                      302 Contrato mal formado
                      303 El sello del emisor mal formado o inválido
                      304 El sello del asociado integrador mal formado o inválido. 
                      305 El certificado del emisor mal formado o inválido. 
                      306 El certificado del asociado mal formado o inválido. 
                      307 El certificado del emisor no es válido 
                      308 El certificado del asociado no es válido 
                      309 El contrato no es válido. 
                      310 El certificado del integrador no fue emitido por el SAT. 
                      311 El certificado del emisor no fue emitido por el SAT. 
                      400 La petición no es válida, faltan parametros
                      99 Ocurrió un error interno

                      Anexo

                      Algoritmo para calcular el Hash (C#):


                      /// <summary>

                      /// Genera el hash del texto especificado

                      /// </summary>

                      /// <param name=" texto">Texto cuyo hash se desea generar</param> protected string ContratoGenerarHash(string texto)

                      {

                      string hash = "Error: sin calcular"; try

                      {

                      Byte [] stream = null;

                      using (System.Security.Cryptography.SHA1CryptoServiceProvider shaProvider = new System.Security.Cryptography.SHA1CryptoServiceProvider())

                      {

                      stream = shaProvider.ComputeHash(System.Text.Encoding.UTF8.GetBytes(texto)); if (stream == null)

                      {

                      hash = "Error al Calcular Hash del Texto";

                      }

                      else

                      {

                      hash = System.BitConverter.ToString(stream);

                      }

                      }

                      }

                      catch (Exception error)

                      {

                      hash = string.Format("Error SHA-1: {0}", error);

                      }

                      return hash;

                      }