Herramientas de usuario

Herramientas del sitio


web-service-ifactura

Web Service de iFactura

Introducción

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 sus Servicios Web (Software como Servicio) de una manera rápida y segura.

Adicionalmente el Web Service de iFactura le ofrece el servicio de generación y firmado de su XML. A través del Portal de iTimbre usted podrá proporcionar su firma digital (CSD) para que iTimbre se encargue de generar el sello del XML y así ahorrar la programación de esas funciones.

Además de la certificación de sus comprobantes, iFactura le ofrece las siguientes funciones:

  • Cancelación de CFDIs
  • Búsqueda de sus Comprobantes.
  • Respaldos automáticos.
  • Acceso desde cualquier lugar a sus comprobantes y reportes.
  • Acceso desde dispositivos móviles, consolas, SmartTvs, o cualquier gadget con navegador web.
  • Generación automática de PDF.
  • Envío automático de los CFDI al receptor.
  • Generación de reportes de comprobantes generados.
  • Entre otros.

Web Service de iFactura

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 y de implementar.

Registro

El registro de las cuentas se detalla en Registro de cuentas en iFactura.

Conexión

Para realizar la conexión con el Web Service de iFactura es necesario proveer al menos los siguientes datos en el llamado:

  • Cuenta: Es el nombre de la cuenta con la que cuenta en el servicio de facturación.
  • Usuario: El usuario registrado con los permisos suficientes para realizar la operación que se esta solicitando a través del método.
  • Contraseña: Es la clave correspondiente al usuario con el que se está autentificando.
  • Método: Es la función a realizar de acuerdo al catálogo de métodos soportados.
  • Parámetros: Los parámetros son datos adicionales u opcionales que deben enviarse y dependen del método utilizado.

Métodos soportados

Método Parámetro a enviar
Crear Nueva Factura nuevo_factura
Crear Complemento Pago nueva_factura
Convertir CFD en CFDI cfd2cfdi
Crear Nuevo Recibo de Nómina nueva_factura
Cancelar un CFDI cancelarCFDI


Serialización y Envío

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.

Dirección del Servicio: https://facturacion33.itimbre.com/service.php

Métodos

Crear Nuevo Factura

Método: nueva_factura

Método utilizado para generar un nuevo CFDI 3.3, de timbrado, el cual puede corresponder a cualquiera de los siguientes documentos:

  • Factura,
  • Recibo de Honorarios,
  • Recibo de Arrendamiento,
  • Recibo de Donativos,
  • Nota de Cargo,
  • Nota de Crédito,
  • Nota de Devolución,
  • Carta Porte.

NOTA: Es necesario revisar el nuevo catalogo del cfdi SAT donde podra encontrar las claves correspondientes de la nueva facturacion electronica

El llamado recibirá las siguientes validaciones:

  • Los datos enviados están completos.
  • El método utilizado es correcto.
  • Los datos enviados tienen un contenido y formato correspondiente al dato que se indica.
  • Que los datos dependientes de bases de datos en el servidor sean correctos.
  • Que los datos validados por el SAT se encuentren en un formato correcto.

Llamado

Para generar un recibo se deben mandar al servicio solamente los datos correspondientes a los Datos del Comprobante y Conceptos.

Ejemplo de Llamado
{
  "conceptos": [
    {
      "ClaveProdServ": "15101505",
      "ClaveUnidad": "LTR",
      "Importe": "28.88",
      "Unidad": "LTS",
      "noIdentificacion": "16",
      "Cantidad": "2",
      "descripcion": "DISEL",
      "ValorUnitario": "14.44",
      "Impuestos": {
        "Traslados": [
          {
            "Base": "28.88",
            "Impuesto": "002",
            "TipoFactor": "Tasa",
            "TasaOCuota": "0.16",
            "Importe": "4.62"
          },
          {
            "Base": "2",
            "Impuesto": "003",
            "TipoFactor": "Cuota",
            "TasaOCuota": "0.3154",
            "Importe": "0.63"
          }
        ]
      }
    },
    {
      "ClaveProdServ": "15101506",
      "ClaveUnidad": "LTR",
      "Importe": "83.86",
      "Unidad": "LTS",
      "noIdentificacion": "2",
      "Cantidad": "5.51",
      "descripcion": "PREMIUM",
      "ValorUnitario": "15.22",
      "Impuestos": {
        "Traslados": [
          {
            "Base": "83.86",
            "Impuesto": "002",
            "TipoFactor": "Tasa",
            "TasaOCuota": "0.16",
            "Importe": "13.42"
          },
          {
            "Base": "5.51",
            "Impuesto": "003",
            "TipoFactor": "Cuota",
            "TasaOCuota": "0.4637",
            "Importe": "2.55"
          }
        ]
      }
    },
    {
      "ClaveProdServ": "15101506",
      "ClaveUnidad": "LTR",
      "Importe": "84.12",
      "Unidad": "LTS",
      "noIdentificacion": "1",
      "Cantidad": "6.19",
      "descripcion": "MAGNA",
      "ValorUnitario": "13.59",
      "Impuestos": {
        "Traslados": [
          {
            "Base": "84.12",
            "Impuesto": "002",
            "TipoFactor": "Tasa",
            "TasaOCuota": "0.16",
            "Importe": "13.46"
          },
          {
            "Base": "6.19",
            "Impuesto": "003",
            "TipoFactor": "Cuota",
            "TasaOCuota": "0.38",
            "Importe": "2.35"
          }
        ]
      }
    }
  ],
  "datos_factura": {
    "FormaPago": "04",
    "TipoCambio": "1",
    "MetodoPago": "PUE",
    "RegimenFiscal": "601",
    "LugarExpedicion": "22010",
    "Moneda": "MXN",
    "TipoDeComprobante": "I",
    "CondicionesDePago": "Crédito",
    "no_sucursal": "1",
    "SubTotal": "196.86",
    "Version": "3.3",
    "Impuestos": {
      "TotalImpuestosRetenidos": "0",
      "TotalImpuestosTrasladados": "37.03",
      "Traslados": [
        {
          "Impuesto": "002",
          "TipoFactor": "Tasa",
          "TasaOCuota": "0.16",
          "Importe": "31.5"
        },
        {
          "Impuesto": "003",
          "TipoFactor": "Cuota",
          "TasaOCuota": "0.3154",
          "Importe": "0.63"
        },
        {
          "Impuesto": "003",
          "TipoFactor": "Cuota",
          "TasaOCuota": "0.4637",
          "Importe": "2.55"
        },
        {
          "Impuesto": "003",
          "TipoFactor": "Cuota",
          "TasaOCuota": "0.38",
          "Importe": "2.35"
        }
      ]
    },
    "CfdiRelacionados": {
      "TipoRelacion": "01",
      "CfdiRelacionado": {
        "UUID": "0DDABF0D-6576-4CCC-BF1C-6CE3C26A0696"
      }
    }
  },
  "method": "nueva_factura",
  "cliente": {
    "id": "189",
    "UsoCFDI": "G01",
    "nombre": "NUEVA EMPRESA DE EJEMPLO",
    "rfc": "XAXX010101000",
    "correo": "itimbre.lburgos@gmail.com"
  },
  "id_transaccion": 0,
  "cuenta": "demo",
  "user": "administrador",
  "password": "Administr4dor",
  "getPdf": true,
  "enviarFactura": false
}

Respuesta

SI el procesamiento resulta correcto se responderá a la solicitud con un objeto JSON consistente en lo siguiente:

  • id_transacción: El número de la operación. Si se indicó en el llamado será este mismo, sino el valor por defecto es 0.
  • result: Es un objeto que dentro contiene la respuesta, en el caso de ser correcta contiene los siguientes datos:
    • retcode: Es el código de respuesta, el 1 significa correcto.
    • data: Corresponde al folio del recibo que se le asignó en el servicio, este es el que se requiere para generar una factura por medio del servicio de Autofacturación.
ok-recibo.json
{
  "id_transaccion": 0,
  "result": {
    "retcode": 1,
    "data": 8877
  }
}

Si el procesamiento no es correcto, se responderá con un objeto con los siguientes datos:

  • id_transacción: El número de la operación. Si se indicó en el llamado será este mismo, sino el valor por defecto es 0.
  • result: Es un objeto que dentro contiene los detalles de la respuesta, en el caso de ser correcta contiene los siguientes datos:
    • retcode: Es el código de respuesta, cualquier código diferente a 1 es incorrecto, se detalla en el Catálogo de Códigos de Respuesta.
    • data: Consiste en una descripción del error dirigida al usuario.
error-recibo.json
{
  "id_transaccion":0,
  "result": {
    "retcode":10,
    "error":"La cuenta especificada no existe."
  }
}

Crear Complemento de Pago

Método: nueva_factura

Método utilizado para generar un nuevo CFDI 3.3, timbrado, con el complemento de pago

  • Recibo de Pago,

El llamado recibirá las siguientes validaciones:

  • Los datos enviados están completos.
  • El método utilizado es correcto.
  • Los datos enviados tienen un contenido y formato correspondiente al dato que se indica.
  • Que los datos dependientes de bases de datos en el servidor sean correctos.
  • Que los datos validados por el SAT se encuentren en un formato correcto.

Llamado

Para generar una factura se debe enviar al servicio todos los bloques de datos; Datos del Comprobante, Datos del Cliente y Conceptos.

Ejemplo

{
   "conceptos": [{
   "ClaveProdServ": "84111506",
   "ClaveUnidad": "ACT",
   "Importe": "0",
   "Cantidad": "1",
   "descripcion": "Pago",
   "ValorUnitario": "0"
}],
"datos_factura": {
   "RegimenFiscal": "601",
   "LugarExpedicion": "22010",
   "Moneda": "XXX",
   "TipoDeComprobante": "P",
   "numero_de_pago": "1",
   "cantidad_de_pagos": "1",
   "Version": "3.3"
},
"method": "nueva_factura",
"cliente": {
   "id": "189",
   "UsoCFDI": "P01",
   "nombre": "NUEVA EMPRESA DE EJEMPLO",
   "rfc": "XAXX010101000"
},
"Complementos": [{
 "Pagos": [{
       "Pago": {
           "FechaPago": "2017-08-24T10:10:03",
           "FormaDePagoP": "01",
           "MonedaP": "MXN",
           "Monto": "5000",
           "DoctoRelacionado": [{
               "IdDocumento": "54EE66D7-63A1-4761-947A-0A76514AEEF5",
               "MonedaDR": "MXN",
               "MetodoDePagoDR": "PPD",
               "NumParcialidad": "1",
               "ImpSaldoAnt": "1",
               "ImpPagado": "1",
               "ImpSaldoInsoluto": "0"
           }]
       }
   }]
}],
"id_transaccion": 0,
"cuenta": "demo",
"user": "administrador",
"password": "Administr4dor",
"getPdf": true,
"enviarFactura": false
}

Respuesta

SI el procesamiento resulta correcto se responderá a la solicitud con un objeto JSON consistente en lo siguiente:

  • id_transacción: El número de la operación. Si se indicó en el llamado será este mismo, sino el valor por defecto es 0.
  • result: Es un objeto que dentro contiene los detalles de la respuesta, en el caso de ser correcta contiene los siguientes datos:
    • RFC: Es el RFC registrado en la cuenta, a nombre del cual se selló el comprobante.
    • user: ID del usuario con el que se está autentificando en el servicio.
    • retcode: Es el código de respuesta, el 1 significa correcto.
    • UUID: Identificador único del CFDI.
    • data: Contiene el XML completo, en caso de contener addenda en el request ya se encuentra incrustada.
    • stampdate: Fecha del timbrado, fecha en la que se realizó la certificación del comprobante.
    • acuse: Acuse de recepción del SAT, en caso de obtenerse inmediatamente se agrega, normalmente no sucede de esta manera. No es un elemento requerido.
    • client_email: Email del cliente, si no se indicó ninguno se toma del catálogo registrado en la cuenta, si no se encuentra tampoco ahí aparecerá solamente el nombre del cliente seguido de “<>”.
    • pdfBase64: Contiene el PDF generado por la cuenta codificado en Base64, solamente se envía cuando se indica en el llamado.
    • email_result: Resultado del envío del correo. 1 para correcto y -1 para incorrecto.
    • email_error: Mensaje del servidor de correo cuando hay un error en el envío.
ok-factura.json
{
  "id_transaccion": 0,
  "result": {
    "RFC": "XAXX010101000",
    "user": "23",
    "retcode": 1,
    "UUID": "D4F92041-2C5B-402A-A973-7BD84588BE40",
    "data": "<xml/>",
    "stampdate": "2014-07-30T10:00:00-07:00",
    "refID": "44536",
    "acuse": "acuse_sat=false",
    "client_email": "NUEVA EMPRESA DE EJEMPLO<>",
    "pdfBase64": " === PDF EN BASE64 === "
    "email_result": -1,
    "email_error": "ERROR"
  }
}

Si el procesamiento no es correcto, se responderá con un objeto con los siguientes datos:

  • id_transacción: El número de la operación. Si se indicó en el llamado será este mismo, sino el valor por defecto es 0.
  • result: Es un objeto que dentro contiene los detalles de la respuesta, en el caso de ser correcta contiene los siguientes datos:
    • retcode: Es el código de respuesta, cualquier código diferente a 1 es incorrecto, se detalla en el Catálogo de Códigos de Respuesta.
    • error: Consiste en una descripción del error dirigida al usuario.
error-factura.json
{
  "id_transaccion": 0,
  "result": {
    "retcode": 101,
    "error": "Error 301 al timbrar: 'XML mal formado - value 'EEA9709DASD083R7' does not match regular expression facet '[A-Z,Ñ,&]{3,4}[0-9]{2}[0-1][0-9][0-3][0-9][A-Z,0-9]?[A-Z,0-9]?[0-9,A-Z]?' (ERROR)'"
  }
}

Convertir CFD a CFDI

Método: cfd2cfdi

Método para transformar un CFD a CFDI o para solamente agregar el complemento tfd:TimbreFiscalDigital a un CFDI ya generado.

El llamado recibirá las siguientes validaciones:

  • Los datos enviados están completos.
  • El método utilizado es correcto.
  • Los datos enviados tienen un contenido y formato correspondiente al dato que se indica.
  • Que los datos dependientes de bases de datos en el servidor sean correctos.
  • Que los datos validados por el SAT se encuentren en un formato correcto.
  • Se cumple con el estándar XML.

Llamado

Para generar un CFDI desde un CFD, o bien desde un CFDI v3.2 con o sin sellos, es necesario enviar los siguientes datos:

Ejemplo de Llamado
request-cfd2cfdi.json
{
  "method": "cfd2cfdi",
  "xml_version": "2.2",
  "xml_data": "<CFDv2.2/>",
  "id_transaccion": 0,
  "cuenta": "demo",
  "user": "administrador",
  "password": "Administr4dor",
  "getPdf": true,
  "enviarFactura": false
}

Existen las siguientes opciones para enviar al servicio:

CFD v2.2:

Se trata de un CFD de acuerdo a las especificaciones del Anexo 20 para un CFD 2.2, no es necesario alterar nada en el XML para enviarlo al servicio.

CFDv2.2.xml
<?xml version="1.0" encoding="UTF-8"?>
<Comprobante xmlns="http://www.sat.gob.mx/cfd/2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sat.gob.mx/cfd/2 http://www.sat.gob.mx/sitio_internet/cfd/2/cfdv22.xsd" version="2.2" serie="A" folio="42834934824" fecha="2014-04-02T13:49:57" noAprobacion="7564787" anoAprobacion="2013" formaDePago="Pago en una Sola Exhibición" subTotal="45000" total="45000" metodoDePago="No se que" tipoDeComprobante="ingreso" LugarExpedicion="Mexico.DF" Moneda="Pesos" noCertificado="00001000000300561079" certificado="MIIE1DCCA7ygAwIBAgIUMDAwMDEwMDAwMDAzMDA1NjEwNzkwDQYJKoZIhvcNAQEFBQAwggGKMTgwNgYDVQQDDC9BLkMuIGRlbCBTZXJ2aWNpbyBkZSBBZG1pbmlzdHJhY2nDs24gVHJpYnV0YXJpYTEvMC0GA1UECgwmU2VydmljaW8gZGUgQWRtaW5pc3RyYWNpw7NuIFRyaWJ1dGFyaWExODA2BgNVBAsML0FkbWluaXN0cmFjacOzbiBkZSBTZWd1cmlkYWQgZGUgbGEgSW5mb3JtYWNpw7NuMR8wHQYJKoZIhvcNAQkBFhBhY29kc0BzYXQuZ29iLm14MSYwJAYDVQQJDB1Bdi4gSGlkYWxnbyA3NywgQ29sLiBHdWVycmVybzEOMAwGA1UEEQwFMDYzMDAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBEaXN0cml0byBGZWRlcmFsMRQwEgYDVQQHDAtDdWF1aHTDqW1vYzEVMBMGA1UELRMMU0FUOTcwNzAxTk4zMTUwMwYJKoZIhvcNAQkCDCZSZXNwb25zYWJsZTogQ2xhdWRpYSBDb3ZhcnJ1YmlhcyBPY2hvYTAeFw0xMzA3MjUyMjI3MDFaFw0xNzA3MjUyMjI3MDFaMIIBHzE0MDIGA1UEAxMrQkVOQ0hNQVJLIEVMRUNUUk9OSUNTIFRJSlVBTkEgUyBERSBSTCBERSBDVjE0MDIGA1UEKRMrQkVOQ0hNQVJLIEVMRUNUUk9OSUNTIFRJSlVBTkEgUyBERSBSTCBERSBDVjE0MDIGA1UEChMrQkVOQ0hNQVJLIEVMRUNUUk9OSUNTIFRJSlVBTkEgUyBERSBSTCBERSBDVjElMCMGA1UELRMcU01FMDUwNTA0QTQ3IC8gU0FVTDcxMTExNTdZNjEeMBwGA1UEBRMVIC8gU0FVTDcxMTExNUhCQ0NSUzA0MTQwMgYDVQQLEytCZW5jaG1hcmsgRWxlY3Ryb25pY3MgVGlqdWFuYSBTIGRlIFJMIGRlIENWMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDI/m/CdQOoHxgG33WyEENzmbhziOc/yAHdIgFw1CIEkh1DObgb8GxAOy27BAIBRtJirglapbj3CO6cJb72XodBIpNYukwjb8/mytKPDIUNAP2J+Wm7We4C54MfITf8IAcbWFT0rmJnzUEOCul8/Lz6WjdV16DIe6UC90IxpvmTGQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQUFAAOCAQEAcXDQ+MrJaMxZXRtfHUm8Z4BC1j3fY41UCaJBmKRZP63IhsOp/TUKTb64TR3KJuJSzY7vJ40pptyLnjj43fIAZd1RC5aTCQX8ilWDZMIBgKrAEaTXfxnUrTs+DeFd6HkZb5HFQUEbynXyXnxz31XM9I9UeM1wrQdkTCJwUzNqqrOR4cKsNtf7xUi3tV+R7hiJNlN6AGJchEugb5cz7pgd93UL5Kghf9YIMqOnQQTF12y7XzTnxvtHVYbYHc3ARBx29a7SlcKiJxDqRW1R8gASK6Y4GvPyYNjhgHeXlFAIsMSJn+6Qd8xEf6J8CbZxSI84nKJ1xN+FNDmu+lZYldOk1Q==" sello="gb/U+E7kI3cTckoOpRfHeONKR9Q8RsHeRsOe5I8GWaesGrCQUU6CncNvDGljHgCeyIsaUDb14YZNprSaMB8++Yz3rzj6Xo1SbmD4q8xDFysc0U3kOPg5aTV6gAP2YL9gWdNuT0eQfzZVKKHgoFG/Pnz+pH3TqBbOAN4+p6Btjgc=">
  <Emisor rfc="XAXX010101000" nombre="Empresa de Prueba SA de CV">
    <DomicilioFiscal calle="Fuerza Aerea" noExterior="35" colonia="Colonia" localidad="TIJUANA" municipio="TIJUANA" estado="Baja California Norte" pais="MEXICO" codigoPostal="22222"/>
    <ExpedidoEn localidad="Tijuana" estado="Baja California Norte" pais="Mexico"/>
    <RegimenFiscal Regimen="Régimen General de Ley Personas Morales"/>
  </Emisor>
  <Receptor rfc="XEXX010101000" nombre="Cliente SA">
    <Domicilio calle="Calle del Cliente" noExterior="1234" colonia="Afueras" localidad="Ciudad de México" estado="Distrifo Federal" pais="México" codigoPostal="00000"/>
  </Receptor>
  <Conceptos>
    <Concepto cantidad="1" unidad="N/A" noIdentificacion="01" descripcion="SERVICIO" valorUnitario="150000.0000" importe="150000.00"/>
  </Conceptos>
  <Impuestos totalImpuestosTrasladados="0.00">
    <Traslados>
      <Traslado impuesto="IVA" tasa="0" importe="0.00"/>
    </Traslados>
  </Impuestos>
</Comprobante>

CFD v3.2 con Sellos:

Es un CFDI 3.2 con todos los elementos requeridos, excepto por el complemento tfd:TimbreFiscalDigital, el cual se agregará por el servicio.

CFDv3.2.xml
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<cfdi:Comprobante xmlns:cfdi="http://www.sat.gob.mx/cfd/3" LugarExpedicion="Tijuana,Baja California Norte" Moneda="Pesos" certificado="MIIEjDCCA3SgAwIBAgIUMDAwMDEwMDAwMDAyMDM0NjI5ODMwDQYJKoZIhvcNAQEFBQAwggGVMTgwNgYDVQQDDC9BLkMuIGRlbCBTZXJ2aWNpbyBkZSBBZG1pbmlzdHJhY2nDs24gVHJpYnV0YXJpYTEvMC0GA1UECgwmU2VydmljaW8gZGUgQWRtaW5pc3RyYWNpw7NuIFRyaWJ1dGFyaWExODA2BgNVBAsML0FkbWluaXN0cmFjacOzbiBkZSBTZWd1cmlkYWQgZGUgbGEgSW5mb3JtYWNpw7NuMSEwHwYJKoZIhvcNAQkBFhJhc2lzbmV0QHNhdC5nb2IubXgxJjAkBgNVBAkMHUF2LiBIaWRhbGdvIDc3LCBDb2wuIEd1ZXJyZXJvMQ4wDAYDVQQRDAUwNjMwMDELMAkGA1UEBhMCTVgxGTAXBgNVBAgMEERpc3RyaXRvIEZlZGVyYWwxFDASBgNVBAcMC0N1YXVodMOpbW9jMRUwEwYDVQQtEwxTQVQ5NzA3MDFOTjMxPjA8BgkqhkiG9w0BCQIML1Jlc3BvbnNhYmxlOiBDZWNpbGlhIEd1aWxsZXJtaW5hIEdhcmPDrWEgR3VlcnJhMB4XDTEzMDQxNTE4MzM0MloXDTE3MDQxNTE4MzM0Mlowgc0xKjAoBgNVBAMTIU9MSVZFUiBYSUNPVEVOQ0FUTCBPTE1PUyBNQVJUSU5FWjEqMCgGA1UEKRMhT0xJVkVSIFhJQ09URU5DQVRMIE9MTU9TIE1BUlRJTkVaMSowKAYDVQQKEyFPTElWRVIgWElDT1RFTkNBVEwgT0xNT1MgTUFSVElORVoxFjAUBgNVBC0TDU9PTU84NTAyMTlCRjgxGzAZBgNVBAUTEk9PTU84NTAyMTlIREdMUkwwNTESMBAGA1UECxMJTk8gQVBMSUNBMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDQEUod/knzrkEMFX/StAoV8pyGHj0B/onziMWvtmyNUixMu3I8fhcW019fzXmu8j41wws67a4T4eTdBnyb9kQActbJ4/Ww7ckSGZu4B+BqoqrqeKZ5KSd8k5DHCoKnhNcAVqLt7rCJiT9M4qIsgHH+hP+wL7OHYRtOwWBH2ulFDwIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQUFAAOCAQEARZ74t6jm4WbdvwiolqGPE3KSIx9TkGVxtTXMOVNTShCzFlETnIh2vM0YpvXt5YCr0deireamg9PvKsRWc1k7sWgRnf700G5PYltzKFKtBTII0Fxqxd1Ib8vt+vmduT1kyE27y5BHlAh5u4KlC64cMl1VRxYYBGM5f/3XhxRhJQNin5CZqf3jQq9E4nmargIv4m3S8wKRqJxXKUW5mmMXiROW+0BNbivY7dd68zNnZUJydlcAS8t0Y4JKVEbsKDjwBUySKE3zM+hV9uvpmcob9xxUwMt+36jIV0nuUHAQWSfrcAWTfaJBf57CP3MonjhfO0Nz69AyxodB0QAJQk/T+g==" descuento="0.00" fecha="2014-03-02T09:46:03" folio="42834934824" formaDePago="Pago en una sola exhibición" metodoDePago="99" noCertificado="00001000000203462983" sello="LaQqUcGySP2fwPBpA6pAk1nCOceNhpMwQoGKAW/njtFayrbr6d61R7Ezhmq3mXZRc0FVbfufxsy3f2soC6YYsub0TyHQXExSojIiBdkDuYi4lI+XuIVpo0QACFdRcJaLnqYOeOUGHRKfrIwvVSUrOdNUUEKNYR/F91kf/JWtn10=" serie="A" subTotal="150000.00" tipoDeComprobante="ingreso" total="150000.00" version="3.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv32.xsd">
  <cfdi:Emisor nombre="Carlos Valentin Perez Nango" rfc="XAXX010101000">
    <cfdi:DomicilioFiscal calle="calle 15" codigoPostal="22400" colonia="Libertad" estado="Baja California" municipio="Tijuana" noExterior="830" pais="México"/>
    <cfdi:ExpedidoEn estado="Baja California Norte" localidad="Tijuana" pais="Mexico"/>
    <cfdi:RegimenFiscal Regimen="Rgimen General de Ley Personas Morales"/>
  </cfdi:Emisor>
  <cfdi:Receptor nombre="Cliente SA" rfc="XEXX010101000">
    <cfdi:Domicilio calle="Calle del Cliente" codigoPostal="00000" colonia="Afueras" estado="Distrifo Federal" noExterior="1234" pais="Mexico"/>
  </cfdi:Receptor>
  <cfdi:Conceptos>
    <cfdi:Concepto cantidad="1.00" descripcion="SERVICIO" importe="150000.00" unidad="N/A" valorUnitario="150000.00"/>
  </cfdi:Conceptos>
  <cfdi:Impuestos totalImpuestosRetenidos="0.00" totalImpuestosTrasladados="0.00">
    <cfdi:Retenciones>
      <cfdi:Retencion importe="0.00" impuesto="IVA"/>
      <cfdi:Retencion importe="0.00" impuesto="ISR"/>
    </cfdi:Retenciones>
    <cfdi:Traslados>
      <cfdi:Traslado importe="0.00" impuesto="IVA" tasa="0.00"/>
    </cfdi:Traslados>
  </cfdi:Impuestos>
</cfdi:Comprobante>

CFD v3.2 sin Sellos:

Se trata de un CFD 3.2, con todos los elementos requerido excepto por Certificado, Sello y NoCertificado.

CFDv3.2-sin-Sello.xml
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<cfdi:Comprobante xmlns:cfdi="http://www.sat.gob.mx/cfd/3" LugarExpedicion="Tijuana, B.C." Moneda="MXN" NumCtaPago="1245"  condicionesDePago="Crédito" descuento="0.00" fecha="2014-03-01T11:32:45" serie= "AL" folio="8345723842738" formaDePago="Pago en una sola exhibición" metodoDePago="03" noCertificado="" sello="" certificado="" subTotal="700.00" tipoDeComprobante="ingreso" total="422.00" version="3.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv32.xsd">
  <cfdi:Emisor nombre="Carlos Valentin Perez Nango" rfc="XAXX010101000">
    <cfdi:DomicilioFiscal calle="calle 15" codigoPostal="22400" colonia="Libertad" estado="Baja California" municipio="Tijuana" noExterior="830" pais="México"/>
    <cfdi:RegimenFiscal Regimen="Régimen General"/>
  </cfdi:Emisor>
  <cfdi:Receptor nombre="NUEVA EMPRESA DE EJEMPLO" rfc="EEA9709083R7">
    <cfdi:Domicilio calle="PRINCIPAL" codigoPostal="22140" colonia="CACHO" estado="BAJA CALIFORNIA" municipio="TIJUANA" noExterior="150" noInterior="B" pais="Mexico"/>
  </cfdi:Receptor>
  <cfdi:Conceptos>
    <cfdi:Concepto cantidad="10.00" descripcion="Tomate saladette s/m" importe="200.00" noIdentificacion="640130" unidad="Kg" valorUnitario="20.00"/>
    <cfdi:Concepto cantidad="50.00" descripcion="Cebolla Blanca pelada s/m" importe="500.00" noIdentificacion="766115" unidad="Kg" valorUnitario="10.00"/>
  </cfdi:Conceptos>
  <cfdi:Impuestos totalImpuestosRetenidos="300.00" totalImpuestosTrasladados="22.00">
    <cfdi:Retenciones>
      <cfdi:Retencion importe="100.00" impuesto="IVA"/>
      <cfdi:Retencion importe="200.00" impuesto="ISR"/>
    </cfdi:Retenciones>
    <cfdi:Traslados>
      <cfdi:Traslado importe="22.00" impuesto="IVA" tasa="11.00"/>
    </cfdi:Traslados>
  </cfdi:Impuestos>
</cfdi:Comprobante>

Respuesta

SI el procesamiento resulta correcto se responderá a la solicitud con un objeto JSON consistente en lo siguiente:

  • id_transacción: El número de la operación. Si se indicó en el llamado será este mismo, sino el valor por defecto es 0.
  • result: Es un objeto que dentro contiene los detalles de la respuesta, en el caso de ser correcta contiene los siguientes datos:
    • RFC: Es el RFC registrado en la cuenta, a nombre del cual se selló el comprobante.
    • user: ID del usuario con el que se está autentificando en el servicio.
    • retcode: Es el código de respuesta, el 1 significa correcto.
    • UUID: Identificador único del CFDI.
    • data: Contiene el XML completo, en caso de contener addenda en el request ya se encuentra incrustada.
    • stampdate: Fecha del timbrado, fecha en la que se realizó la certificación del comprobante.
    • acuse: Acuse de recepción del SAT, en caso de obtenerse inmediatamente se agrega, normalmente no sucede de esta manera. No es un elemento requerido.
    • client_email: Email del cliente, si no se indicó ninguno se toma del catálogo registrado en la cuenta, si no se encuentra tampoco ahí aparecerá solamente el nombre del cliente seguido de “<>”.
    • pdfBase64: Contiene el PDF generado por la cuenta codificado en Base64, solamente se envía cuando se indica en el llamado.
    • email_result: Resultado del envío del correo. 1 para correcto y -1 para incorrecto.
    • email_error: Mensaje del servidor de correo cuando hay un error en el envío.
ok-cfd2cfdi.json
{
  "id_transaccion": 0,
  "result": {
    "RFC": "XAXX010101000",
    "user": "23",
    "retcode": 1,
    "UUID": "D4F92041-2C5B-402A-A973-7BD84588BE40",
    "data": "<xml/>",
    "stampdate": "2014-07-30T10:00:00-07:00",
    "ip_addr": "10.0.1.6",
    "refID": "44536",
    "acuse": "acuse_sat=false",
    "client_email": "NUEVA EMPRESA DE EJEMPLO<>",
    "pdfBase64": " === PDF EN BASE64 === "
    "email_result": -1,
    "email_error": "ERROR"
  }
}

Si el procesamiento no es correcto, se responderá con un objeto con los siguientes datos:

  • id_transacción: El número de la operación. Si se indicó en el llamado será este mismo, sino el valor por defecto es 0.
  • result: Es un objeto que dentro contiene los detalles de la respuesta, en el caso de ser correcta contiene los siguientes datos:
    • retcode: Es el código de respuesta, cualquier código diferente a 1 es incorrecto, se detalla en el Catálogo de Códigos de Respuesta.
    • error: Consiste en una descripción del error dirigida al usuario.
error-cfd2cfdi.json
{
  "id_transaccion": 0,
  "result": {
    "retcode": -1,
    "error": "El folio ya existe."
  }
}

Nuevo Recibo de Nómina

Método: nueva_factura

Método para generar un cfdi 3.3 con el complemento de nomina 1.2 timbrado.

El llamado recibirá las siguientes validaciones:

  • Los datos enviados están completos.
  • El método utilizado es correcto.
  • Los datos enviados tienen un contenido y formato correspondiente al dato que se indica.
  • Que los datos dependientes de bases de datos en el servidor sean correctos.
  • Que los datos validados por el SAT se encuentren en un formato correcto.

Llamado

Para generar un Recibo de Nómina CFDI es necesario enviar los siguientes datos:

Ejemplo de Llamado
{
  "conceptos": [{
   "Cantidad": "1",
   "ClaveUnidad": "ACT",
   "Descripcion": "Pago de nómina",
   "ClaveProdServ": "84111505",
   "ValorUnitario": "6500.35",
   "Importe": "6500.35",
   "Descuento": "2678.95"
}],
"datos_factura": {
   "FormaPago": "99",
   "SubTotal": "6500.35",
   "Descuento": "2678.95",
   "Total": "3821.4",
   "MetodoPago": "PUE",
   "RegimenFiscal": "601",
   "LugarExpedicion": "32250",
   "Moneda": "MXN",
   "TipoDeComprobante": "N",
   "correo": "info-social@mpsnamex.com",
   "Version": "3.3"
},
"method": "nueva_factura",
"cliente": {
   "id": "1",
   "UsoCFDI": "P01",
   "nombre": "EMPRESA DEMO NAMEX",
   "rfc": "WJU070709R29"
},
"Complementos": [{
  "Nomina": {
       "Version": "1.2",
       "TipoNomina": "O",
       "FechaPago": "2017-11-07",
       "FechaInicialPago": "2017-10-16",
       "FechaFinalPago": "2017-10-22",
       "NumDiasPagados": "7.000",
       "TotalPercepciones": "6500.35",
       "TotalDeducciones": "2678.95",
       "Emisor": {
           "RegistroPatronal": "A8362671100"
       },
       "Receptor": {
           "UsoCFDI": "P01",
           "Rfc": "RILJ8007122A1",
           "Nombre": "JESUS ABRAHAM RIVAS LOZANO",
           "Curp": "RILJ800712HCHVZS09",
           "NumSeguridadSocial": "33998067111",
           "FechaInicioRelLaboral": "2011-11-14",
           "Antigüedad": "P310W",
           "TipoContrato": "01",
           "Sindicalizado": "No",
           "TipoJornada": "01",
           "TipoRegimen": "02",
           "NumEmpleado": "50",
           "RiesgoPuesto": "5",
           "PeriodicidadPago": "02",
           "Banco": "012",
           "CuentaBancaria": "02796492118",
           "SalarioBaseCotApor": "870.52",
           "SalarioDiarioIntegrado": "0",
           "ClaveEntFed": "CHH"
       },
       "Percepciones": {
           "TotalSueldos": "6500.35",
           "TotalSeparacionIndemnizacion": "0",
           "TotalGravado": "5691",
           "TotalExento": "809.35",
           "Percepcion": [{
                   "TipoPercepcion": "001",
                   "Clave": "Sueldos",
                   "Concepto": "Percepcion Normal   45,00 H SB=813,00",
                   "ImporteGravado": "4878",
                   "ImporteExento": "0"
               },
               {
                   "TipoPercepcion": "001",
                   "Clave": "Sueldos",
                   "Concepto": "Septimo Dia",
                   "ImporteGravado": "813",
                   "ImporteExento": "0"
               },
               {
                   "TipoPercepcion": "005",
                   "Clave": "FdoAhoPat",
                   "Concepto": "Fdo Aho Aportacion Patronal",
                   "ImporteGravado": "0",
                   "ImporteExento": "728.35"
               },
               {
                   "TipoPercepcion": "029",
                   "Clave": "ValeDespen",
                   "Concepto": "Vales de Despensa",
                   "ImporteGravado": "0",
                   "ImporteExento": "81"
               }
           ]
       },
       "Deducciones": {
           "TotalOtrasDeducciones": "1699.12",
           "TotalImpuestosRetenidos": "979.83",
           "Deduccion": [{
                   "TipoDeduccion": "002",
                   "Clave": "ISR",
                   "Concepto": "ISR",
                   "Importe": "979.83"
               },
               {
                   "TipoDeduccion": "001",
                   "Clave": "IMSS",
                   "Concepto": "IMSS",
                   "Importe": "162.38"
               },
               {
                   "TipoDeduccion": "004",
                   "Clave": "FdoAhoPat",
                   "Concepto": "Fdo Aho Aportacion Patronal",
                   "Importe": "728.35"
               },
               {
                   "TipoDeduccion": "004",
                   "Clave": "DedFdoAho",
                   "Concepto": "Fdo Aho Empl Acum Empl= 32465,41 Empr= 32465,41",
                   "Importe": "728.35"
               },
               {
                   "TipoDeduccion": "004",
                   "Clave": "CAFETERIA",
                   "Concepto": "CAFETERIA",
                   "Importe": "80.04"
               }
           ]
       }
   }
}],
"id_transaccion": 0,
"cuenta": "demo",
"user": "administrador",
"password": "Administr4dor",
"getPdf": true,
"enviarFactura": false
}

Respuesta

SI el procesamiento resulta correcto se responderá a la solicitud con un objeto JSON consistente en lo siguiente:

  • id_transacción: El número de la operación. Si se indicó en el llamado será este mismo, sino el valor por defecto es 0.
  • result: Es un objeto que dentro contiene los detalles de la respuesta, en el caso de ser correcta contiene los siguientes datos:
    • RFC: Es el RFC registrado en la cuenta, a nombre del cual se selló el comprobante.
    • user: ID del usuario con el que se está autentificando en el servicio.
    • retcode: Es el código de respuesta, el 1 significa correcto.
    • UUID: Identificador único del CFDI.
    • data: Contiene el XML completo, en caso de contener addenda en el request ya se encuentra incrustada.
    • stampdate: Fecha del timbrado, fecha en la que se realizó la certificación del comprobante.
    • acuse: Acuse de recepción del SAT, en caso de obtenerse inmediatamente se agrega, normalmente no sucede de esta manera. No es un elemento requerido.
    • client_email: Email del cliente, si no se indicó ninguno se toma del catálogo registrado en la cuenta, si no se encuentra tampoco ahí aparecerá solamente el nombre del cliente seguido de “<>”.
    • pdfBase64: Contiene el PDF generado por la cuenta codificado en Base64, solamente se envía cuando se indica en el llamado.
    • email_result: Resultado del envío del correo. 1 para correcto y -1 para incorrecto.
    • email_error: Mensaje del servidor de correo cuando hay un error en el envío.
ok-nomina2cfdi.json
{
  "id_transaccion": 0,
  "result": {
    "RFC": "XAXX010101000",
    "user": "23",
    "retcode": 1,
    "UUID": "D4F92041-2C5B-402A-A973-7BD84588BE40",
    "data": "<xml/>",
    "stampdate": "2014-07-30T10:00:00-07:00",
    "ip_addr": "10.0.1.6",
    "refID": "44536",
    "acuse": "acuse_sat=false",
    "client_email": "NUEVA EMPRESA DE EJEMPLO<>",
    "pdfBase64": " === PDF EN BASE64 === "
    "email_result": -1,
    "email_error": "ERROR"
  }
}

Si el procesamiento no es correcto, se responderá con un objeto con los siguientes datos:

  • id_transacción: El número de la operación. Si se indicó en el llamado será este mismo, sino el valor por defecto es 0.
  • result: Es un objeto que dentro contiene los detalles de la respuesta, en el caso de ser correcta contiene los siguientes datos:
    • retcode: Es el código de respuesta, cualquier código diferente a 1 es incorrecto, se detalla en el Catálogo de Códigos de Respuesta.
    • error: Consiste en una descripción del error dirigida al usuario.
error-nomina2cfdi.json
{
  "id_transaccion": 0,
  "result": {
    "retcode": 101,
    "error": "Error 301 al timbrar: 'XML mal formado - value 'valor-invalido' not in enumeration (ERROR)'"
  }
}

Cancelar un CFDI

Método: cancelarCFDI

Método para cancelar un CFDI generado a través del webservice de iFactura.

El llamado recibirá las siguientes validaciones:

  • Los datos enviados están completos.
  • El método utilizado es correcto.
  • Los datos enviados tienen un contenido y formato correspondiente al dato que se indica.
  • Que los datos dependientes de bases de datos en el servidor sean correctos.
  • Que los datos validados por el SAT se encuentren en un formato correcto.

Llamado

Para cancelar un CFDI es necesario enviar los siguientes datos:

Ejemplo de Llamado
request-cancelarCFDI.json
{
  "method": "cancelarCFDI",
  "cancelaciones": [
    {
      "uuid": "344DEDAB-6AD3-4BC6-AD09-A30D6D925327",
      "serie": "A",
      "folio": "1756"
    },
    {
      "uuid": "B8A5D757-72DA-4B5A-AD5E-9F1E91ECF395",
      "serie": "A",
      "folio": "1757"
    },
    {
      "serie": "A",
      "folio": "99999",
      "esNomina": "SI"
    }
  ],
  "id_transaccion": 0,
  "cuenta": "demo",
  "user": "administrador",
  "password": "Administr4dor"
}

Respuesta

SI el procesamiento resulta correcto se responderá a la solicitud con un objeto JSON consistente en lo siguiente:

  • id_transacción: El número de la operación. Si se indicó en el llamado será este mismo, sino el valor por defecto es 0.
  • result: Es un objeto que dentro contiene los detalles de la respuesta, en el caso de ser correcta contiene los siguientes datos:
    • RFC: Es el RFC registrado en la cuenta, a nombre del cual se selló el comprobante.
    • user:
    • retcode: Es el código de respuesta, el 1 significa correcto.

Si el procesamiento no es correcto, se responderá con un objeto con los siguientes datos:

  • id_transacción: El número de la operación. Si se indicó en el llamado será este mismo, sino el valor por defecto es 0.
  • result: Es un objeto que dentro contiene los detalles de la respuesta, en el caso de ser correcta contiene los siguientes datos:
    • retcode: Es el código de respuesta, cualquier código diferente a 1 es incorrecto, se detalla en el Catálogo de Códigos de Respuesta.
    • error: Consiste en una descripción del error dirigida al usuario.
    • notFoundInternalFolios: Es un arreglo que contiene los CFDI no encontrados divididos por “payrolls” e “invoices”.
error-cancelarCFDI.json
{
  "id_transaccion": 0,
  "result": {
    "retcode": -1,
    "error": "Respuesta no esperada al intentar enviar el CFDI al SAT.",
    "notFoundInternalFolios": {
      "payrolls": [
        "A99999"
      ]
    }
  }
}

Catálogo de Datos Soportados

El catálogo de datos soportados por el servicio se encuentra en el Catálogo de Datos Soportados.

Nuevo esquema de Cancelación de CFDI 3.3

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.

Flujo del nuevo esquema de cancelación

esquema-de-cancelacion-de-facturas.jpg

Llamado

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.
client Parametro para validar el tipo de cliente, valores permitidos cfdfactura (Clientes que utilizan el servicio de facturacion33.itimbre.com) integracion_libre (clientes que utilizan el servicio de portalws.timbre.com)
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.

Ejemplos Cancelación.

Ejemplo de codificación de llamado en formato JSON (Un solo folio):

llamada-1cancelacion.json
{
"id":1001,
"method":"cancelarCFDI",
"params": {
"user":"miemail@midominio.com",
"pass":"cabb17fb8536180e11af6dff0da42132",
"RFC":"EEM010101XYZ",
"client":"cfdfactura",
"folios": [
"25916C58-672A-43CD-96EE-F14E0FDD4378",
]
}
}

Ejemplos para la cancelación para más de un folio.

llamada-Xcancelacion.json
{
    "id":1001,
    "method":"cancelarCFDI",
    "params": {
        "user":"miemail@midominio.com",
        "pass":"cabb17fb8536180e11af6dff0da42132",
        "RFC":"EEM010101XYZ",
        "client":"cfdfactura",
        "folios": [
            "25916C58-672A-43CD-96EE-F14E0FDD4378",
            "9F5E685B-1444-4B54-9421-FBC9203686B2",
            "C0FAA75F-974C-41C9-80A7-5C744517F81F"
        ]
    }
}


web-service-ifactura.txt · Última modificación: 2018/12/18 12:21 por