1. Home
  2. CFDI 3.2
  3. Cancelación CFDI 3.2

Cancelación CFDI 3.2

sw cfdi 33 cancelacion sat fiscal factura electronica

 

Url Pruebas:

http://pruebascfdi.smartweb.com.mx/Cancelacion/wsCancelacion.asmx

Para poder consumir el servicio en lenguajes como C# o JAVA es necesario primero agregar la referencia al servicio web.

Cancelacion CSD


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

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

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 cancelación, que básicamente es el CSD del emisor que desea cancelar uno o mas CFDI, así como el RFC de dicho emisor, el arreglo de uuid correspondientes a los CFDI que se desea cancelar,  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.

using System;
using System.IO;
using Test.Autenticacion;
using Test.Cancelacion;
  
namespace Test
{
    class Program
    {
        static void Main(string... args)
        {
            try
            {
               
                wsCancelacionSoapClient Cancelacion = new wsCancelacionSoapClient();
                
                
                //Los UUIDs para este ejemplo fueron generados de manera aleatoria
                string... UUIDs =
                {
                    "17aeeccc-6ec0-49af-b786-0878d34e0b27",
                    "a3216283-078c-418e-bf2c-2fb62e418d45"
                };
                string Acuse = Cancelacion.CancelarCSD("CerB64", "KeyB64", "12345678a", "RFC emisor", UUIDs, "Token");
                Console.WriteLine(Acuse);
            }
            catch(Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
    }
}

package test;
  


import Cancelacion.ArrayOfString;
import Cancelacion.WsCancelacion;
import Cancelacion.WsCancelacionSoap;
import java.util.ArrayList;
  
public class Test {
  
    public static void main(String... args) {
        WsAutenticacionSoap autenticacion = new WsAutenticacion()
            .getWsAutenticacionSoap();
        WsCancelacionSoap cancelacion = new WsCancelacion()
            .getWsCancelacionSoap();
        
        try {
           
              
            ArrayOfStringHelper uuids = new ArrayOfStringHelper();
            uuids.addString("17aeeccc-6ec0-49af-b786-0878d34e0b27");
            uuids.addString("a3216283-078c-418e-bf2c-2fb62e418d45");
              
            String result = cancelacion.cancelarCSD("b64Cer", "b64Key", "password key",
                    "RFC emisor", uuids, "token de acceso");
  
            System.out.println(result);
           
        } catch(Exception ex) {
            System.out.println(ex.getMessage());
        }
    }
      
    public static class ArrayOfStringHelper extends ArrayOfString {
          
        public ArrayOfStringHelper() {
            this.string = new ArrayList<String>();
        }
          
        public void addString(String value) {
            this.string.add(value);
        }
    }
}

<?php $options = array("trace" => 1, "exceptions" => true);
   
    $urlCancelacion = "http://pruebascfdi.smartweb.com.mx/Cancelacion/wsCancelacion.asmx?WSDL";
      
    try
    {
       
        $cancelacion = new SoapClient($urlCancelacion, $options);
       
        //Los UUIDs para este ejemplo fueron generados de manera aleatoria
        $uuids = array("17aeeccc-6ec0-49af-b786-0878d34e0b27", "a3216283-078c-418e-bf2c-2fb62e418d45");
        $cancelacionData = array(
            "CSDCer" => "cerB64",
            "CSDKey" => "keyB64",
            "password" => "password key",
            "RFCEmisor" => "RFC emisor",
            "UUIDs" => $uuids,
            "tokenAutenticacion" => "token de acceso"
        );
        $acuse = $cancelacion->CancelarCSD($cancelacionData)->CancelarCSDResult;
        echo $acuse;
    }
    catch(SoapFault $e)
    {
        echo $e->faultstring;
    }
?>

Cancelacion PEM


Cancelación PEM es similar a CSD, con la diferencia que los archivos .key y .cer , son de formato PEM, y por esto tambien no es necesario el password del .key.

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, los cuales son el archivo PEM del certificado, PEM del archivo key del emisor que desea cancelar uno o mas CFDI, así como el RFC de dicho emisor, el arreglo de uuid correspondientes a los CFDI que se desea cancelar,  y por supuesto el token de acceso anteriormente generado.

Cabe mencionar que los archivos PEM, al ser binarios, deberan enviarse en formato base64 pára que podamos procesarlos en nuestro servidor.

using System;
using System.IO;
using Test.Autenticacion;
using Test.Cancelacion;
  
namespace Test
{
    class Program
    {
        static void Main()
        {
            try
            {
               
                wsCancelacionSoapClient Cancelacion = new wsCancelacionSoapClient();
               
                //Los UUIDs para este ejemplo fueron generados de manera aleatoria
                string... UUIDs =
                {
                    "17aeeccc-6ec0-49af-b786-0878d34e0b27",
                    "a3216283-078c-418e-bf2c-2fb62e418d45"
                };
                string Acuse = Cancelacion.CancelarPEM("PEMCerB64", "PEMKeyB64", "RFC emisor", UUIDs, "Token acceso");
                Console.WriteLine(Acuse);
            }
            catch(Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
    }
}

package test;
  

import Cancelacion.ArrayOfString;
import Cancelacion.WsCancelacion;
import Cancelacion.WsCancelacionSoap;
import java.util.ArrayList;
  
public class Test {
  
    public static void main(String... args) {
       
        WsCancelacionSoap cancelacion = new WsCancelacion()
            .getWsCancelacionSoap();
        
        try {
           
              
            ArrayOfStringHelper uuids = new ArrayOfStringHelper();
            uuids.addString("17aeeccc-6ec0-49af-b786-0878d34e0b27");
            uuids.addString("a3216283-078c-418e-bf2c-2fb62e418d45");
              
            String result = cancelacion.cancelarPEM("b64PemCer", "PEMb64Key",
                    "RFC emisor", uuids, "token de acceso");
  
            System.out.println(result);
            
        } catch(Exception ex) {
            System.out.println(ex.getMessage());
        }
    }
      
    public static class ArrayOfStringHelper extends ArrayOfString {
          
        public ArrayOfStringHelper() {
            this.string = new ArrayList<String>();
        }
          
        public void addString(String value) {
            this.string.add(value);
        }
    }
}

<?php $options = array("trace" => 1, "exceptions" => true);
    
    $urlCancelacion = "http://pruebascfdi.smartweb.com.mx/Cancelacion/wsCancelacion.asmx?WSDL";
      
    try
    {
       
        $cancelacion = new SoapClient($urlCancelacion, $options);
       
        //Los UUIDs para este ejemplo fueron generados de manera aleatoria
        $uuids = array("17aeeccc-6ec0-49af-b786-0878d34e0b27", "a3216283-078c-418e-bf2c-2fb62e418d45");
        $cancelacionData = array(
            "PEMCer" => "PEMCerB64" ,
            "PEMKey" => "PEMKeyB64",
            "RFCEmisor" => "RFC Emisor",
            "UUIDs" => $uuids,
            "tokenAutenticacion" => "token de acceso"
        );
        $acuse = $cancelacion->CancelarPEM($cancelacionData)->CancelarPEMResult;
        echo $acuse;
    }
    catch(SoapFault $e)
    {
        echo $e->faultstring;
    }
?>

Cancelacion PFX

Cancelación PFX es similar a los dos anteriores, con la diferencia de que este recibe un archivo .pfx, y la contraseña de dicho archivo.

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, los cuales son el archivo PFX y password de dicho archivo del emisor que desea cancelar uno o mas CFDI, asi como el RFC de dicho emisor, el arreglo de uuid correspondientes a los CFDI que se desea cancelar,  y por supuesto el token de acceso anteriormente generado.

Cabe mencionar que el archivo PFX, al ser binario, debera enviarse en formato base64 pára que podamos procesarlo en nuestro servidor.

Xml Soap Envelope consumir servicio cancelación PFX:

 

Codigos de error servicio cancelacion

Codigo
Mensaje
Descripción

201

UUID Cancelado exitosamente Se considera cancelado correctamente. Deberá aparecer con estatus Cancelado ante el SAT de 0 a 72 hrs posterior a la cancelación.

202

UUID Previamente cancelado Se considera previamente cancelado. Estatus Cancelado ante el SAT.

203

UUID No corresponde el RFC del emisor y de quien solicita la cancelación.

205

No Existe El sat da una prorroga de 72 hrs para que el comprobante aparezca con estatus Vigente posterior al envió por parte del Proveedor de Certificación de CFDI. Puede que algunos comprobantes no aparezcan al momento, es necesario esperar por lo menos 72 hrs.

 

Updated on mayo 26, 2017

Was this article helpful?

Related Articles