GENERALIDADES
Con la intención de garantizar el buen funcionamiento de nuestros servicios de facturación, desde hace tiempo se ha implementado un servidor dedicado a la emisión de comprobantes de gran tamaño.
Este servicio “MYSuite Grandes Asíncrono”, será actualizado en su operatividad, dando paso a transacciones asíncronas (solicitud-encolamiento-procesamiento-solicitud-respuesta).
Para esto, de igual manera tendremos dos ambientes “PRUEBAS” y “PRODUCTIVO”, cada uno tendrá sus diferencias resaltando que en nuestro ambiente de pruebas, el tamaño del XML nativo de MYSuite a procesar estará limitado.
A continuación se describen las generalidades de cada ambiente:
El cliente de MYSuite que desee realizar pruebas con las nuevas transacciones asíncronas, podrá hacer uso de esta plataforma para integrar de manera correcta a su sistema cada una de las transacciones expuestas en este documento.
Plataforma de Pruebas
https://async.mysuitetest.com/factwsfront.asmx
Consideraciones
En el ambiente de prueba, sólo se permite procesar información en <Data1> con un tamaño mayor a 1 MB y hasta 4 MB.
Si la información en <Data1> tiene un tamaño menor a 1 MB, MYSuite indicará como resultado “false” ya que este tipo de archivos deberán ir por el servicio normal.
Se permite distribución de correo para comprobantes generados por solicitudes asíncronas.
Ya que el cliente se haya integrado y, concluido sus pruebas satisfactoriamente, puede ocupar nuestro ambiente productivo para llevar a cabo sus transacciones.
Plataforma Productivo
https://async.mysuitecfdi.com/factwsfront.asmx
Consideraciones
En el ambiente productivo, se pueden procesar en <Data1> información de gran tamaño, esto es, que tengan un tamaño superior a 1 MB teniendo como límite máximo 40MB.
En dependencia del tamaño de la información en <Data1> a procesar, será el tiempo en que este servidor genere el CFDI.
Si la información de <Data1> tiene un tamaño menor a 1 MB, MYSuite responderá con un resultado “false”, ya que este tipo de archivos deben ir por el servicio normal.
Se permite distribución de correo para comprobantes generados por solicitudes asíncronas.
TRANSACCIONES EN AMBOS AMBIENTES
A continuación, se describen las transacciones que estarán disponibles en este servicio.
Existen tres transacciones para manejo de CFDI de forma asíncrona:
1. ASYNC_CONVERT_NATIVE_XML (encola solicitud asíncrona de generación de CFDI a partir de un XML nativo).
2. ASYNC_CONVERT_VERIFY (devuelve metadatos de una solicitud asíncrona previamente encolada).
3. ASYNC_RETRIEVE_DOCUMENT (devuelve metadatos del CFDI generado y links a los archivos ZIP en la nube).
ASYNC_CONVERT_NATIVE_XML (Solicitud de generación de CFDI de manera asíncrona)
<?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <RequestTransaction xmlns="http://www.fact.com.mx/schema/ws"> <Requestor>12211111-1111-1111-1111-111111111111</Requestor> <Transaction>ASYNC_CONVERT_NATIVE_XML</Transaction> <Country>MX</Country> <Entity>JES900109Q90</Entity> <User>12211111-1111-1111-1111-111111111111</User> <UserName>MX.JES900109Q90.Pepito</UserName> <Data1>xxx</Data1> <Data2>yyy</Data2> <Data3></Data3> </RequestTransaction> </soap:Body> </soap:Envelope>
xxx: String convertido a Base64; xml con esquema nativo de MYSuite a partir del cual se generará el CFDI final.
yyy: String plano que identifica de manera única a esta transacción de parte del cliente; puede ser un Id, un Guid o lo que el cliente entienda siempre y cuando sea único en su ERP. Este parámetro es obligatorio (máximo 50 caracteres) y se utiliza para que no haya información repetida en MYSuite.
En caso de éxito (Response/Result true), la respuesta siempre vendrá en el nodo ResponseData/ResponseData1 y será un string (formato Guid), que representa el identificador de la solicitud aceptada. Este identificador será necesario para cualquier operación posterior sobre la solicitud generada.
Ejemplo de respuesta: fd339e5c-3685-4773-a3ea-be28c8b92dfe
En caso de que se envíe a MYSuite una solicitud con un número interno ya existente, la transacción fallará, con código de error 3196, pero igual devolverá en ResponseData/ResponseData1 el identificador de la solicitud encontrada con el número interno indicado por el cliente.
<?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <RequestTransaction xmlns="http://www.fact.com.mx/schema/ws"> <Requestor>12211111-1111-1111-1111-111111111111</Requestor> <Transaction>ASYNC_CONVERT_VERIFY</Transaction> <Country>MX</Country> <Entity>JES900109Q90</Entity> <User>12211111-1111-1111-1111-111111111111</User> <UserName>MX.JES900109Q90.Pepito</UserName> <Data1>xxx</Data1> <Data2></Data2> <Data3></Data3> </RequestTransaction> </soap:Body> </soap:Envelope>
xxx: Identificador de la solicitud; este es el identificador devuelto por MYSuite en la transacción ASYNC_CONVERT_NATIVE_XML.
Ejemplo: fd339e5c-3685-4773-a3ea-be28c8b92dfe
La respuesta siempre vendrá en los nodos ResponseData/ResponseData1 y ResponseData/ResponseData2 (ResponseData1 en formato xml y ResponseData2 en formato JSON, ambos convertidos a Base64) con los siguientes campos: Entity, Uuid, EnrolledTimeStamp, Status, DocumentGUID, Year, Batch, Serial y ErrorMsg. Ambos nodos contienen la misma información pero en formatos diferentes para que el cliente procese la información que le resulta más cómoda.
Entity: Entity especificado en la transacción.
Uuid: Identificador de la solicitud en cuestión; es la información proporcionada en Data1.
InternalID: Número interno especificado por el cliente para la solicitud en cuestión.
EnrolledTimeStamp: Fecha y hora en que se registró la solicitud.
Status: Estado de la solicitud; 1: Pendiente de procesar, 2: Procesado con éxito, 3: Procesado con error.
DocumentGUID: Folio fiscal (uuid) del CFDI generado; sólo tiene valor cuando Status = 2.
Year: Año de la fecha de emisión del CFDI generado; sólo tiene valor cuando Status = 2.
Batch: Serie del CFDI generado; sólo tiene valor cuando Status = 2.
Serial: Folio del CFDI generado; sólo tiene valor cuando Status = 2.
ErrorMsg: Texto del error ocurrido; sólo tiene valor cuando Status = 3. Se devuelve codificado Base64.
ResponseData1:
<?xml version="1.0" encoding="utf-8"?> <AsyncRequest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <Entity>JES900109Q90</Entity> <Uuid>a6b30f75-37c1-4972-aa9c-3cdf523b9bdd</Uuid> <InternalID>db062587-e759-4c06-b3ff-fac0ee25d295</InternalID> <EnrolledTimeStamp>2018-11-29T11:49:15</EnrolledTimeStamp> <Status>2</Status> <DocumentGUID>687bc63c-e03e-4c64-8eff-602de879bd1e</DocumentGUID> <Year>2018</Year> <Batch /> <Serial>8688</Serial> </AsyncRequest>
ResponseData2:
{ "Entity": "JES900109Q90", "Uuid": "a6b30f75-37c1-4972-aa9c-3cdf523b9bdd", "InternalID": " db062587-e759-4c06-b3ff-fac0ee25d295", "EnrolledTimeStamp": "/Date(1543513755000)/", "Status": 2, "DocumentGUID": "687bc63c-e03e-4c64-8eff-602de879bd1e", "Year": 2018, "Batch": "", "Serial": "8688", "ErrorMsg": null }
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<RequestTransaction xmlns="http://www.fact.com.mx/schema/ws">
<Requestor>12211111-1111-1111-1111-111111111111</Requestor>
<Transaction>ASYNC_RETRIEVE_DOCUMENT</Transaction>
<Country>MX</Country>
<Entity>JES900109Q90</Entity>
<User>12211111-1111-1111-1111-111111111111</User>
<UserName>MX.JES900109Q90.Pepito</UserName>
<Data1>xxx</Data1>
<Data2></Data2>
<Data3></Data3>
</RequestTransaction>
</soap:Body>
</soap:Envelope>
xxx: Identificador de la solicitud; este es el identificador devuelto por MYSuite en la transacción ASYNC_CONVERT_NATIVE_XML.
Ejemplo: fd339e5c-3685-4773-a3ea-be28c8b92dfe
La respuesta de esta transacción es igual a la de la transacción RETRIEVE_DOCUMENT; las únicas diferencias con respecto a esta transacción son las siguientes:
1. Siempre se devuelve XML y PDF; noten que el único parámetro que se solicita es el identificador de la solicitud asíncrona.
2. Lo que se devuelve en ResponseData1 (que en el caso de RETRIEVE_DOCUMENT es el contenido, en Base64, del XML), es el link que contiene el archivo XML (igual codificado Base64).
3. Lo que se devuelve en ResponseData3 (que en el caso de RETRIEVE_DOCUMENT es el contenido, en Base64, del PDF), es el link que contiene el archivo PDF (igual codificado Base64).
Los links tienen vigencia de 5 días.
Los links devueltos en algún momento al cliente no se guardan en nuestra plataforma. Cada llamada a ASYNC_RETRIEVE_DOCUMENT genera nuevos links con vigencia de 5 días.
En caso de que manden una transacción con un número interno que ya tenemos en MYSuite (y que no hayan recibido respuesta al momento de realizarla y la vuelvan a enviar), MYSuite incorpora el código 3196 con resultado “false” indicando en <Data> “El número interno proporcionado ya se encuentra registrado. Consulte ResponseData1 para obtener el Id de la solicitud existente.”, tomar en cuenta que en RespondeData1 se estará proporcionando el Id de la solicitud como si se hubiera registrado en ese momento.