Autenticación
La autenticación de la cuenta se hace mediante el uso de los headers (encabezados) de una petición. El API requerirá el uso de la credencial API KEY PRIVADA encontrada en la sección de configuración. Es importante lo siguiente:
- Usar tu API KEY PRIVADA correcta para el ambiente en el que estás trabajando. Para modo de pruebas utilizar el API KEY PRIVADA de sandbox y para producción utilizar el API KEY PRIVADA de producción.
- Nunca compartas tus API KEYS, ya que contienen información confidencial de tu cuenta y cualquier persona con ellas podrá realizar movimientos en ella.
using System.Net.Http;
using System.Web;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
private string GetPostResponse(String uri, Dictionary data) {
try {
string jsonData = JsonConvert.SerializeObject(data);
using (var client = new HttpClient()) {
client.DefaultRequestHeaders.Add("Authorization", $"Token token=#{EMPRESA_API_KEY_PRIVADA}");
client.DefaultRequestHeaders.Add("ACCEPT", "application/json");
client.DefaultRequestHeaders.Add("CONTENT_TYPE", "application/json");
client.DefaultRequestHeaders.Add("Access-Control-Allow-Origin", "*");
client.DefaultRequestHeaders.Add("Method", "POST");
var response = client.PostAsync(uri, new StringContent(jsonData, System.Text.Encoding.Default, "application/json"));
var response_string = response.Result.Content.ReadAsStringAsync();
Console.WriteLine(response_string.Result);
return response_string.Result;
}
} catch(Exception e) {
Console.WriteLine("{0} Excepcion.", e);
return null;
}
}
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
public final static okhttp3.MediaType JSON = okhttp3.MediaType.parse("application/json; charset=utf-8");
private String getPostResponse(String uri, String data) {
try {
OkHttpClient client = new OkHttpClient();
RequestBody body = RequestBody.create(JSON, data);
Request request = new Request.Builder().url(uri).post(body)
.header("Authorization", "Token token=".concat('#{EMPRESA_API_KEY_PRIVADA}'))
.addHeader("ACCEPT", "application/json")
.addHeader("CONTENT_TYPE", "application/json")
.addHeader("Access-Control-Allow-Origin", "*").build();
Response response = client.newCall(request).execute();
return response.body().string();
} catch(Exception e) {
System.out.println(e);
return null;
}
}
use GuzzleHttp\Client;
use GuzzleHttp\Psr7\Request;
use GuzzleHttp\Psr7;
private function getPostResponse($uri, $data) {
$client = new GuzzleHttp\Client(['base_uri' => $uri]);
$options = ['headers' => [
'Authorization' => "Token token=#{EMPRESA_API_KEY_PRIVADA}",
'Accept' => 'application/json',
'Content-Type' => 'application/json',
'Access-Control-Allow-Origin' => '*'
],'body' => json_encode($data)];
$response = $client->request('POST', $uri, $options);
$stream = Psr7\stream_for($response->getBody());
return json_decode($stream, true);
}
require 'unirest'
require 'json'
def get_post_response(uri, data)
headers = {"Authorization": "Token token=#{EMPRESA_API_KEY_PRIVADA}", "Accept": "application/json", "Content-Type": "application/json", "Access-Control-Allow-Origin" => "*"}
response = Unirest.post uri, headers:headers, parameters:data.to_json
return response.body
end
Estructura
El objeto JSON se compone de dos estructuras principales. Los atributos y sub-estructuras, varían de acuerdo a la acción solicitada del API y las propiedades de los objetos de los cuales se desea ejecutar la acción específica.
La definición de la estructura data se define de diferente manera de acuerdo al objeto y acción.
Meta
Atributo | Tipo de dato | Descripción | Requerido |
---|---|---|---|
empresa_uid | string | Identificador de la empresa | Si |
empresa_api_key | string | API KEY pública de la empresa | Si |
ambiente | string | Indica si es ambiente de sandbox o producción. Acepta valores "S" o "P" | Si |
objeto | string | Identificador del elemento. Acepta el valor "factura" | Si |
{
"meta":{
"empresa_uid":"asd123asd",
"empresa_api_key":"123123123",
"ambiente":"S",
"objeto":"factura"
},
"data":[
{
# Comprobantes
}
]
}
Certificado de Sello Digital
Para hacer uso del API, es necesario que se tenga disponible el certificado de sellos digitales, la llave privada y su contraseña.
using System;
using System.Collections;
using System.Collections.Generic;
using System.Security.Cryptography.X509Certificates;
using System.Security.Cryptography;
using System.Text;
using System.IO;
using ApiFacturacionDocDigitales;
using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Security;
using Org.BouncyCastle.OpenSsl;
namespace ApiFacturacionDocDigitales
{
public class CertificadosDocDigitales {
public string ExportarCertificadoPem(string pathCertificado) {
X509Certificate cert = X509Certificate.CreateFromCertFile(pathCertificado);
string contenido = Convert.ToBase64String(cert.Export(X509ContentType.Cert), Base64FormattingOptions.InsertLineBreaks);
string pem = FormatoPEMCertificado(contenido, new StringBuilder());
return pem;
}
public string ExportarLlavePem(string pathLlave, string passwordLlave) {
byte[] llaveBytes = File.ReadAllBytes(pathLlave);
AsymmetricKeyParameter asp = PrivateKeyFactory.DecryptKey(passwordLlave.ToCharArray(), llaveBytes);
StringWriter stWriter = new StringWriter();
PemWriter pmw = new PemWriter(stWriter);
pmw.WriteObject(asp);
stWriter.Close();
return stWriter.ToString();
}
private string FormatoPEMCertificado(string contenido, StringBuilder builder) {
builder.AppendLine("-----BEGIN CERTIFICATE-----");
builder.AppendLine(contenido);
builder.AppendLine("-----END CERTIFICATE-----");
return builder.ToString();
}
}
}
package docdigitales;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.StringWriter;
import java.nio.file.Files;
import java.security.cert.CertificateEncodingException;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import javax.xml.bind.DatatypeConverter;
public class Certificados {
public static String exportarCertificadoPem(String pathCertificado) {
try {
CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
byte[] buffer = Files.readAllBytes(new File(pathCertificado).toPath());
X509Certificate cert = (X509Certificate)certFactory.generateCertificate(new ByteArrayInputStream(buffer));
return formatoPemCertificado(cert, new StringWriter());
} catch (Exception ioe) {
System.out.println(ioe.toString());
return null;
}
}
private static String formatoPemCertificado(X509Certificate certificado, StringWriter writer) {
try {
writer.write("-----BEGIN CERTIFICATE-----\n");
writer.write(DatatypeConverter.printBase64Binary(certificado.getEncoded()).replaceAll("(.{64})", "$1\n"));
writer.write("\n-----END CERTIFICATE-----\n");
} catch (CertificateEncodingException e) {
return null;
}
return writer.toString();
}
}
class Certificados {
public function contenidoCertificado($pathCertificado) {
$archivo = file_get_contents($pathCertificado);
$cert = "-----BEGIN CERTIFICATE-----\n" . chunk_split(base64_encode($archivo), 64, "\n") . "-----END CERTIFICATE-----";
return $cert;
}
}
module Docdigitales
class Certificado
def contenido_certificado(path_certificado)
OpenSSL::X509::Certificate.new File.read path_certificado
end
end
end
Llave privada
Para hacer uso del API, es necesario contar con la Llave Privada (.key) en formato PEM.
Suponiendo que el password de la llave sea VEFLPV9W0S, el ejemplo convertiría a formato PEM la llave privada
openssl pkcs8 -inform DER -in llave.key -passin pass:VEFLPV9W0S -out key.pem
Generación de una Factura
El objeto de facturación representa un objeto de un CFDI de tipo factura. Los detalles de cada campo y su estructura se basan en la definición establecida por el SAT en su versión CFDI 3.3. Específicamente para el timbrado de una factura, se definieron los elementos de la estructura JSON similar a la definida en el Anexo 20 de la RMF.
Las descripciones que se encuentran a continuación, fueron tomadas del documento Anexo 20, publicado por el SAT.
Ruta de Generación
POST https://api.docdigitales.com/v1/facturas/generar
datos_fiscales
Atributos | Tipo de dato | Descripción | Requerido |
---|---|---|---|
certificado_pem | string | Certificado de sellos en formato PEM | Si |
llave_pem | string | Llave codificada en formato PEM | Si |
llave_password | string | Password de la llave | Si |
cfdi
Atributos | Tipo de dato | Requerido | ||
---|---|---|---|---|
cfdi__comprobante | Objeto | Si | info | |
Estándar de Comprobante Fiscal Digital por Internet. |
cfdi__comprobante
Atributos | Tipo de dato | Requerido | ||
---|---|---|---|---|
serie | string | Opcional | info | |
Atributo opcional para precisar la serie para control interno del contribuyente. Este atributo acepta una cadena de caracteres. | ||||
folio | string | Opcional | info | |
Atributo opcional para control interno del contribuyente que expresa el folio del comprobante, acepta una cadena de caracteres. | ||||
fecha | string | Si | info | |
Atributo requerido para la expresión de la fecha y hora de expedición del Comprobante Fiscal Digital por Internet. Se expresa en la forma AAAA-MM-DDThh:mm:ss y debe corresponder con la hora local donde se expide el comprobante. | ||||
tipo_comprobante | string | Si | info | |
Atributo requerido para expresar la clave del efecto del comprobante fiscal para el contribuyente emisor. | ||||
lugar_expedicion | string | Si | info | |
Atributo requerido para incorporar el código postal del lugar de expedición del comprobante (domicilio de la matriz o de la sucursal). | ||||
forma_pago | string | Opcional | info | |
Atributo condicional para expresar la clave de la forma de pago de los bienes o servicios amparados por el comprobante. Si no se conoce la forma de pago este atributo se debe omitir. | ||||
metodo_pago | string | Opcional | info | |
Atributo condicional para precisar la clave del método de pago que aplica para este comprobante fiscal digital por Internet, conforme al Artículo 29-A fracción VII incisos a y b del CFF. | ||||
moneda | string | Si | info | |
Atributo requerido para identificar la clave de la moneda utilizada para expresar los montos, cuando se usa moneda nacional se registra MXN. Conforme con la especificación ISO 4217. | ||||
tipo_cambio | string | Si | info | |
Atributo condicional para representar el tipo de cambio conforme con la moneda usada. Es requerido cuando la clave de moneda es distinta de MXN y de XXX. El valor debe refleja el número de pesos mexicanos que equivalen a una unidad de la divisa señalada en el atributo moneda. Si el valor está fuera del porcentaje aplicable a la moneda tomado del catálogo c_Moneda, el emisor debe obtener del PAC que vaya a timbrar el CFDI, de manera no automática, una clave de confirmación para ratificar que el valor es correcto e integrar dicha clave en el atributo Confirmacion. | ||||
condiciones_pago | string | Opcional | info | |
Atributo condicional para expresar las condiciones comerciales aplicables para el pago del comprobante fiscal digital por Internet. Este atributo puede ser condicionado mediante atributos o complementos. | ||||
subtotal | string | Si | info | |
Atributo requerido para representar la suma de los importes de los conceptos antes de descuentos e impuesto. No se permiten valores negativos. | ||||
total | string | Si | info | |
Atributo requerido para representar la suma del subtotal, menos los descuentos aplicables, más las contribuciones recibidas (impuestos trasladados - federales o locales, derechos, productos, aprovechamientos, aportaciones de seguridad social, contribuciones de mejoras) menos los impuestos retenidos. Si el valor es superior al límite que establezca el SAT en la Resolución Miscelánea Fiscal vigente, el emisor debe obtener del PAC que vaya a timbrar el CFDI, de manera no automática, una clave de confirmación para ratificar que el valor es correcto e integrar dicha clave en el atributo Confirmacion. No se permiten valores negativos. | ||||
exportacion | string | Si | info | |
Atributo requerido para representar si el comprobante ampara una operación de exportación.
|
||||
cfdi__informacion_global | Objeto | Opcional | info | |
Nodo condicional para precisar la información relacionada con el comprobante global. | cfdi__emisor | Objeto | Si | info |
Expresa la información del contribuyente emisor del comprobante. | ||||
cfdi__receptor | Objeto | Si | info | |
Expresa la información del contribuyente receptor del comprobante. | ||||
cfdi__cfdi_relacionados | Objeto | Opcional | info | |
La información de los comprobantes relacionados. | ||||
cfdi__conceptos | Objeto | Si | info | |
Información detallada de un bien o servicio amparado en el comprobante. | ||||
cfdi__impuestos | Objeto | Opcional | info | |
Nodo condicional para expresar el resumen de los impuestos aplicables. |
cfdi__informacion_global
Atributos | Tipo de dato | Requerido | ||
---|---|---|---|---|
periodicidad | string | Si | info | |
Atributo requerido para expresar el período al que corresponde la información del comprobante global. | ||||
meses | string | Si | info | |
Atributo requerido para expresar el mes o los meses al que corresponde la información del comprobante global. | ||||
año | string | Si | info | |
Atributo requerido para expresar el año al que corresponde la información del comprobante global. No puede ser menor a 2021. |
cfdi__emisor
Atributos | Tipo de dato | Requerido | ||
---|---|---|---|---|
rfc | string | Si | info | |
Atributo requerido para registrar la Clave del Registro Federal de Contribuyentes correspondiente al contribuyente emisor del comprobante. | ||||
nombre | string | Si | info | |
Atributo requerido para registrar el nombre, denominación o razón social del contribuyente inscrito en el RFC, del emisor del comprobante. Debe ser expresado en MAYUSCULAS y debe coincidir con el inscrito en su RFC. | ||||
regimen_fiscal | string | Si | info | |
Atributo requerido para incorporar la clave del régimen del contribuyente emisor al que aplicará el efecto fiscal de este comprobante. |
cfdi__receptor
Atributos | Tipo de dato | Requerido | ||
---|---|---|---|---|
rfc | string | Si | info | |
Atributo requerido para precisar la Clave del Registro Federal de Contribuyentes correspondiente al contribuyente receptor del comprobante. | ||||
nombre | string | Si | info | |
Atributo requerido para registrar el nombre(s), primer apellido, segundo apellido, según corresponda, denominación o razón social del contribuyente, inscrito en el RFC, del receptor del comprobante. | ||||
domicilio_fiscal | string | Si | info | |
Atributo requerido para registrar el código postal del domicilio fiscal del receptor del comprobante. | ||||
regimen_fiscal | string | Si | info | |
Atributo requerido para incorporar la clave del régimen fiscal del contribuyente receptor al que aplicará el efecto fiscal de este comprobante. | ||||
uso_cfdi | string | Si | info | |
Atributo requerido para expresar la clave del uso que dará a esta factura el receptor del CFDI. |
cfdi__cfdi_relacionados
Atributos | Tipo de dato | Requerido | ||
---|---|---|---|---|
tipo_relacion | string | Si | info | |
Atributo requerido para indicar la clave de la relación que existe entre éste que se esta generando y el o los CFDI previos. | ||||
cfdi__cfdi_relacionado | Array [ ] Objeto | Si | info | |
Información de los comprobantes relacionados |
cfdi__cfdi_relacionado
Atributos | Tipo de dato | Requerido | ||
---|---|---|---|---|
uuid | string | Si | info | |
Atributo opcional para registrar el folio fiscal (UUID) de un CFDI relacionado con el presente comprobante, por ejemplo: Si el CFDI relacionado es un comprobante de traslado que sirve para registrar el movimiento de la mercancía. Si este comprobante se usa como nota de crédito o nota de débito del comprobante relacionado. Si este comprobante es una devolución sobre el comprobante relacionado. Si éste sustituye a una factura cancelada |
cfdi__conceptos
Atributos | Tipo de dato | Requerido | ||
---|---|---|---|---|
clave_producto_servicio | string | Si | info | |
Atributo requerido para expresar la clave del producto o del servicio amparado por el presente concepto. Es requerido y deben utilizar las claves del catálogo de productos y servicios, cuando los conceptos que registren por sus actividades correspondan con dichos conceptos. | ||||
clave_unidad | string | Si | info | |
Atributo requerido para precisar la clave de unidad de medida estandarizada aplicable para la cantidad expresada en el concepto. La unidad debe corresponder con la descripción del concepto. | ||||
cantidad | string | Si | info | |
Atributo requerido para precisar la cantidad de bienes o servicios del tipo particular definido por el presente concepto. | ||||
descripcion | string | Si | info | |
Atributo requerido para precisar la descripción del bien o servicio cubierto por el presente concepto. | ||||
valor_unitario | string | Si | info | |
Atributo requerido para precisar el valor o precio unitario del bien o servicio cubierto por el presente concepto. | ||||
importe | string | Si | info | |
Atributo requerido para precisar el importe total de los bienes o servicios del presente concepto. Debe ser equivalente al resultado de multiplicar la cantidad por el valor unitario expresado en el concepto. No se permiten valores negativos. | ||||
unidad | string | Opcional | info | |
Atributo opcional para precisar la unidad de medida propia de la operación del emisor, aplicable para la cantidad expresada en el concepto. La unidad debe corresponder con la descripción del concepto. | ||||
no_identificacion | string | Opcional | info | |
Atributo opcional para expresar el número de parte, identificador del producto o del servicio, la clave de producto o servicio, SKU o equivalente, propia de la operación del emisor, amparado por el presente concepto. Opcionalmente se puede utilizar claves del estándar GTIN. | ||||
objeto_imp | string | Si | info | |
Atributo requerido para expresar si la operación comercial es objeto o no de impuesto.
|
||||
cfdi__impuestos | Objeto | Opcional | info | |
Nodo opcional para capturar los impuestos aplicables al presente concepto. Cuando un concepto no registra un impuesto, implica que no es objeto del mismo. | ||||
cfdi__a_cuenta_terceros | Objeto | Opcional | info | |
Nodo opcional para registrar información del contribuyente Tercero, a cuenta del que se realiza la operación. |
cfdi__impuestos
cfdi:comprobanteAtributos | Tipo de dato | Requerido | ||
---|---|---|---|---|
total_impuestos_trasladados | string | Opcional | info | |
Atributo condicional para expresar el total de los impuestos trasladados que se desprenden de los conceptos expresados en el comprobante fiscal digital por Internet. No se permiten valores negativos. Es requerido cuando en los conceptos se registren impuestos trasladados | ||||
total_impuestos_retenidos | string | Opcional | info | |
Atributo condicional para expresar el total de los impuestos retenidos que se desprenden de los conceptos expresados en el comprobante fiscal digital por Internet. No se permiten valores negativos. Es requerido cuando en los conceptos se registren impuestos retenidos | ||||
cfdi__traslados | Objeto | Opcional | info | |
Nodo opcional para asentar los impuestos trasladados aplicables al presente concepto. | ||||
cfdi__retenciones | Objeto | Opcional | info | |
Nodo opcional para asentar los impuestos retenidos aplicables al presente concepto. |
cfdi__traslado
Atributos | Tipo de dato | Requerido | ||
---|---|---|---|---|
base | string | Si | info | |
Atributo requerido para señalar la base para el cálculo del impuesto, la determinación de la base se realiza de acuerdo con las disposiciones fiscales vigentes. No se permiten valores negativos. | ||||
impuesto | string | Si | info | |
Atributo requerido para señalar la clave del tipo de impuesto trasladado aplicable al concepto. | ||||
tipo_factor | string | Si | info | |
Atributo requerido para señalar la clave del tipo de factor que se aplica a la base del impuesto. | ||||
tasa_cuota | string | Opcional | info | |
Atributo condicional para señalar el valor de la tasa o cuota del impuesto que se traslada para el presente concepto. Es requerido cuando el atributo TipoFactor tenga un valor que corresponda a Tasa o Cuota. | ||||
importe | string | Opcional | info | |
Atributo condicional para señalar el importe del impuesto trasladado que aplica al concepto. No se permiten valores negativos. Es requerido cuando TipoFactor sea Tasa o Cuota |
cfdi__retencion
Atributos | Tipo de dato | Requerido | ||
---|---|---|---|---|
base | string | Si | info | |
Atributo requerido para señalar la base para el cálculo de la retención, la determinación de la base se realiza de acuerdo con las disposiciones fiscales vigentes. No se permiten valores negativos. | ||||
impuesto | string | Si | info | |
Atributo requerido para señalar la clave del tipo de impuesto retenido aplicable al concepto. | ||||
tipo_factor | string | Si | info | |
Atributo requerido para señalar la clave del tipo de factor que se aplica a la base del impuesto. | ||||
tasa_cuota | string | Si | info | |
Atributo requerido para señalar la tasa o cuota del impuesto que se retiene para el presente concepto. | ||||
importe | string | Si | info | |
Atributo requerido para señalar el importe del impuesto retenido que aplica al concepto. No se permiten valores negativos. |
cfdi__impuestos
cfdi:conceptosAtributos | Tipo de dato | Requerido | ||
---|---|---|---|---|
cfdi__traslados | Objeto | Opcional | info | |
Nodo opcional para asentar los impuestos trasladados aplicables al presente concepto. | ||||
cfdi__retenciones | Objeto | Opcional | info | |
Nodo opcional para asentar los impuestos retenidos aplicables al presente concepto. |
cfdi__a_cuenta_terceros
cfdi:conceptosAtributos | Tipo de dato | Requerido | ||
---|---|---|---|---|
rfc | string | Si | info | |
Atributo requerido para registrar la Clave del Registro Federal de Contribuyentes del contribuyente Tercero, a cuenta del que se realiza la operación. | ||||
nombre | string | Si | info | |
Atributo requerido para registrar el nombre, denominación o razón social del contribuyente Tercero correspondiente con el Rfc, a cuenta del que se realiza la operación. | ||||
regimen_fiscal | string | Si | info | |
Atributo requerido para incorporar la clave del régimen del contribuyente Tercero, a cuenta del que se realiza la operación. | ||||
domicilio_fiscal | string | Si | info | |
Atributo requerido para incorporar el código postal del domicilio fiscal del Tercero, a cuenta del que se realiza la operación. |
{
"meta":{
"empresa_uid":"asd123asd",
"empresa_api_key":"123123123",
"ambiente":"S",
"objeto":"factura"
},
"data":
[
{
"datos_fiscales":{
"certificado_pem":"",
"llave_pem":"",
"llave_password":""
},
"cfdi":{
"cfdi__comprobante":{
"folio":"123",
"fecha":"2018-03-25T12:12:12",
"tipo_comprobante":"I",
"lugar_expedicion":"21100",
"forma_pago":"01",
"metodo_pago":"PUE",
"moneda":"MXN",
"tipo_cambio":"1",
"subtotal":"99.00",
"total":"99.00",
"exportacion":"01",
"cfdi__informacion_global":{
"periodicidad":"02",
"meses":"02",
"año":"2022"
},
"cfdi__emisor":{
"rfc":"DDM090629R13",
"nombre":"EMISOR TEST",
"regimen_fiscal":"601"
},
"cfdi__receptor":{
"rfc": "XAXX010101000",
"nombre": "PÚBLICO EN GENERAL",
"uso_cfdi": "S01",
"domicilio_fiscal": "33146",
"regimen_fiscal": "616"
},
"cfdi__conceptos":{
"cfdi__concepto":[
{
"clave_producto_servicio":"01010101",
"clave_unidad":"KGM",
"cantidad":"1",
"descripcion":"descripcion test",
"valor_unitario":"99.00",
"importe":"99.00",
"unidad":"unidad",
"no_identificacion":"KGM123",
"objeto_imp": "02",
"cfdi__impuestos":{
"cfdi__traslados":{
"cfdi__traslado":[
{
"base":"99.00",
"impuesto":"002",
"tipo_factor":"Exento"
}
]
}
},
"cfdi__a_cuenta_terceros": {
"rfc": "JUFA7608212V6",
"nombre": "ADRIANA JUAREZ FERNANDEZ",
"regimen_fiscal": "605",
"domicilio_fiscal": "29133"
}
}
]
}
}
}
}
]
}
Respuesta de una Generación
Meta
Atributos | Tipo de dato | Descripción |
---|---|---|
ambiente | string | Ambiente en el que fue procesada la cancelación |
objeto | string | Tipo de CFDI procesado |
respuesta_uid | string | Identificador de la respuesta registrada |
Data
Atributos | Tipo de dato | Descripción |
---|---|---|
cfdi_respuesta | Objeto | Indica si la factura fue timbrada |
cfdi_complemento | Objeto | Detalle de la factura |
cfdi_respuesta
Atributos | Tipo de dato | Descripción |
---|---|---|
timbrada | Boolean | Indica si el cfdi fue timbrado |
cfdi_complemento
Atributos | Tipo de dato | Descripción |
---|---|---|
uuid | string | Timbre de la factura |
fecha_timbrado | string | Fecha de generación del timbre |
sello_cfd | string | Sello |
no_certificado_sat | string | Numero de certificado |
sello_sat | string | Sello |
rfc_prov_certif | String | RFC del proovedor de timbrado |
{
"meta":{
"ambiente":"S",
"objeto":"factura",
"respuesta_uid":"b975446acb"
},
"data":[
{
"cfdi":{
"cfdi__comprobante":{
"folio":"123",
"fecha":"2018-06-27T13:02:23",
"tipo_comprobante":"I",
"lugar_expedicion":"21100",
"forma_pago":"01",
"metodo_pago":"PUE",
"moneda":"MXN",
"tipo_cambio":"1",
"subtotal":"99.00",
"total":"99.00",
"exportacion":"01",
"cfdi__emisor":{
"rfc":"DDM090629R13",
"nombre":"EMISOR TEST",
"regimen_fiscal":"601"
},
"cfdi__receptor":{
"rfc": "XAXX010101000",
"nombre": "PÚBLICO EN GENERAL",
"uso_cfdi": "S01",
"domicilio_fiscal": "33146",
"regimen_fiscal": "616"
},
"cfdi__conceptos":{
"cfdi__concepto":[
{
"clave_producto_servicio":"01010101",
"clave_unidad":"KGM",
"cantidad":"1",
"descripcion":"descripcion test",
"valor_unitario":"99.00",
"importe":"99.00",
"unidad":"unidad",
"no_identificacion":"KGM123",
"objeto_imp": "02",
"cfdi__impuestos":{
"cfdi__traslados":{
"cfdi__traslado":[
{
"base":"99.00",
"impuesto":"002",
"tipo_factor":"Exento"
}
]
}
},
"cfdi__a_cuenta_terceros": {
"rfc": "JUFA7608212V6",
"nombre": "ADRIANA JUAREZ FERNANDEZ",
"regimen_fiscal": "605",
"domicilio_fiscal": "29133"
}
}
]
}
}
},
"cfdi_respuesta":{
"timbrada":"true"
},
"cfdi_complemento":{
"xsi:schema_location":"http://www.sat.gob.mx/TimbreFiscalDigital http://www.sat.gob.mx/sitio_internet/cfd/TimbreFiscalDigital/TimbreFiscalDigitalv11.xsd",
"xmlns:tfd":"http://www.sat.gob.mx/TimbreFiscalDigital",
"version":"1.1",
"uuid":"7ECA8EF2-9AB1-42A4-ACEE-EE23145209FE",
"fecha_timbrado":"2018-06-27T15:02:24",
"sello_cfd":"UF0QiCmAJgdB67+bGSds4wodpEK/1naeWxaQTFhzG2cbm9v1aqkbj+K/QQEKmxVan8/LZFmKGvWIa1XyLEkYiY9hm+gUVIEUTRqhfpKpnSuGMV1u3CAlF1yuBu0xJQ324EtH0tWHI1TXBDkYNhgPNwBrQvmjwbGCPvketQYLOWKDzcQpmG4wohkW4NsoJCQw/5JlkmWUXuRWMotj/m96ajLFCdY3cbn9H58oNUI/dKhvE3J1gAnrnWNBLI3zCy3qaGDhrP0BnMwL13xrLhY1ULItI0IGpqWyHBYTSw5GPJ1NDtRjVYdjMc/W4Yc3R7ztYPAJvq2fWkBpgj5RGtYh/w==",
"no_certificado_sat":"20001000000300022323",
"sello_sat":"aHr151xvgkkhByEHtduG02LlElcHvH2Xikq95M55AwrW9SeccoiV0uE72PxI2e4s9qq+bgMco81mct6Q7X8etjLnlEBBvxB1Fus/mQu+liPoWQwGA5cpfkFyc/Ss+I1d7nj1PlKjYteXi3GC6WespQ0nmELqVjvTKXX+bTN9nEpKJ1qfISmTbkkNe/8EhbwK2GsdUeEMl2juq7XyWrWg37f4UV+efzdgyKOfLn0OoLkCM1Cshkhml3kOKC/0+8o+LgmEcIvijCeqkRltAzyObQrj7eN6Xa09JpLq4Wd6WJ3efOdVnSSB8r2wKG7Komo+VMU5iiGnZnXONXgQfQIuug==",
"rfc_prov_certif":"IAD121214B34"
}
}
]
}
Generación de una Recepción de pago
El objeto de recepción representa un objeto de un CFDI de tipo Recepción de pago. Los detalles de cada campo y su estructura se basan en la definición establecida por el SAT en su versión CFDI 3.3.Específicamente para el timbrado de una recepción de pago, se definieron los elementos de la estructura JSON similar a la definida en el Anexo 20 de la RMF.
Las descripciones que se encuentran a continuación, fueron tomadas del documento Anexo 20, publicado por el SAT.
Ruta de Generación
POST https://api.docdigitales.com/v1/recepciones_pago/generar
cfdi__comprobante
Atributos | Tipo de dato | Requerido | ||
---|---|---|---|---|
serie | string | Opcional | info | |
Atributo opcional para precisar la serie para control interno del contribuyente. Este atributo acepta una cadena de caracteres. | ||||
folio | string | Opcional | info | |
Atributo opcional para control interno del contribuyente que expresa el folio del comprobante, acepta una cadena de caracteres. | ||||
fecha | string | Si | info | |
Atributo requerido para la expresión de la fecha y hora de expedición del Comprobante Fiscal Digital por Internet. Se expresa en la forma AAAA-MM-DDThh:mm:ss y debe corresponder con la hora local donde se expide el comprobante. | ||||
tipo_comprobante | string | Se debe registrar la clave "P" | ||
lugar_expedicion | string | Si | ||
confirmacion | string | No | info | |
Se debe registrar la clave de confirmación única e irrepetible que entregue el Proveedor de Certificación de CFDI o el SAT a los emisores (usuarios) para expedir el comprobante con importes o tipo de cambio fuera del rango establecido o en ambos casos. Cuando el valor equivalente en MXN del campo Monto del complemento exceda el límite publicado por el SAT, el emisor debe obtener de manera no automática una clave de confirmación para ratificar que el importe es correcto e integrarla en este campo al CFDI. | ||||
forma_pago | string | Este campo no debe existir | ||
metodo_pago | string | Este campo no debe existir | ||
moneda | string | Se debe de registrar el valor "XXX" | ||
tipo_cambio | string | Este campo no debe existir | ||
condiciones_pago | string | Este campo no debe existir | ||
subtotal | string | Se debe registrar el valor de cero "0" | ||
total | string | Se debe registrar el valor de cero "0" | ||
exportacion | string | Se debe registrar el valor "01" | ||
objeto_imp | string | Si | info | |
Atributo requerido para expresar si la operación comercial es objeto o no de impuesto.
|
||||
cfdi__emisor | Objeto | Si | info | |
Expresa la información del contribuyente emisor del comprobante. | ||||
cfdi__receptor | Objeto | Si | info | |
Expresa la información del contribuyente receptor del comprobante. | ||||
cfdi__cfdi_relacionados | Objeto | Opcional | info | |
La información de los comprobantes relacionados. | ||||
cfdi__conceptos | Objeto | Si | info | |
Información detallada de un bien o servicio amparado en el comprobante. | ||||
cfdi__impuestos | Objeto | Opcional | info | |
Nodo condicional para expresar el resumen de los impuestos aplicables. |
pago10__pago
Atributos | Tipo de dato | Requerido | ||
---|---|---|---|---|
fecha_pago | string | Si | info | |
Atributo requerido para expresar la fecha y hora en la que el beneficiario recibe el pago. Se expresa en la forma aaaa-mm-ddThh:mm:ss, de acuerdo con la especificación ISO 8601.En caso de no contar con la hora se debe registrar 12:00:00. | ||||
forma_pago | string | Si | info | |
Atributo requerido para expresar la clave de la forma en que se realiza el pago. | ||||
tipo_cambio | string | Opcional | info | |
Atributo condicional para expresar el tipo de cambio de la moneda a la fecha en que se realizó el pago. El valor debe reflejar el número de pesos mexicanos que equivalen a una unidad de la divisa señalada en el atributo moneda. Es requerido cuando el atributo moneda es diferente a MXN. | ||||
moneda | string | Si | info | |
Atributo requerido para identificar la clave de la moneda utilizada para realizar el pago, cuando se usa moneda nacional se registra MXN. El atributo Pagos:Pago:Monto y los atributos total_impuestos_retenidos, total_impuestos_trasladados, Traslados:Traslado:Importe y Retenciones:Retencion:Importe del nodo Pago:Impuestos deben ser expresados en esta moneda. Conforme con la especificación ISO 4217. | ||||
monto | string | Si | info | |
Atributo requerido para expresar el importe del pago. | ||||
rfc_emisor_ordenante | string | Opcional | info | |
Atributo condicional para expresar la clave RFC de la entidad emisora de la cuenta origen, es decir, la operadora, el banco, la institución financiera, emisor de monedero electrónico, etc., en caso de ser extranjero colocar XEXX010101000, considerar las reglas de obligatoriedad publicadas en la página del SAT para éste atributo de acuerdo con el catálogo catCFDI:c_FormaPago. | ||||
rfc_emisor_beneficiario | string | Opcional | info | |
Atributo condicional para expresar la clave RFC de la entidad operadora de la cuenta destino, es decir, la operadora, el banco, la institución financiera, emisor de monedero electrónico, etc. Considerar las reglas de obligatoriedad publicadas en la página del SAT para éste atributo de acuerdo con el catálogo catCFDI:c_FormaPago. | ||||
nombre_banco_ordenante | string | Opcional | info | |
Atributo condicional para expresar el nombre del banco ordenante, es requerido en caso de ser extranjero. Considerar las reglas de obligatoriedad publicadas en la página del SAT para éste atributo de acuerdo con el catálogo catCFDI:c_FormaPago. | ||||
cuenta_ordenante | string | Opcional | info | |
Atributo condicional para incorporar el número de la cuenta con la que se realizó el pago. Considerar las reglas de obligatoriedad publicadas en la página del SAT para éste atributo de acuerdo con el catálogo catCFDI:c_FormaPago | ||||
cuenta_beneficiario | string | Opcional | info | |
Atributo condicional para incorporar el número de cuenta en donde se recibió el pago. Considerar las reglas de obligatoriedad publicadas en la página del SAT para éste atributo de acuerdo con el catálogo catCFDI:c_FormaPago. | ||||
tipo_cadena_pago | string | Opcional | info | |
Atributo condicional para identificar la clave del tipo de cadena de pago que genera la entidad receptora del pago. Considerar las reglas de obligatoriedad publicadas en la página del SAT para éste atributo de acuerdo con el catálogo catCFDI:c_FormaPago. | ||||
num_operacion | string | Opcional | info | |
Atributo condicional para expresar el número de cheque, número de autorización, número de referencia, clave de rastreo en caso de ser SPEI, línea de captura o algún número de referencia análogo que identifique la operación que ampara el pago efectuado | ||||
certificado_pago | string | Opcional | info | |
Atributo condicional que sirve para incorporar el certificado que ampara al pago, como una cadena de texto en formato base 64. Es requerido en caso de que el atributo tipo_cadena_pago contenga información | ||||
cadena_pago | string | Opcional | info | |
Atributo condicional para expresar la cadena original del comprobante de pago generado por la entidad emisora de la cuenta beneficiaria. Es requerido en caso de que el atributo tipo_cadena_pago contenga información. | ||||
sello_pago | string | Opcional | info | |
Atributo condicional para integrar el sello digital que se asocie al pago. La entidad que emite el comprobante de pago, ingresa una cadena original y el sello digital en una sección de dicho comprobante, este sello digital es el que se debe registrar en este campo. Debe ser expresado como una cadena de texto en formato base 64. Es requerido en caso de que el atributo tipo_cadena_pago contenga información. | ||||
pago10__docto_relacionado | Objeto | Si | info | |
Nodo condicional para expresar la lista de documentos relacionados con los pagos diferentes de anticipos. Por cada documento que se relacione se debe generar un nodo pago10__docto_relacionado. |
pago10__docto_relacionado
Atributos | Tipo de dato | Requerido | ||
---|---|---|---|---|
id_documento | string | Si | info | |
Atributo requerido para expresar el identificador del documento relacionado con el pago. Este dato puede ser un Folio Fiscal de la Factura Electrónica o bien el número de operación de un documento digital. | ||||
serie | string | Opcional | info | |
Atributo opcional para precisar la serie del comprobante para control interno del contribuyente, acepta una cadena de caracteres | ||||
folio | string | Opcional | info | |
Atributo opcional para precisar el folio del comprobante para control interno del contribuyente, acepta una cadena de caracteres. | ||||
moneda_dr | string | Si | info | |
Atributo requerido para identificar la clave de la moneda utilizada en los importes del documento relacionado, cuando se usa moneda nacional o el documento relacionado no especifica la moneda se registra MXN. Los importes registrados en los atributos "importe_saldo_anterior", "importe_pagado" e "importe_saldo_insoluto" de éste nodo, deben corresponder a esta moneda. Conforme con la especificación ISO 4217. | ||||
tipo_cambio_dr | string | Si | info | |
Atributo condicional para expresar el tipo de cambio conforme con la moneda registrada en el documento relacionado. Es requerido cuando la moneda del documento relacionado es distinta de la moneda de pago. Se debe registrar el número de unidades de la moneda señalada en el documento relacionado que equivalen a una unidad de la moneda del pago. Por ejemplo: El documento relacionado se registra en USD El pago se realiza por 100 EUR. Este atributo se registra como 1.114700 USD/EUR. El importe pagado equivale a 100 EUR * 1.114700 USD/EUR = 111.47 USD | ||||
metodo_pago_dr | string | Si | info | |
Atributo requerido para expresar la clave del método de pago que se registró en el documento relacionado. | ||||
numero_parcialidad | string | Opcional | info | |
Atributo condicional para expresar el número de parcialidad que corresponde al pago. Es requerido cuando metodo_pago_dr contiene: “PPD” Pago en parcialidades o diferido. | ||||
importe_pagado | string | Opcional | info | |
Atributo condicional para expresar el importe pagado para el documento relacionado. Es obligatorio cuando exista más de un documento relacionado o cuando existe un documento relacionado y el tipo_cambio_dr tiene un valor. | ||||
importe_saldo_anterior | string | Opcional | info | |
Atributo condicional para expresar el monto del saldo insoluto de la parcialidad anterior. Es requerido cuando metodo_pago_dr contiene: “PPD” Pago en parcialidades o diferido.En el caso de que sea la primer parcialidad este campo debe contener el importe total del documento relacionado. | ||||
importe_saldo_insoluto | string | Si | info | |
Atributo condicional para expresar la diferencia entre el importe del saldo anterior y el monto del pago. Es requerido cuando metodo_pago_dr contiene: “PPD” Pago en parcialidades o diferido. |
{
"meta" : {
"empresa_uid":"asd123asd",
"empresa_api_key":"123123123",
"ambiente" : "S",
"objeto" : "recepcion"
},
"data" : [{
"datos_fiscales" : {
"certificado_pem": "",
"llave_pem": "",
"llave_password": ""},
"cfdi": {
"cfdi__comprobante": {
"folio": "793",
"serie": "C",
"fecha": "",
"tipo_comprobante": "P",
"lugar_expedicion": "83448",
"moneda": "XXX",
"subtotal": "0",
"total": "0",
"cfdi__emisor": {
"rfc": "DDM090629R13",
"nombre": "CARLOS CESAR OCHOA GAXIOLA",
"regimen_fiscal": "601"},
"cfdi__receptor":{
"rfc": "GNP9211244P0",
"nombre": "GRUPO NACIONAL PROVINCIAL",
"uso_cfdi": "CP01",
"domicilio_fiscal": "33146",
"regimen_fiscal": "616"},
"cfdi__conceptos": {
"cfdi__concepto": [{
"clave_producto_servicio": "84111506",
"clave_unidad": "ACT",
"cantidad": "1",
"descripcion": "Pago",
"valor_unitario": "0",
"importe": "0"
}]
},
"cfdi__complemento": {
"pago20__pagos" : {
"pago20__totales": [{
"traslados_base_iva16": "5000",
"traslados_impuestos_iva16": "800",
"monto_total_pagos": "5800.00"
}],
"pago20__pago" : [{
"fecha_pago":"2022-02-08T12:00:00",
"forma_pago":"01",
"tipo_cambio":"",
"moneda":"MXN",
"monto":"5800.00",
"rfc_emisor_ordenante":"",
"rfc_emisor_beneficiario":"",
"nombre_banco_ordenante":"",
"cuenta_ordenante":"",
"cuenta_beneficiario":"",
"tipo_cadena_pago":"",
"num_operacion":"1123121241",
"certificado_pago":"",
"cadena_pago":"",
"sello_pago":"",
"pago20__docto_relacionado":[{
"id_documento":"5181DA40-22CD-4B8D-9AA1-CEA9B09F8AD0",
"serie":"",
"folio":"3",
"moneda_dr":"MXN",
"equivalencia_dr": "1",
"numero_parcialidad":"1",
"importe_pagado":"5800.00",
"importe_saldo_anterior":"5800",
"importe_saldo_insoluto":"0",
"objeto_imp_dr":"02",
"pago20__impuestosdr": {
"pago20__trasladosdr": {
"pago20__trasladodr": [
{
"base": "5000",
"impuesto": "002",
"tipo_factor": "Tasa",
"tasa_cuota": "0.160000",
"importe": "800"
}
]
}
}
}
],
"pago20__impuestosp": {
"pago20__trasladosp": {
"pago20__trasladop": [
{
"base": "5000",
"impuesto": "002",
"tipo_factor": "Tasa",
"tasa_cuota": "0.160000",
"importe": "800"
}
]
}
}
}]
}
}
}
}
}
]
}
Respuesta de una Generación de Recepción de pago
Meta
Atributos | Tipo de dato | Descripción |
---|---|---|
ambiente | string | Ambiente en el que fue procesada la cancelación |
objeto | string | Tipo de CFDI procesado |
respuesta_uid | string | Identificador de la respuesta registrada |
Data
Atributos | Tipo de dato | Descripción |
---|---|---|
cfdi_respuesta | Objeto | Indica si la factura fue timbrada |
cfdi_complemento | Objeto | Detalle de la factura |
cfdi_respuesta
Atributos | Tipo de dato | Descripción |
---|---|---|
timbrada | Boolean | Indica si el cfdi fue timbrado |
cfdi_complemento
Atributos | Tipo de dato | Descripción |
---|---|---|
uuid | string | Timbre de la factura |
fecha_timbrado | string | Fecha de generación del timbre |
sello_cfd | string | Sello |
no_certificado_sat | string | Numero de certificado |
sello_sat | string | Sello |
rfc_prov_certif | String | RFC del proovedor de timbrado |
{
"meta":{
"ambiente":"S",
"objeto":"recepcion",
"respuesta_uid":"2deb5180de"
},
"data":[{
"cfdi":{
"cfdi__comprobante":{
"folio":"793",
"serie":"C",
"fecha":"2018-08-22T17:02:14",
"tipo_comprobante":"P",
"lugar_expedicion":"83448",
"moneda":"XXX",
"subtotal":"0",
"total":"0",
"exportacion": "01",
"cfdi__emisor": {
"rfc": "DDM090629R13",
"nombre": "CARLOS CESAR OCHOA GAXIOLA",
"regimen_fiscal": "601"},
"cfdi__receptor":{
"rfc": "GNP9211244P0",
"nombre": "GRUPO NACIONAL PROVINCIAL",
"uso_cfdi": "P01",
"domicilio_fiscal": "33146",
"regimen_fiscal": "616"},
"cfdi__conceptos": {
"cfdi__concepto": [{
"clave_producto_servicio": "84111506",
"clave_unidad": "ACT",
"cantidad": "1",
"descripcion": "Pago",
"valor_unitario": "0",
"importe": "0",
"objeto_imp":"01"
}]
},
"cfdi__complemento": {
"pago20__pagos" : {
"pago20__totales": [{
"traslados_base_iva16": "5000",
"traslados_impuestos_iva16": "800",
"monto_total_pagos": "5800.00"
}],
"pago20__pago" : [{
"fecha_pago":"2022-02-08T12:00:00",
"forma_pago":"01",
"tipo_cambio":"",
"moneda":"MXN",
"monto":"5800.00",
"rfc_emisor_ordenante":"",
"rfc_emisor_beneficiario":"",
"nombre_banco_ordenante":"",
"cuenta_ordenante":"",
"cuenta_beneficiario":"",
"tipo_cadena_pago":"",
"num_operacion":"1123121241",
"certificado_pago":"",
"cadena_pago":"",
"sello_pago":"",
"pago20__docto_relacionado":[{
"id_documento":"5181DA40-22CD-4B8D-9AA1-CEA9B09F8AD0",
"serie":"",
"folio":"3",
"moneda_dr":"MXN",
"equivalencia_dr": "1",
"numero_parcialidad":"1",
"importe_pagado":"5800.00",
"importe_saldo_anterior":"5800",
"importe_saldo_insoluto":"0",
}
],
"pago20__impuestosp": {
"pago20__trasladosp": {
"pago20__trasladop": [
{
"base": "5000",
"impuesto": "002",
"tipo_factor": "Tasa",
"tasa_cuota": "0.160000",
"importe": "800"
}
]
}
}
}],
"cfdi_respuesta":{
"timbrada":"true"
},
"cfdi_complemento":{
"xsi:schema_location":"http://www.sat.gob.mx/TimbreFiscalDigital http://www.sat.gob.mx/sitio_internet/cfd/TimbreFiscalDigital/TimbreFiscalDigitalv11.xsd", "xmlns:tfd":"http://www.sat.gob.mx/TimbreFiscalDigital",
"version":"1.1",
"uuid":"26B638C3-E534-4643-8F14-99CFB2999CA3",
"fecha_timbrado":"2018-08-22T19:02:20",
"sello_cfd":"aTKo7GdyT2eKg4ILe2jr+OXUZJ/mBcHhG0I3Of/vvikXTCzKN/btBBCTWU9xohGp7Uqcb0FQTVkKFf7AxPViz5gKHY5o+IJvPfikSlrprYVQYSbR3NAfA5ZIDV2ghy6VK7jlUqVTiw/EjVXy2gXd/BDhbKgS2s9y58IFFrxtTxv6H4+F8Ha9D0ed/ILkGPMNI/Sdw+ieq0l2MWJmMNsq/eMPi9jDXW1rRPuE8aHHJQZHKIGyQ8dghNTbCmPintLVBvB/jFiWwR4wmgHakfEdjNp2sJC6tC1RTRicsrFiVFB4tmEAgyf4S2out9qjbNvJ2gdZe9mglY4hckDO0s4BvA==",
"no_certificado_sat":"20001000000300022323",
"sello_sat":"WmjqNusVvBvgO5khVFYLrAwddCM+rDNv58lTNdhNkREWJ4K2PPgOhEWkK/+LtsYQe++22Ch9x2A/PRxS2II+5jg+GNEmTQErGFqA7fauCpZW5jChNzxzJuOAIxNyBlznUe60x+5XCNnsIbM71zxn6sknuETrLIpHzL0x8/cUAyaljj9nftbwDKSVcHz0RLpQv1VwaDFffOqvk6aE2rnG4M5/PLgFPV25LOQ4Hhz78MZizzljagvZ8bZGYFUpR56bHOiFO2pfj49N3PSnLi4g0kYcAdYc3i6T09mMTbv6wZU2DILlzyN6ZWu+mYE72n8id1P39nSBOBCOE31dDRCWVA==", "rfc_prov_certif":"IAD121214B34"
}
}
}
}
}
}]
}
Petición de Cancelación de una Factura
El API proporciona la opción de solicitar una cancelación de un CFDI enviando una petición estructurada de la siguiente manera:
Ruta de Solicitud de Cancelación
POST https://api.docdigitales.com/v1/cancelaciones/solicitar
Data
Atributos | Tipo de dato | Descripción | Requerido |
---|---|---|---|
rfc_emisor | string | RFC del emisor | Si |
folios | Array [ ] objetos | Arreglo de Objetos con la información a cancelar | Si |
datos_fiscales | Objeto | Datos fiscales del emisor | Si |
acuse | boolean | Indica si se requiere regresar el acuse de la cancelación | Si |
folios
Atributos | Tipo de dato | Descripción | Requerido |
---|---|---|---|
rfc_receptor | string | RFC del Receptor | Si |
total | string | Total del CFDI a cancelar | Si |
uuid | string | UUID del CFDI a cancelar | Si |
motivo | string | Motivo de la cancelación | Si |
folio_sustituto | string | Requerido cuando el motivo de cancelación sea 01 | Opcional |
{
"meta":{
"empresa_uid":"asd123asd",
"empresa_api_key":"123123123",
"ambiente":"S",
"objeto":"factura"
},
"data": [ {
"rfc_emisor": "DDM090629R13",
"folios": [{
"rfc_receptor": "GNP9211244P0",
"total": "6399.00",
"uuid": "D4AD33B5-2017-4A2F-A442-D9E691D65591",
"motivo": "02",
"folio_sustituto": ""
}],
"datos_fiscales": {
"certificado_pem": "-----BEGIN CERTIFICATE-----\nMIIGSTCCB...-----END CERTIFICATE-----\n",
"llave_pem": "-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAK...-----END RSA PRIVATE KEY-----\n",
"llave_password": "DDM090629R13"
},
"acuse": true
}
]
}
Respuesta de una solicitud de Cancelación
Meta
Atributos | Tipo de dato | Descripción |
---|---|---|
ambiente | string | Ambiente en el que fue procesada la cancelación |
objeto | string | Tipo de CFDI procesado |
respuesta_uid | string | Identificador de la respuesta registrada |
Data
Atributos | Tipo de dato | Descripción |
---|---|---|
rfc | string | RFC del emisor |
uuid | string | UUID procesado |
estatus | string | Codigo de estatus |
descripcion | string | Descripción del estatus |
acuse | XML | El acuse de la solicitud de cancelación |
{
"meta": {
"ambiente": "S",
"objeto": "factura",
"respuesta_uid": "a9fd78b87b"
},
"data": [
{
"rfc": "DDM090629R13",
"uuid": "64DB7F1F-A1AA-40E3-A696-04E14E2ACB9F",
"estatus": "201",
"descripcion": "En espera de aceptación"
}
],
"acuse": [
<?xml version='1.0'?>
<Acuse
Fecha='2018-08-28T13:26:09'
RfcEmisor='DDM090629R13'>
<Folios>
<UUID>64DB7F1F-A1AA-40E3-A696-04E14E2ACB9F</UUID>
<EstatusUUID>201</EstatusUUID>
</Folios>
<Signature xmlns='http://www.w3.org/2000/09/xmldsig#' Id='SelloSAT'>
<SignedInfo>
<CanonicalizationMethod Algorithm='http://www.w3.org/TR/2001/REC-xml-c14n-20010315'/>
<SignatureMethod Algorithm='http://www.w3.org/2001/04/xmldsig-more#hmac-sha512'/>
<Reference URI=''>
<Transforms>
<Transform Algorithm='http://www.w3.org/TR/1999/REC-xpath-19991116'>
<XPath>not(ancestor-or-self::*[local-name()='Signature'])</XPath>
</Transform>
</Transforms>
<DigestMethod Algorithm='http://www.w3.org/2001/04/xmlenc#sha512'/>
<DigestValue>ML2rVJ79GS...VDdnhZsg==</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>lO73l44krA...+fM8Kuw==</SignatureValue>
<KeyInfo>
<KeyName>00001088888800000016</KeyName>
<KeyValue>
<RSAKeyValue>
<Modulus>xnL2zDPtH5jDsAZDTIfMqbKG...Xu5O4pGM98Nz8pAM=</Modulus>
<Exponent>AQAB</Exponent>
</RSAKeyValue>
</KeyValue>
</KeyInfo>
</Signature>
</Acuse>
]
}
Consulta del estatus de una Factura
El API proporciona la opción de consultar el estatus de un CFDI en proceso de cancelacón de la siguiente manera:
Ruta de Solicitud de Consulta
POST https://api.docdigitales.com/v1/cancelaciones/consultar
Data
Atributos | Tipo de dato | Descripción | Requerido |
---|---|---|---|
rfc_emisor | string | RFC del emisor | Si |
rfc_receptor | string | RFC del receptor | Si |
uuid | string | UUID del CFDI que esta en proceso de cancelación | Si |
total | string | Indica el total del CFDI que está en proceso de cancelación | Si |
{
"meta": {
"empresa_uid":"asd123asd",
"empresa_api_key":"123123123",
"ambiente": "S",
"objeto": "factura"
},
"data": [ {
"rfc_emisor": "DDM090629R13",
"rfc_receptor": "GNP9211244P0",
"uuid": "64DB7F1F-A1AA-40E3-A696-04E14E2ACB9F",
"total": "6399.00"
}
]
}
Respuesta de Consulta del estatus
Data
Atributos | Tipo de dato | Descripción |
---|---|---|
rfc_emisor | string | RFC del emisor |
rfc_receptor | string | RFC del receptor |
uuid | string | UUID del CFDI que esta en proceso de cancelación |
total | string | Indica el total del CFDI que está en proceso de cancelación |
respuesta | Objeto | Detalle del estatus de cancelación para el CFDI solicitado |
respuesta
Atributos | Tipo de dato | Descripción |
---|---|---|
codigo_estatus | string | Codigo de cancelación |
es_cancelable | string | Indica si el CFDI es cancelable o no |
estado | string | Estatus del UUID |
estatus_cancelacion | Objeto | Estatus del proceso de cancelación |
{
"meta": {
"ambiente": "S",
"objeto": "factura",
"respuesta_uid": "6e8b7b9233"
},
"data": [
{
"rfc_emisor": "DDM090629R13",
"rfc_receptor": "GNP9211244P0",
"uuid": "64DB7F1F-A1AA-40E3-A696-04E14E2ACB9F",
"total": "6399.00",
"respuesta": {
"codigo_estatus": "S - Comprobante obtenido satisfactoriamente.",
"es_cancelable": "Cancelable con aceptación",
"estado": "Vigente",
"estatus_cancelacion": {
"@xsi:type": "xsd:string"
}
}
}
]
}
Aceptar/Rechazar una solicitud de cancelación
Data
Atributos | Tipo de dato | Descripción | Requerido |
---|---|---|---|
datos_fiscales | Objeto | Datos fiscales del emisor | Si |
rfc_receptor | string | RFC del receptor | Si |
uuid | string | UUID del CFDI que esta en proceso de cancelación | Si |
total | string | Indica el total del CFDI que está en proceso de cancelación | Si |
respuesta | Array [] Objeto | Detalle del estatus de cancelación para el CFDI solicitado | Si |
respuestas
Atributos | Tipo de dato | Descripción | Requerido |
---|---|---|---|
rfc_emisor | string | RFC del emisor | Si |
uuid | string | UUID del CFDI que se solicita cancelar | Si |
total | string | Total del CFDI que se solicita cancelar | Si |
respuesta | string | A = Aceptar / R = Rechazar | Si |
{
"meta":{
"empresa_uid":"asd123asd",
"empresa_api_key":"123123123",
"ambiente":"S",
"objeto":"factura"
},
"data": [ {
"datos_fiscales" : {
"certificado_pem": "-----BEGIN CERTIFICATE-----\nMIIGSTC.... =\n-----END CERTIFICATE-----\n",
"llave_pem": "-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAKCAQEAkI..... \n-----END RSA PRIVATE KEY-----\n",
"llave_password": "DDM090629R13" },
"rfc_receptor": "GNP9211244P0",
"respuestas" : [{
"rfc_emisor": "DDM090629R13",
"uuid": "D4AD33B5-2017-4A2F-A442-D9E691D65591",
"total": "6399.00",
"respuesta": "A"
}]
}
]
}
Respuesta de Aceptación/Rechazo de una solicitud de cancelación
Data
Atributos | Tipo de dato | Descripción |
---|---|---|
datos_fiscales | Objeto | Datos fiscales del emisor |
rfc_receptor | string | RFC del receptor |
uuid | string | UUID del CFDI que esta en proceso de cancelación |
total | string | Indica el total del CFDI que está en proceso de cancelación |
respuesta | Array [] Objeto | Detalle del estatus de cancelación para el CFDI solicitado |
estatus | Array [] Objeto | Detalle del estatus de cancelación para el CFDI solicitado |
respuestas
Atributos | Tipo de dato | Descripción |
---|---|---|
rfc_emisor | string | RFC del emisor |
uuid | string | UUID del CFDI que se solicita cancelar |
total | string | Total del CFDI que se solicita cancelar |
respuesta | string | A = Aceptar / R = Rechazar |
estatus
Atributos | Tipo de dato | Descripción |
---|---|---|
uuid | string | UUID del CFDI que se solicita cancelar |
codigo | string | Codigo de cancelación |
mensaje | string | Texto de la respuesta de la solicitud de cancelación |
{
"meta":{
"empresa_uid":"asd123asd",
"empresa_api_key":"123123123",
"ambiente":"S",
"objeto":"factura"
},
"data": [{
"rfc_receptor": "GNP9211244P0",
"respuestas": [{
"rfc_emisor": "DDM090629R13",
"uuid": "D4AD33B5-2017-4A2F-A442-D9E691D65591",
"total": "6399.00",
"respuesta": "A"
}],
"estatus": [{
"uuid": "D4AD33B5-2017-4A2F-A442-D9E691D65591",
"codigo": "CANC110",
"mensaje": "El CFDI ha sido cancelado previamente por plazo vencido, no puede ser rechazado."
}]
}]
}
Envío de una Factura
La petición de envío está desarrollada para facilitar el envío por correo electrónico de los CFDIs solicitados. Se pueden enviar múltiples CFDIs para ser procesados por el API para su envío a los destinatarios indicados de la siguiente manera:
Ruta de Envío
POST https://api.docdigitales.com/v1/enviar
Data
Atributos | Tipo de dato | Descripción |
---|---|---|
uuid | Array [ ] string | Arreglo de UUIDs de los cfdis que se desean enviar |
destinatarios | Array [ ] Objeto | Estructura donde se definen los correos a los cuales se enviaran los cfdis establecidos |
titulo | string | Descripción que será el título del correo |
texto | string | Descripción en el cuerpo del del correo |
boolean | Indica si se requiere el envío del documento en formato PDF | |
Logo | string | Dirección donde se especifica la imagen que se ingresara como logo en el formato PDF de la factura |
{
"meta":{
"empresa_uid":"asd123asd",
"empresa_api_key":"123123123",
"ambiente":"S",
"objeto":"factura"
},
"data":[
{
"uuid":[
"7ECA8EF2-9AB1-42A4-ACEE-EE23145209FE"
],
"destinatarios":[
{
"correo":"sandbox@docdigitales.com"
}
],
"titulo":"Envio de Factura: 123",
"texto":"Envio de Factura con folio 123, para su revisión.",
"pdf": "true",
"logo": "https://www.docdigitales.com/logo.png"
}
]
}
Respuesta de un Envío
Meta
Atributos | Tipo de dato | Descripción |
---|---|---|
ambiente | string | Ambiente en el que fue procesado el envío |
objeto | string | Tipo de CFDI procesado |
respuesta_uid | string | Identificador de la respuesta registrada |
Data
Atributos | Tipo de dato | Descripción |
---|---|---|
uuid | Array [ ] string | UUIDs enviados |
destinatarios | Array [ ] Objetos | Correos de destinatarios |
titulo | string | Texto que sera enviado como titulo del correo |
texto | string | Texto que sera enviado como cuerpo del correo |
boolean | Indica si se envia PDF del CFDI adjunto | |
Logo | string | Indica la dirección de la imagen que se ingreso como logo en la factura |
enviado | boolean | Indica el estatus de envio del correo |
{
"meta":{
"ambiente":"S",
"objeto":"factura",
"respuesta_uid":"cb8080e3f3"
},
"data":[
{
"uuid":[
"7ECA8EF2-9AB1-42A4-ACEE-EE23145209FE"
],
"destinatarios":[
{
"correo":"sandbox@docdigitales.com"
}
],
"titulo":"Envio de Factura: 123",
"texto":"Envio de Factura con folio 123, para su revision.",
"pdf": "true",
"logo": "https://www.docdigitales.com/logo.png",
"enviado":true
}
]
}
Descarga de una Factura
Esta petición está desarrollada para la descarga de los CFDIs solicitados, en los formatos XML y PDF.
Ruta de Envío
POST https://api.docdigitales.com/v1/descargar
Data
Atributos | Tipo de dato | Descripción |
---|---|---|
uuid | Array [ ] string | Arreglo de UUIDs de los cfdis que se desean descargar |
destinatarios | Array [ ] Objeto | Estructura donde se definen los correos a los cuales se enviaran los cfdis establecidos |
titulo | string | Descripción que será el título del correo |
texto | string | Descripción en el cuerpo del del correo |
boolean | Indica si se requiere el envío del documento en formato PDF | |
Logo | string | Dirección donde se especifica la imagen que se ingresara como logo en el formato PDF de la factura |
{
"meta":{
"empresa_uid":"asd123asd",
"empresa_api_key":"123123123",
"ambiente":"S",
"objeto":"factura"
},
"data":[
{
"uuid":[
"7ECA8EF2-9AB1-42A4-ACEE-EE23145209FE"
],
"destinatarios":[
{
"correo":"sandbox@docdigitales.com"
}
],
"titulo":"Descargar factura",
"texto":"Adjunto factura generada",
"pdf":"true",
"logo": "https://www.docdigitales.com/logo.png"
}
]
}
Respuesta de una Descarga
Meta
Atributos | Tipo de dato | Descripción |
---|---|---|
ambiente | string | Ambiente en el que fue procesada la descarga |
objeto | string | Tipo de CFDI procesado |
respuesta_uid | string | Identificador de la respuesta registrada |
Data
Atributos | Tipo de dato | Descripción |
---|---|---|
uuid | Array [ ] string | UUIDs enviados |
destinatarios | Array [ ] Objetos | Correos de destinatarios |
titulo | string | Texto que sera enviado como titulo del correo |
texto | string | Texto que sera enviado como cuerpo del correo |
boolean | Indica si se envia PDF del CFDI adjunto | |
Logo | string | Indica la dirección de la imagen que se ingreso como logo en la factura |
link | string | Link donde se puede descargar la solicitud |
{
"meta":{
"ambiente":"S",
"objeto":"factura",
"respuesta_uid":"623108d152"
},
"data":[
{
"uuid":[
"7ECA8EF2-9AB1-42A4-ACEE-EE23145209FE"
],
"destinatarios":[
{
"correo":"sandbox@docdigitales.com"
}
],
"titulo":"Descargar factura",
"texto":"Adjunto factura generada",
"pdf": "true",
"logo": "https://www.docdigitales.com/logo.png",
"link":"https://4da0961797191a1fe127-f6af86ec88a7e06419f555e1609a58b7.ssl.cf2.rackcdn.com/DDM090629R13_20180627170846.zip"
}
]
}
Descarga de una Factura
Esta petición está desarrollada para la descarga de los CFDIs solicitados en formato XML.
Ruta de Envío
POST https://api.docdigitales.com/v1/descargar_xml
Data
Atributos | Tipo de dato | Descripción |
---|---|---|
uuid | Array [ ] string | Arreglo de UUIDs de los cfdis que se quiere descargar. |
{
"meta":{
"empresa_uid":"asd123asd",
"empresa_api_key":"123123123",
"ambiente":"S",
"objeto":"factura"
},
"data":[
{
"uuid":[
"EB34D386-8FF9-4F18-B846-B9B65B0DBEB1"
]
}
]
}
Respuesta de una Descarga
Meta
Atributos | Tipo de dato | Descripción |
---|---|---|
ambiente | string | Ambiente en el que fue procesado la descarga |
objeto | string | Tipo de CFDI procesado |
respuesta_uid | string | Identificador de la respuesta registrada |
Data
Atributos | Tipo de dato | Descripción |
---|---|---|
uuids | Array [ ] Objetos | UUIDs con su respectivo xml |
uuid | string | UUID solicitado |
xml | string | El xml con el complemento de Timbre Fiscal Digital. |
{
"meta": {
"ambiente": "S",
"objeto": "factura",
"respuesta_uid": "a86a834768"
},
"data": [
{
"uuid": [
{
"xml": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<cfdi:Comprobante xmlns:cfdi=\"http://www.sat.gob.mx/cfd/3\" 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/cfdv33.xsd\" Version=\"3.3\" Serie=\"22\" Folio=\"1556302957\" Fecha=\"2019-04-26T11:22:37\" Sello=\"ChV75p37c0q/oRkIW8F6EyK3sx2elFo/IRU/uoSDqRljCv0TJqv1bICbN5sY2M+WF02WXtAnmUt0XOxVQ+IqUe2ag74jHuaQplAbaVh++xMT0ZUqyMFFDqyoQDt8K8hhlLwr2L9n0tlWiJvRfOzdsLwYM/VmvrtHEu8gUAD/7qWkH3AUN4ItF+5tjJ4iMcEpr6fnMfoGeLegUl/bJeO0IpsX0T77ezI0EVlK4XmzlnXsNRdN6gsbyQtma2O6H1uhbqHXRlnlueVe/iAebHpRzcIyYC70E9EDRtn9KrJpa9XalkLjilIVBUaA6AVuw71DP0UXUNaJ4CSxGDdwJInViQ==\" FormaPago=\"01\" NoCertificado=\"30001000000300023708\" Certificado=\"MIIF+TCCA+GgAwIBAgIUMzAwMDEwMDAwMDAzMDAwMjM3MDgwDQYJKoZIhvcNAQELBQAwggFmMSAwHgYDVQQDDBdBLkMuIDIgZGUgcHJ1ZWJhcyg0MDk2KTEvMC0GA1UECgwmU2VydmljaW8gZGUgQWRtaW5pc3RyYWNpw7NuIFRyaWJ1dGFyaWExODA2BgNVBAsML0FkbWluaXN0cmFjacOzbiBkZSBTZWd1cmlkYWQgZGUgbGEgSW5mb3JtYWNpw7NuMSkwJwYJKoZIhvcNAQkBFhphc2lzbmV0QHBydWViYXMuc2F0LmdvYi5teDEmMCQGA1UECQwdQXYuIEhpZGFsZ28gNzcsIENvbC4gR3VlcnJlcm8xDjAMBgNVBBEMBTA2MzAwMQswCQYDVQQGEwJNWDEZMBcGA1UECAwQRGlzdHJpdG8gRmVkZXJhbDESMBAGA1UEBwwJQ295b2Fjw6FuMRUwEwYDVQQtEwxTQVQ5NzA3MDFOTjMxITAfBgkqhkiG9w0BCQIMElJlc3BvbnNhYmxlOiBBQ0RNQTAeFw0xNzA1MTgwMzU0NTZaFw0yMTA1MTgwMzU0NTZaMIHlMSkwJwYDVQQDEyBBQ0NFTSBTRVJWSUNJT1MgRU1QUkVTQVJJQUxFUyBTQzEpMCcGA1UEKRMgQUNDRU0gU0VSVklDSU9TIEVNUFJFU0FSSUFMRVMgU0MxKTAnBgNVBAoTIEFDQ0VNIFNFUlZJQ0lPUyBFTVBSRVNBUklBTEVTIFNDMSUwIwYDVQQtExxBQUEwMTAxMDFBQUEgLyBIRUdUNzYxMDAzNFMyMR4wHAYDVQQFExUgLyBIRUdUNzYxMDAzTURGUk5OMDkxGzAZBgNVBAsUEkNTRDAxX0FBQTAxMDEwMUFBQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJdUcsHIEIgwivvAantGnYVIO3+7yTdD1tkKopbL+tKSjRFo1ErPdGJxP3gxT5O+ACIDQXN+HS9uMWDYnaURalSIF9COFCdh/OH2Pn+UmkN4culr2DanKztVIO8idXM6c9aHn5hOo7hDxXMC3uOuGV3FS4ObkxTV+9NsvOAV2lMe27SHrSB0DhuLurUbZwXm+/r4dtz3b2uLgBc+Diy95PG+MIu7oNKM89aBNGcjTJw+9k+WzJiPd3ZpQgIedYBD+8QWxlYCgxhnta3k9ylgXKYXCYk0k0qauvBJ1jSRVf5BjjIUbOstaQp59nkgHh45c9gnwJRV618NW0fMeDzuKR0CAwEAAaMdMBswDAYDVR0TAQH/BAIwADALBgNVHQ8EBAMCBsAwDQYJKoZIhvcNAQELBQADggIBABKj0DCNL1lh44y+OcWFrT2icnKF7WySOVihx0oR+HPrWKBMXxo9KtrodnB1tgIx8f+Xjqyphhbw+juDSeDrb99PhC4+E6JeXOkdQcJt50Kyodl9URpCVWNWjUb3F/ypa8oTcff/eMftQZT7MQ1Lqht+xm3QhVoxTIASce0jjsnBTGD2JQ4uT3oCem8bmoMXV/fk9aJ3v0+ZIL42MpY4POGUa/iTaawklKRAL1Xj9IdIR06RK68RS6xrGk6jwbDTEKxJpmZ3SPLtlsmPUTO1kraTPIo9FCmU/zZkWGpd8ZEAAFw+ZfI+bdXBfvdDwaM2iMGTQZTTEgU5KKTIvkAnHo9O45SqSJwqV9NLfPAxCo5eRR2OGibd9jhHe81zUsp5GdE1mZiSqJU82H3cu6BiE+D3YbZeZnjrNSxBgKTIf8w+KNYPM4aWnuUMl0mLgtOxTUXi9MKnUccq3GZLA7bx7Zn211yPRqEjSAqybUMVIOho6aqzkfc3WLZ6LnGU+hyHuZUfPwbnClb7oFFz1PlvGOpNDsUb0qP42QCGBiTUseGugAzqOP6EYpVPC73gFourmdBQgfayaEvi3xjNanFkPlW1XEYNrYJB4yNjphFrvWwTY86vL2o8gZN0Utmc5fnoBTfM9r2zVKmEi6FUeJ1iaDaVNv47te9iS1ai4V4vBY8r\" SubTotal=\"362.35\" Moneda=\"MXN\" TipoCambio=\"1\" Total=\"420.33\" TipoDeComprobante=\"I\" MetodoPago=\"PUE\" LugarExpedicion=\"21250\">\n <cfdi:Emisor Rfc=\"AAA010101AAA\" Nombre=\"Razon Social Test\" RegimenFiscal=\"601\"/>\n <cfdi:Receptor Rfc=\"XAXX010101000\" Nombre=\"Lo que sea\" UsoCFDI=\"P01\"/>\n <cfdi:Conceptos>\n <cfdi:Concepto ClaveProdServ=\"90101500\" Cantidad=\"1\" ClaveUnidad=\"E48\" Unidad=\"unidad\" Descripcion=\"Servicio Restaurantero\" ValorUnitario=\"362.35\" Importe=\"362.350000\">\n <cfdi:Impuestos>\n <cfdi:Traslados>\n <cfdi:Traslado Base=\"362.35\" Impuesto=\"002\" TipoFactor=\"Tasa\" TasaOCuota=\"0.160000\" Importe=\"57.976000\"/>\n </cfdi:Traslados>\n </cfdi:Impuestos>\n </cfdi:Concepto>\n </cfdi:Conceptos>\n <cfdi:Impuestos TotalImpuestosTrasladados=\"57.98\">\n <cfdi:Traslados>\n <cfdi:Traslado Impuesto=\"002\" TipoFactor=\"Tasa\" TasaOCuota=\"0.160000\" Importe=\"57.98\"/>\n </cfdi:Traslados>\n </cfdi:Impuestos>\n <cfdi:Complemento>\n <tfd:TimbreFiscalDigital xmlns:tfd=\"http://www.sat.gob.mx/TimbreFiscalDigital\" xsi:schemaLocation=\"http://www.sat.gob.mx/TimbreFiscalDigital http://www.sat.gob.mx/sitio_internet/cfd/TimbreFiscalDigital/TimbreFiscalDigitalv11.xsd\" Version=\"1.1\" UUID=\"EB34D386-8FF9-4F18-B846-B9B65B0DBEB1\" FechaTimbrado=\"2019-04-26T13:31:52\" RfcProvCertif=\"IAD121214B34\" SelloCFD=\"ChV75p37c0q/oRkIW8F6EyK3sx2elFo/IRU/uoSDqRljCv0TJqv1bICbN5sY2M+WF02WXtAnmUt0XOxVQ+IqUe2ag74jHuaQplAbaVh++xMT0ZUqyMFFDqyoQDt8K8hhlLwr2L9n0tlWiJvRfOzdsLwYM/VmvrtHEu8gUAD/7qWkH3AUN4ItF+5tjJ4iMcEpr6fnMfoGeLegUl/bJeO0IpsX0T77ezI0EVlK4XmzlnXsNRdN6gsbyQtma2O6H1uhbqHXRlnlueVe/iAebHpRzcIyYC70E9EDRtn9KrJpa9XalkLjilIVBUaA6AVuw71DP0UXUNaJ4CSxGDdwJInViQ==\" NoCertificadoSAT=\"20001000000300022323\" SelloSAT=\"nayGZIUOkChOLNSExj9XEs9TtGsONXwISXb66F56lDOCWjBM2mtu+kFtQzOrvZV2YzIZSzb6pkxvrU17SkMDaiR+5WqdkqTBbtLbyVG0mFBYbk0rHGihrBnr/JyWOB6MPn4Mxo7K2e6TwY/TsNXgitkVPmyR4KXbS0LRu8hfjwJhEBAlCEt/nV62Al7fqDKYa2+5JPpG7jVVkiPFenIER7BOFlEDr9asafQa8t8+ec2Gx8IUp8xUoXPPqkvav4Yhvci2IAccMu17H5B2Qcx61LFn1ptNSZ9gXcabAWA/eSxFHtfeTaFQ/0Ht+e4vAGLpdYdny04Cfaf/XtPliD7cPA==\"/>\n </cfdi:Complemento>\n</cfdi:Comprobante>\n",
"uuid": "EB34D386-8FF9-4F18-B846-B9B65B0DBEB1"
}
]
}
]
}