1. Home
  2. Cancelación CFDI 3.3
  3. Aceptar o Rechazar cancelación Receptor (Nuevo método de cancelación)
  1. Home
  2. Servicios
  3. Aceptar o Rechazar cancelación Receptor (Nuevo método de cancelación)

Aceptar o Rechazar cancelación Receptor (Nuevo método de cancelación)

Documentación teórica

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


Ruta
Operación
Descripción
/acceptreject/csd
POST Ruta para aceptar o rechazar una cancelación por csd.
/acceptreject/pfx
POST Ruta para aceptar o rechazar una cancelación por pfx.
/acceptreject/xml
POST Ruta para aceptar o rechazar una cancelación por xml.
/acceptreject/{rfc}/{uuid}/{accion}
POST Ruta para para aceptar o rechazar una cancelación por RFC y UUID.

Acciones disponibles

  • Aceptacion
  • Rechazo

Nota: La palabra “Aceptacion” debe ir sin acento.

Los servicios para Aceptar o Rechazar son servicios REST.

Aceptar/rechazar 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

Así como el arreglo de las respuestas por UUID.

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 Aceptar/rechazar un CFDI, así como el RFC de dicho receptor, así como el arreglo de las respuestas por UUID.

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

 

Aceptar/rechazar cancelación 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.AcceptReject;
namespace ExampleSDK {
    class Program {
        static void Main(string args) {
            try {
                //Creamos una instancia de tipo AcceptReject
                //A esta le pasamos la Url, usuario y password o token de authentication
                //Automaticamente despues de obtenerlo se procedera a procesar las facturas con su acción
                AcceptReject acceptReject = new AcceptReject("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"));
                AcceptRejectResponse response = acceptReject.AcceptByCSD(CerB64, KeyB64, "LAN7008173R5", "12345678a", new AceptacionRechazoItem {
                    new AceptacionRechazoItem() {
                        uuid = "01724196-ac5a-4735-b621-e3b42bcbb459", action = EnumAcceptReject.Aceptacion
                    }
                });
                //Para obtener el status de la consulta
                Console.Write(response.status);
                //Para obtener el codigoStatus
                Console.WriteLine(response.codStatus);
                //Para obtener una lista con los folios
                Console.WriteLine(response.data.folios);
                //Para obtener el acuse
                Console.WriteLine(response.data.acuse);
                //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

package sample_test;
import Services.AcceptReject.SWAcceptRejectService;
import Utils.Responses.AcceptReject.AceptarRechazarCancelationResponse;
import Utils.Responses.AcceptReject.CancelationData;

public static void main(String args) {
    SWAcceptRejectService app = new SWAcceptRejectService("demo", "123456789", Utils.url_pruebas);
    Map < String, String > uuids = new HashMap < String, String > ();
    uuids.put("06a46e4b-b154-4c12-bb77-f9a63ed55ff2", "Aceptacion");
    AceptarRechazarCancelationResponse response = null;
    response = (AceptarRechazarCancelationResponse) app.AceptarRechazarCancelacionCSD(uuids, password_csd, rfc, b64Cer, b64Key);
    System.out.println(response.Status);
    System.out.println(response.HttpStatusCode);
    LinkedList < CancelationData > folios = (LinkedList < CancelationData > ) response.folios;
    if (folios != null) {
        for (int i = 0; i < folios.size(); i++) {
            CancelationData datos = folios.get(i);
            System.out.println(datos.uuid);
            System.out.println(datos.estatusUUID);
            System.out.println(datos.respuesta);
        }
    }
    System.out.println(response.acuse);
}

Ir al Repositorio de PHP en GitHub

<?php use SWServicesCancelationCancelationService as cancelationService; $rfc = "LAN7008173R5"; $uuidV = "E0AAE6B3-43CC-4B9C-B229-7E221000E2BB"; $accion = "Aceptacion"; $aceptarRechazar = cancelationService::Set($params); $aceptarRechazar = cancelationService::AceptarRechazarCancelacionUUID($rfc, $uuidV, $accion); var_dump($aceptarRechazar); ?>

Aceptar/rechazar 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

Así como el arreglo de las respuestas por UUID.

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 PFX del receptor que desea Aceptar/rechazar un CFDI, así como el RFC de dicho receptor, así como el arreglo de las respuestas por UUID.

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


Aceptar/rechazar por XML


Como su nombre lo indica, este servicio recibe el XML para cancelación, donde deberán venir todos los UUID con su acción a realizar [Aceptar o Rechazar].
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 cancelación, que básicamente es el XML con todos los UUID con su acción correspondiente.

HTTP Request por XML

 

HTTP Response por XML


Aceptar/rechazar por UUID y RFC


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

  • UUID
  • RFC receptor

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 aceptación/rechazo, que son el RFC y el UUID a que desea aceptar/rechazar una cancelación (Para poder consumir este servicio es necesario subir los certificados en nuestro administrador de timbres, para así poder generar la petición), y por supuesto el token de acceso anteriormente generado.

Las URL del administrador de timbres son las siguientes:

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

1000

Se recibió la respuesta de la petición de forma exitosa

1001

Se recibió la respuesta de la petición de forma exitosa No existen peticiones de cancelación en
espera de respuesta para el uuid.

1002

Ya se recibió una respuesta para la petición de cancelación del uuid

1003

Sello No Corresponde al RFC Receptor

1004

Existen más de una petición de cancelación para el mismo uuid

1005

El uuid es nulo no posee el formato correcto

1006

Se rebaso el número máximo de solicitudes permitidas  Se cuenta con un límite 500 solicitudes pendientes por petición. Estás 500 solicitudes deben pertenecer al mismo Receptor.

 

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

  • Fernando Chio Achi

    La linea 18 del ejemplo de C# esta mal debe decir

    AcceptRejectResponse response = acceptReject.AcceptByCSD(CerB64, KeyB64, “LAN7008173R5”, “12345678a”, new AceptacionRechazoItem [] {

    falta el “[]” del arreglo de AceptacionRechazoItem

  • jones Fkenedy

    Buen dia, estoy implementando esta parte de aceptar/rechazar en C#, sin embargo mi problema es en la implementacion, lo hago por CSD y PFX y el response me retorna un “CACFDI33 – Error no controlado” en Message y en Message Detail un “1101-“, si lo hago por UUID y RFC me regresa que “el rfc no contiene un certificado valido”, estoy apuntando a TEST espero me puedan ayudar, de ante mano gracias

    • Juan Carlos Gamez Cuevas

      Buen día, es muy probable que los CSD/PFX con los que estás tratando de consultar no sean los del receptor.

      Para un mejor seguimiento comparte tu código al correo “soporte@sw.com.mx” y te ayudo con la implementación del consumo.

      Saludos!