1. Home
  2. Cancelación CFDI 3.3
  3. Consulta CFDI relacionados
  1. Home
  2. Servicios
  3. Consulta CFDI relacionados

Consulta CFDI relacionados

Servicio mediante el cual se obtienen los CFDI que estén relacionados a una factura.

En el nuevo esquema de cancelación, no es posible cancelar una factura si esta tiene facturas que la estén relacionando.

Documentación teórica

https://developers.sw.com.mx/knowledge-base/como-cancelar-emisor/


Url Productivo:

https://services.sw.com.mx

Ruta
Operación
Descripción
/relations/csd
POST Ruta para obtener cfdi relacionados por CSD.
/relations/pfx
POST Ruta para obtener cfdi relacionados por PFX.
/relations/xml
POST Ruta para obtener cfdi relacionados por XML.
/relations/{rfc}/{uuid}
POST Ruta para obtener cfdi relacionados por RFC y UUID.

Los servicios para obtener relaciones son servicios REST.

Obtener relaciones por CSD


Como su nombre lo indica, este servicio recibe todos los elementos que componen el CSD los cuales son los siguientes:

  • Certificado (.cer)
  • Key (.key)
  • Password del archivo key
  • RFC receptor

Asi como el UUID del CFDI al que se desea consultar las relaciones.

Esto ya que nuestro servidor generara el acuse de cancelación.
Paso 1: Obtener token de acceso, o en su defecto usar token infinito
Primeramente se deberá autenticar en nuestros servicios en orden de obtener token de acceso, o si se desea,  se puede usar el token infinito.
Paso 2: Enviar datos necesarios
Se envían los datos necesarios, que básicamente es el CSD del receptor que desea consultar un CFDI, así como el RFC de dicho receptor, el uuid correspondientes al CFDI que se desea consultar,  y por supuesto el token de acceso anteriormente generado.

Cabe mencionar que los archivos .cer y .key,  al ser binarios, deberán enviarse en formato base64 para que podamos procesarlos en nuestro servidor.

HTTP Request por CSD

 

HTTP Response por CSD

 

Obtener relaciones con las librerias por CSD

Ir al Repositorio de C# en GitHub

using System;
using System.IO;
using System.Text;
using SW.Helpers;
using SW.Services.Relations;
namespace ExampleSDK
{
    class Program
    {
        static void Main(string args)
        {
            try
            {
                //Creamos una instancia de tipo Relations
                //A esta le pasamos la Url, usuario y password o token de authentication
                //Automaticamente despues de obtenerlo se procedera a consultar las facturas relacionadas
                Relations relations = new Relations("http://services.test.sw.com.mx", "demo", "123456789");
                //Obtenemos Certificado y lo convertimos a Base 64 
                string CerB64 = Convert.ToBase64String(File.ReadAllBytes("CSD_Pruebas_CFDI_LAN7008173R5.cer")); 
                //Obtenemos LLave y lo convertimos a Base 64 
                string KeyB64 = Convert.ToBase64String(File.ReadAllBytes("CSD_Pruebas_CFDI_LAN7008173R5.key"));
                RelationsResponse response = relations.RelationsByCSD(CerB64, KeyB64, "LAN7008173R5", "12345678a", "021ea2fb-2254-4232-983b-9808c2ed831b");
                //Para obtener el status de la consulta
				Console.Write(response.status);
				//Para obtener el codigoStatus
                Console.WriteLine(response.codStatus);
                //Para obtener el uuid consultado
	            Console.WriteLine(response.data.uuidConsultado);
	            //Para obtener el resultado de la consulta
	            Console.WriteLine(response.data.resultado);
	            //Para obtener los uuid padres
	            Console.WriteLine(response.data.uuidsRelacionadosPadres);
	            //Para obtener los uuid hijo
	            Console.WriteLine(response.data.uuidsRelacionadosHijos);
	            //En caso de error se pueden consultar los siguientes campos
	            Console.WriteLine(response.message);
	            Console.WriteLine(response.messageDetail);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
    }
}

Ir al Repositorio de Java en GitHub

SWRelationsService app = new SWRelationsService("demo", "123456789", Utils.url_pruebas);
CfdiRelacionadosResponse response = null;
response = (CfdiRelacionadosResponse) app.CfdiRelacionadosCSD(uuid, password_csd, rfc, b64Cer, b64Key);
System.out.println(response.Status);
System.out.println(response.HttpStatusCode);
System.out.println(response.resultado);
LinkedList<RelacionData> padres = (LinkedList<RelacionData>) response.uuidsRelacionadosPadres;
if(padres != null) {
	for (int i = 0; i < padres.size(); i++) {
		RelacionData datos = padres.get(i);
		System.out.println(datos.uuid);
		System.out.println(datos.rfcEmisor);
		System.out.println(datos.rfcReceptor);
	}
}
LinkedList<RelacionData> hijos = (LinkedList<RelacionData>) response.uuidsRelacionadosHijos;
if(hijos != null) {
for (int i = 0; i < hijos.size(); i++) {
	RelacionData datos = hijos.get(i);
	System.out.println(datos.uuid);
	System.out.println(datos.rfcEmisor);
	System.out.println(datos.rfcReceptor);
	}
}
//En caso de obtener error, este puede obtenerse de los siguientes campos
System.out.println(response.message);
System.out.println(response.messageDetail);

Ir al Repositorio de PHP en GitHub

<?php
use SWServicesCancelationCancelationService as cancelationService;

$uuidV = "E0AAE6B3-43CC-4B9C-B229-7E221000E2BB";
$rfc = "LAN7008173R5";
$cfdiRelacionados = cancelationService::Set($params);
$cfdiRelacionados = cancelationService::ConsultarCFDIRelacionadosUUID($rfc, $uuidV);
var_dump($cfdiRelacionados);

 

Obtener relaciones por PFX


Como su nombre lo indica, este servicio recibe todos los elementos que componen el PFX los cuales son los siguientes:

  • PFX
  • Password del archivo key
  • RFC receptor

Asi como el UUID del CFDI al que se desea consultar las relaciones.

Esto ya que nuestro servidor generara el acuse de cancelación.
Paso 1: Obtener token de acceso, o en su defecto usar token infinito
Primeramente se deberá autenticar en nuestros servicios en orden de obtener token de acceso, o si se desea,  se puede usar el token infinito.
Paso 2: Enviar datos necesarios
Se envían los datos necesarios para la consulta, que básicamente es el PFX del receptor que desea consultar un CFDI, así como el RFC de dicho receptor, el uuid correspondientes al CFDI que se desea consultar,  y por supuesto el token de acceso anteriormente generado.

Cabe mencionar que los archivos .pfx,  al ser binarios, deberán enviarse en formato base64 para que podamos procesarlos en nuestro servidor.

HTTP Request por PFX

 

HTTP Response por PFX


Obtener relaciones por XML

Como su nombre lo indica, este servicio recibe un XML con el UUID del cual consulta los documentos relacionados.
Paso 1: Obtener token de acceso, o en su defecto usar token infinito
Primeramente se deberá autenticar en nuestros servicios en orden de obtener token de acceso, o si se desea,  se puede usar el token infinito.
Paso 2: Enviar datos necesarios
Se envían los datos necesarios para la consulta, que básicamente es el XML con el uuid correspondientes al CFDI que se desea consultar,  y por supuesto el token de acceso anteriormente generado.

HTTP Request por XML

 

HTTP Response por XML


Obtener relaciones por UUID


Para utilizar este servicio es necesario cargar los certificados en nuestro administrador de timbres, así mismo se proporcionan los siguientes elementos:

  • UUID
  • RFC receptor

Esto ya que nuestro servidor generara el acuse de cancelación.
Paso 1: Obtener token de acceso, o en su defecto usar token infinito
Primeramente se deberá autenticar en nuestros servicios en orden de obtener token de acceso, o si se desea,  se puede usar el token infinito.
Paso 2: Enviar datos necesarios
Se envían los datos necesarios para la consulta, que básicamente es el CSD del receptor que desea consultar un CFDI, así como el RFC de dicho receptor, el uuid correspondientes al CFDI que se desea consultar,  y por supuesto el token de acceso anteriormente generado.

Es necesario subir los certificados a nuestro administrador de timbres para poder consumir este servicio .

Administrador de Pruebas:

http://pruebascliente.smartweb.com.mx


Administrador de Productivo:

https://cliente.smartweb.com.mx

HTTP Request por UUID

HTTP Response por UUID

Respuestas

Todos los response retornan la misma estructura en caso de error o en caso de petición satisfactoria, las cuales son las siguientes:

Tipos de respuesta

En caso de una respuesta exitosa, se regresará un 200. En caso de una respuesta no exitosa, se regresará un código diferente de 200, el código puede variar dependiendo del problema dado.

Respuesta exitosa

En este caso se recibe un mensaje JSON, el cual contiene los siguientes datos:

  • uuidConsultado: El uuid al que se consultan los relacionados.
  • Resultado: Mensaje que retorna el SAT.
  • uuidsRelacionadosPadres: Un arreglo de objetos uuid padre, el cual tiene las propiedades: uuid, rfcEmisor, rfcReceptor.
  • uuidsRelacionadosHijos: Un arreglo de objetos uuid hijo, el cual tiene las propiedades: uuid, rfcEmisor, rfcReceptor

Respuesta no exitosa

Códigos de respuesta.

Codigo
Mensaje
Descripción

2000

Existen cfdi relacionados al folio fiscal Este código de respuesta se presentará cuando la petición de consulta encuentre documentos relacionados al UUID consultado.

2001

No Existen cfdi relacionados al folio fiscal Este código de respuesta se presentará cuando el UUID consultado no contenga documentos relacionados a él.

2002

El folio fiscal no pertenece al receptor.  Este código de respuesta se presentará cuando el RFC del receptor no corresponda al UUID consultado.

 

Para realizar la integración con nuestros servicios recomendamos utilizar POSTMAN , facilita las pruebas previas a la codificación.
Puedes importar el archivo POSTMAN-collection que proporcionamos al final del articulo para su descarga en POSTMAN para que puedas realizar pruebas funcionales de nuestro servicio.

Updated on junio 17, 2019

Article Attachments

Was this article helpful?

Related Articles

  • José Eduardo Mares Torres

    Buen día, ¿cuando actualizaran el nuget SW-sdk? donde ya se encuentren los métodos para el nuevo esquema de cancelación

  • Eduardo Gm

    por qué? tienen que ser el CSD del Receptor, si yo quiero saber qué documentos relacionados tiene una factura que quiero cancelar para qué necesito los CSD del Receptor además que no los tengo y no creo que me los faciliten y tampoco quiero recolectar loas CSD de todo mi catálogo de clientes.

    Es la única manera?

    • Juan Carlos Gamez Cuevas

      Mediante un WS así es. Y la razón no la sabemos, pues es directamente consumido del SAT.

      Así mismo la alternativa es acceder al buzón tributario, ahí se pueden ver las facturas relacionadas siendo emisor.

      Saludos!

      • Eduardo Gm

        si la verdad se me hace muy raro eso, ni hablar!

  • Alfredo Rojo

    Como se genera la firma para la consulta de cfdi relacionados?

    • Juan Carlos Gamez Cuevas

      Buena tarde, ¿A que se refiere con “firma”?

      Saludos!

      • Alfredo Rojo

        En la sección Obtener relaciones por XML tienen un xml PeticionConsultaRelacionados como se generan los datos DigestValue y SignatureValue los demás datos entiendo que son datos del CSD del receptor, correcto?

        • Juan Carlos Gamez Cuevas

          Esos campos se calculan en base a una especificación para firmas de XML. Puedes verificar la información del estándar: https://www.w3.org/TR/xmldsig-core1/ y buscar algún ejemplo en internet sobre como hacerlo en el lenguaje que uses para programar.

          Saludos!