¡Esta es una revisión vieja del documento!
Como proveedor autorizado de certificación con el número 68934, iTimbre realiza la validación y certificación (timbrado) de Comprobantes Fiscales Digitales generados por Internet (CFDI) conforme a las especificaciones requeridas por el SAT a través de su Web Service (Software como Servicio) de una manera rápida y segura.
Además de la certificación de sus comprobantes, iTimbre le ofrece el servicio de cancelación y búsqueda de sus comprobantes fiscales.
La característica principal de la arquitectura del Web Service de iTimbre es que utiliza JSON+REST en lugar del tradicional XML+SOAP. Por lo tanto es importante tener conocimientos del formato JSON para poder crear los mensajes que serán enviados al Web Service. Afortunadamente JSON es mucho más fácil de entender e implementar.
Antes de comenzar a realizar pruebas con el Web Service de iTimbre es necesario registrarse a través de las siguientes ligas:
Pruebas: https://pruebas.itimbre.com/registro/index.php?servicio=timbrado
Producción: https://portal.itimbre.com/registro/index.php?servicio=timbrado
Es necesario que en el campo de “Servicio deseado” se mantenga seleccionada la opción de “Solo timbrado”, para que se habiliten en el Web Service las conexiones externas. También es importante distinguir entre la versión de pruebas y la de producción, ya que son sistemas totalmente independientes aunque sean idénticos. La única diferencia es la validez de los comprobantes certificados. La versión de pruebas utiliza un CSD de pruebas para validar los comprobantes, pero al igual que la versión de producción, también verifica el RFC y el certificado del CFDI en la lista de contribuyentes del SAT. Por esta razón no es posible utilizar certificados de pruebas para enviar comprobantes a la versión de pruebas del Web Service, ya que generarán el código de error correspondiente.
Al realizar el registro recibirá un correo electrónico de confirmación con la liga hacia el Portal de iTimbre y una contraseña temporal. En caso de no recibir el correo electrónico busque en su carpeta de “Spam” o “Correo no deseado”.
Cuando ingrese al sistema por primera vez, éste le pedirá que cambie su contraseña temporal por una personalizada que cumpla con los requisitos de seguridad establecidos. La contraseña debe contener al menos 8 caracteres e incluir al menos una mayúscula, una minúscula, un número y un carácter especial (@#$).
Posteriormente, el sistema lo llevará a la página de inicio, donde podrá ver sus datos personales, editarlos, cambiar su contraseña, y descargar las políticas de uso, el acuerdo de confidencialidad y el presente manual de integración.
En el sub-módulo de “Emisores” aparece la lista de los emisores registrados. El sistema actualmente no cuenta con un límite de emisores, así que puede registrar todos los que desee siempre y cuando no hayan sido registrados en la aplicación gratuita. Para dar de alta un nuevo emisor dar clic en “Agregar Emisor”.
Agregue los datos de la empresa y al terminar haga clic en “Aceptar”. Si los datos fueron llenados correctamente se registrará el emisor en el sistema y se generará una contraseña aleatoria, la cual necesitará al momento de hacer el llamado al Web Service de iTimbre. La contraseña aparecerá en el campo correspondiente.
En caso de necesitar ayuda vaya al módulo de “Soporte” y llene el formulario. En breve nos comunicaremos con usted.
Para realizar la conexión con el Web Service de iTimbre es necesario proveer los siguientes datos en el llamado:
Al realizar el llamado, las variables se deben serializar en formato JSON y almacenarse en una variable llamada “q”, la cual se debe enviar por HTTP. Las ligas del Web Service se enlistan a continuación.
Direcciones del servicio:
Pruebas: https://portalws.itimbre.com/itimbreprueba.php
Producción: https://portalws.itimbre.com/itimbre.php
Nota: es muy importante utilizar la liga correcta. Si el registro se realizó en la versión de pruebas se debe utilizar únicamente la liga de pruebas y lo mismo aplica para la versión de producción.
Las siguientes validaciones se realizan al XML:
En caso que el XML cumpla con las validaciones mencionadas, el Web Service lo devolverá al contribuyente con la información contenida y el Timbre Fiscal Digital, este incluye:
Para realizar la validación y certificación de un CFDI se deben utilizar los métodos “cfd2cfdi”. Los parámetros a ser enviados por el Web Service para realizar la función de validación de los comprobantes fiscales están estructurados de la siguiente manera:
PARÁMETRO | DESCRIPCIÓN |
---|---|
id | Identificador de referencia asignado por el cliente. Este parámetro no es requerido por el Web Service de iTimbre, sino que tiene como propósito ser utilizado por el cliente como método de control para asegurarse de recibir la respuesta solicitada. Se recomienda utilizar el número de folio interno del XML. Por defecto se asignará 0. |
method | Este parámetro consiste en el tipo de petición solicitado para generar el CFDI. Los valores posibles se encuentran en el catálogo de métodos. |
params | Debe contener un arreglo con los parámetros: user, pass, RFC, y xmldata. |
user | Usuario del Portal de iTimbre con el que se ingresa al sistema (correo electrónico con el que se registró). |
pass | Contraseña generada por iTimbre asignada al emisor de manera automática. Se puede utilizar la contraseña máster del administrador de los emisores para cualquier RFC. |
RFC | RFC del emisor del CFDI. Nota: es el único parámetro que debe estar en mayúsculas. |
xmldata | Contenido del XML con la información del comprobante. |
Ejemplo de codificación del llamado en formato JSON para certificación de CFDI v3.2:
{ "id":"101", "method":"cfd2cfdi", "params": { "user":"miemail@midominio.com", "pass":"cabb17fb8536180e11af6dff0da42132", "RFC":"EEM010101XYZ", "xmldata":"<cfdi></cfdi>" } }
En caso de validación del XML o que surja algún error en el proceso, el Web Service de iTimbre le enviará una respuesta.
PARÁMETROS | DESCRIPCIÓN |
---|---|
id | El mismo id que fue enviado en el llamado. |
result | Un arreglo dentro del cual se encuentran el resto de los parámetros que se describen abajo. |
retcode | Código de retorno, si es 1, la repuesta es exitosa. Si es diferente de 1, el número es el código de error. |
UUID | Identificador único del CFDI timbrado. Nota: es el único parámetro que se regresa en mayúsculas. |
data | XML timbrado. |
acuse | Acuse que proporciona el SAT como comprobante de que el CFDI fue recibido satisfactoriamente. Nota: este parámetro pudiera no ser regresado si el servicio de recepción del SAT no se encuentre disponible en el momento de la llamada. |
error | En caso de existir, una descripción del error regresado al intentar validar el XML. |
Otros | Otros parámetros en caso de que se ocupen como referencia, por ejemplo el usuario que hizo el llamado, o algún timestamp. |
Ejemplo de respuesta válida arrojada por el Web Service:
{ "id":"101", "result": { "retcode":1, "UUID":"63C2042F-FAF0-48A0-A9AF-0304813D2528", "data":"<cfdi></cfdi>", "acuse":"<xml></xml>" } }
Ejemplos de errores:
{ "id":0, "result": { "retcode":-1, "error":"Variable q faltante." } }
{ "id":0, "result": { "retcode":-1, "error":"Los datos recibidos no cumplen con el formato JSON correcto." } }
Para realizar la conexión con el Web Service de iTimbre es necesario proveer los siguientes datos en el llamado:
Al realizar el llamado, las variables se deben serializar en formato JSON y almacenarse en una variable llamada “q”, la cual se debe enviar por HTTP.
Las ligas del Web Service se enlistan a continuación.
Direcciones del servicio:
Las siguientes validaciones se realizan al XML:
En caso que el XML cumpla con las validaciones mencionadas, el Web Service lo devolverá al contribuyente con la información contenida y el Timbre Fiscal Digital, este incluye:
Para realizar la validación y certificación de un CFDI se deben utilizar los métodos “enviarRetencion”. Los parámetros a ser enviados por el Web Service para realizar la función de validación de los comprobantes fiscales están estructurados de la siguiente manera:
PARÁMETRO | DESCRIPCIÓN |
---|---|
id | Identificador de referencia asignado por el cliente. Este parámetro no es requerido por el Web Service de iTimbre, sino que tiene como propósito ser utilizado por el cliente como método de control para asegurarse de recibir la respuesta solicitada. Se recomienda utilizar el número de folio interno del XML. Por defecto se asignará 0. |
method | Este parámetro consiste en el tipo de petición solicitado para generar el CFDI. Los valores posibles se encuentran en el catálogo de métodos. |
params | Debe contener un arreglo con los parámetros: user, pass, RFC, y xmldata. |
user | Usuario del Portal de iTimbre con el que se ingresa al sistema (correo electrónico con el que se registró). |
pass | Contraseña generada por iTimbre asignada al emisor de manera automática. Se puede utilizar la contraseña máster del administrador de los emisores para cualquier RFC. |
RFC | RFC del emisor del CFDI. Nota: es el único parámetro que debe estar en mayúsculas. |
xmldata | Contenido del XML con la información del comprobante. |
Ejemplo de codificación del llamado en formato JSON para certificación de retenciones:
{ "id":"101", "method":"enviarRetencion", "params": { "user":"miemail@midominio.com", "pass":"cabb17fb8536180e11af6dff0da42132", "RFC":"EEM010101XYZ", "xmldata":"<cfdi></cfdi>" } }
En caso de validación del XML o que surja algún error en el proceso, el Web Service de iTimbre le enviará una respuesta.
PARÁMETROS | DESCRIPCIÓN |
---|---|
id | El mismo id que fue enviado en el llamado. |
result | Un arreglo dentro del cual se encuentran el resto de los parámetros que se describen abajo. |
retcode | Código de retorno, si es 1, la repuesta es exitosa. Si es diferente de 1, el número es el código de error. |
UUID | Identificador único del CFDI timbrado. Nota: es el único parámetro que se regresa en mayúsculas. |
data | XML timbrado. |
acuse | Acuse que proporciona el SAT como comprobante de que el CFDI fue recibido satisfactoriamente. Nota: este parámetro pudiera no ser regresado si el servicio de recepción del SAT no se encuentre disponible en el momento de la llamada. |
error | En caso de existir, una descripción del error regresado al intentar validar el XML. |
Otros | Otros parámetros en caso de que se ocupen como referencia, por ejemplo el usuario que hizo el llamado, o algún timestamp. |
Ejemplo de respuesta válida arrojada por el Web Service:
{ "id":"101", "result": { "retcode":1, "UUID":"63C2042F-FAF0-48A0-A9AF-0304813D2528", "data":"<cfdi></cfdi>", "acuse":"<xml></xml>" } }
Ejemplos de errores:
{ "id":0, "result": { "retcode":-1, "error":"Variable q faltante." } }
{ "id":0, "result": { "retcode":-1, "error":"Los datos recibidos no cumplen con el formato JSON correcto." } }
Código | Validación |
---|---|
1002 | El PAC envía versión del estándar no existente. |
1004 | La estructura del comprobante recibido no es válida. |
1006 | El Timbre proporcionado ya existe. UUID: <UUID>. |
1009 | El documento de retenciones no cuenta con los datos mínimos. |
1010 | Sello de certificación inválido. |
1011 | Sello del documento de retenciones inválido. |
1012 | TFD no válido. |
1013 | Versión del estándar no vigente. |
1014 | Comprobante con envío extemporáneo por vigencia de versión. |
1015 | Uso del complemento no vigente. |
1016 | Uso de complemento no permitido. |
1017 | Uso del certificado de FIEL no válido. |
Para cancelar algún CFDI no se necesita que éste haya sido certificado por iTimbre. No obstante, se requiere que el mensaje enviado al SAT incluya cierta información firmada por el emisor del CFDI, por lo que es necesario que se proporcione el sello digital (CSD) con el que fue firmado el CFDI en un archivo PFX. Para más detalle consulte el documento “Manual de Generación del PFX”.
La petición de cancelación seguirá siendo la misma. Se requiere contar con un esquema de aceptación o rechazo de cancelación del CFDI por parte del receptor el cuál aceptará o rechazará las solicitudes de cancelación de los CFDI. iTimbre como proveedor autorizado por el SAT ha preparado el entorno para consumir este nuevo servicio en él cual se han agregado nuevos métodos de consulta al web service de timbrado para verificar el estatus del comprobante y la aceptación o rechazo del cfdi por parte del receptor.
Los parámetros a ser enviados para realizar la cancelación y verificación de respuesta de aceptación o rechazo del XML Nombre del método para cancelar un cfdi es: cancelarCFDI. los parametros son los siguientes:
Parametros:
PARÁMETRO | DESCRIPCIÓN |
---|---|
id | Identificador de referencia asignado por el cliente. Este parámetro no es requerido por el Web Service de iTimbre, sino que tiene como propósito ser utilizado por el cliente como método de control para asegurarse de recibir la respuesta solicitada. Se recomienda utilizar el número de folio interno del XML. |
method | Nombre del método para cancelar un cfdi es: cancelarCFDI. |
params | Debe contener un arreglo con los parámetros: user, pass, status_sat, RFC, rfcReceptor y folios,client. |
user | Usuario del Portal de iTimbre con el que se ingresa al sistema (correo electrónico con el que se registró). |
pass | Contraseña generada por iTimbre al momento de registrar al emisor. |
RFC | RFCdel emisor del CFDI. Nota: es el único parámetro que debe estar en mayúsculas. |
pfx_pass | Llave publica usada para abrir el PFX. |
pfx_pem | Archivo resultante de convertir el certificado (.cer) y la llave (.key) a PEM. Para generar este archivo puede consultar el documento “Manual de Generación del PFX” ofrecido por iTimbre. |
folios | Arreglo que contiene la lista de folios (UUID) a cancelar. El número máximo es de 500 y todos los folios deben pertenecer al mismo emisor y haber sido generados con el mismo CSD que se proporciona en el archivo PFX. |
Ejemplo de codificación de llamado en formato JSON (Un solo folio):
{ "id":1001, "method":"cancelarCFDI", "params": { "user":"miemail@midominio.com", "pass":"cabb17fb8536180e11af6dff0da42132", "RFC":"EEM010101XYZ", "pfx_pass":"Clave de mi archivo PFX", "pfx_pem":"<<Archivo PFX de mi CSD>>", "folios": [ "25916C58-672A-43CD-96EE-F14E0FDD4378", ] } }
Ejemplos para la cancelación para más de un folio.
{ "id":1001, "method":"cancelarCFDI", "params": { "user":"miemail@midominio.com", "pass":"cabb17fb8536180e11af6dff0da42132", "RFC":"EEM010101XYZ", "pfx_pass":"Clave de mi archivo PFX", "pfx_pem":"Archivo PFX de mi CSD", "folios": [ "25916C58-672A-43CD-96EE-F14E0FDD4378", "9F5E685B-1444-4B54-9421-FBC9203686B2", "C0FAA75F-974C-41C9-80A7-5C744517F81F" ] } }
Respuesta:
Parametros para la respuesta:
PARÁMETROS | DESCRIPCIÓN |
---|---|
id | El mismo id que fue enviado en el llamado. |
result | Un arreglo dentro del cual se encuentran el resto de los parámetros que se describen abajo. |
retcode | Código de retorno, si es 1, la repuesta es exitosa. Si es diferente de 1, el número es el código de error. Nota: aunque el valor de retcode sea 1, la solicitud de cancelación no se debe considerar como satisfactoria. Debido a que en el llamado se puede solicitar cancelar más de un CFDI, algunos podrían cancelarse exitosamente mientras que otros no. Es por eso que se debe revisar el parámetro folios, el cual contiene la lista de folios que se solicitaron cancelar con su respectivo código de respuesta. El parametro redcode para retenciones y pagos tiene un significado distinto: Si es 1 –> La cancelación ha sido exitosa y el acuse se regresa en el parámetro acuse_cancelacion Si la respuesta es 2 –> Significa que se activo la cancelación asincrona,entonces se regresa un folio de seguimiento en la variable folio_seguimiento. Si es -1 –>Entonces hubo un error genérico y la descripción se reflejara en la variable error. Cualquier otro valor en el retcode será uno de los códigos del catalogo. |
acuse | Acuse del SAT en caso de que retcode sea 1 y que dentro del arreglo folios haya al menos un UUID cancelado. |
fecha | Fecha en que el SAT cancela el CFDI, en caso de existir acuse. |
signature | Firma del acuse del SAT, en caso de existir. Esta firma es parte del acuse, pero aquí se proporciona por separado por simplificación. |
error | En caso de existir, descripción del error. NOTA: es importante que no exista ningún error para considerar que la cancelación fue exitosa. |
folios | Arreglo que contiene la lista de folios que se enviaron a cancelar y su correspondiente estatus. |
UUID | Identificador único del CFDI timbrado. Nota: es el único parámetro que se regresa en mayúsculas. |
Ejemplo de respuesta válida arrojada por el Web Service (un folio):
{ { "id":1001, "result": { "acuse":"<s:Envelope>Acuse del SAT<\/s:Envelope>", "id":1001, "fecha":"2013-04-15T20:48:39.7200698", "retcode":1, "signature":"AuPN3mjhCjI2NYiif2Mdtdib9nxhTOw5jf7TPIloqqv2RHnsJ5XnHAdkf5A9ccfXJ4fpJNY0k3kNHkwFRQmhXw==", "folios": [ { "UUID":"48D57A35-48BB-4C4B-AB44-678FCBF74D93", "status":"201" } ] } } }
Ejemplo de respuesta válida arrojada por el Web Service (varios folios):
{ "id":1001, "result": { "acuse":"<s:Envelope>Acuse del SAT<\/s:Envelope>", "id":1001,"fecha":"2013-04-15T20:54:30.5215219", "retcode":1, "signature":"6JdRGnok96RTYFHtWyO38VPlz6Q3vNAB45Sd83wQgXVbI7jPcDlA+LGDLbKaGFUyomdkxhF84OztzenYGFKOxw==", "folios": [ { "UUID":"25BB40C3-6884-4975-AEFD-6BE6A58DE83B", "status":"201" }, { "UUID":"A566F905-7312-491D-B428-E93391BA81D8", "status":"201" }, { "UUID":"AA2463D4-A080-4FEB-882F-CC634FDA9D06", "status":"201" } ] } }
Ejemplos de errores:
{ "id":"1001", "result": { "retcode":"305", "error":"La fecha de emision no esta dentro de la vigencia del CSD del Emisor." } }
{ "id":"1001", "result": { "retcode":"303", "error":"Sello no corresponde a emisor." } }
Estos son los parámetros a ser enviados para realizar la Validación del CFDI. Nombre del método para cancelar un cfdi es: validaCFDI. los parametros son los siguientes: