Saltar a contenido

Inicio Rápido

1. Registrar Receptor

El primer paso para utilizar el servicio es registrar al receptor de las solicitudes de cancelación.

Notificaciones de Cancelación

Puedes habilitar las notificaciones utilizando los campos medioNotificacion y notificacionDestino

Rechazo Ficto

Para habilitar el rechazo ficto de las solicitudes de cancelación, establezca el campo rechazoFicto a true

CIEC

using System.Net.Http;
using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(
    HttpMethod.Post,
    "https://api2.csfacturacion.com/monitor-cancelacion/contribuyentes/ciec"
);

request.Headers.Add("Authorization", "Basic QUFBMDEwMTAxQUFBOlBBU1NT");


MultipartFormDataContent content = new MultipartFormDataContent();
content.Add(new ByteArrayContent(File.ReadAllBytes("path/to/certificate.der")), "csdCertificate",
Path.GetFileName("path/to/certificate.der"));
content.Add(new ByteArrayContent(File.ReadAllBytes("/path/to/key.der")), "csdKey",
Path.GetFileName("/path/to/key.der"));
content.Add(new StringContent("12345678a"), "csdPassword");
content.Add(new StringContent("mi-ciec"), "ciec");
content.Add(new StringContent("false"), "rechazoFicto");
content.Add(new StringContent("EMAIL"), "medioNotificacion");
content.Add(new StringContent("foo@bar.com"), "notificacionDestino");
request.Content = content;
request.Content.Headers.ContentType = new MediaTypeHeaderValue("multipart/form-data");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
<?php
require 'vendor/autoload.php';

use GuzzleHttp\Client;
use GuzzleHttp\Psr7;

$client = new Client();

$response = $client->post('https://api2.csfacturacion.com/monitor-cancelacion/contribuyentes/ciec', [
    'headers' => [
        'Authorization' => 'Basic QUFBMDEwMTAxQUFBOlBBU1NT',
        'Content-Type'  => 'multipart/form-data',
    ],
    'multipart' => [
        [
            'name' => 'csdCertificate',
            'contents' => Psr7\Utils::tryFopen('path/to/certificate.der', 'r')
        ],
        [
            'name' => 'csdKey',
            'contents' => Psr7\Utils::tryFopen('/path/to/key.der', 'r')
        ],
        [
            'name' => 'csdPassword',
            'contents' => '12345678a'
        ],
        [
            'name' => 'ciec',
            'contents' => 'mi-ciec'
        ],
        [
            'name' => 'rechazoFicto',
            'contents' => 'false'
        ],
        [
            'name' => 'medioNotificacion',
            'contents' => 'EMAIL'
        ],
        [
            'name' => 'notificacionDestino',
            'contents' => 'foo@bar.com'
        ]
    ]
]);
import java.io.File;
import java.io.IOException;
import okhttp3.MultipartBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

OkHttpClient client = new OkHttpClient();

RequestBody requestBody = new MultipartBody.Builder()
    .setType(MultipartBody.FORM)
    .addFormDataPart("csdCertificate", RequestBody.create("", new File("/path/to/certificate.cer")))
    .addFormDataPart("csdKey", RequestBody.create("", new File("/path/to/key")))
    .addFormDataPart("csdPassword", "12345678a")
    .addFormDataPart("ciec", "mi-ciec")
    .addFormDataPart("rechazoFicto", "false")
    .addFormDataPart("medioNotificacion", "EMAIL")
    .addFormDataPart("notificacionDestino", "foo@bar.com")
    .build();

Request request = new Request.Builder()
    .url("https://api2.csfacturacion.com/monitor-cancelacion/contribuyentes/ciec")
    .post(requestBody)
    .header("Authorization", "Basic QUFBMDEwMTAxQUFBOlBBU1NT")
    .header("Content-Type", "multipart/form-data")
    .build();

try (Response response = client.newCall(request).execute()) {
    if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);
    response.body().string();
}
201 CREATED

no-body

E.FIRMA

using System.Net.Http;
using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(
    HttpMethod.Post,
    "https://api2.csfacturacion.com/monitor-cancelacion/contribuyentes"
);

request.Headers.Add("Authorization", "Basic QUFBMDEwMTAxQUFBOkllaGVlKnRoMjAzNg==");


MultipartFormDataContent content = new MultipartFormDataContent();
content.Add(
    new ByteArrayContent(File.ReadAllBytes("/path/to/fiel_certificate.der")),
    "fielCertificate",
    Path.GetFileName("/path/to/fiel_certificate.der")
);
content.Add(
    new ByteArrayContent(File.ReadAllBytes("/path/to/fiel_key.der")),
    "fielKey",
    Path.GetFileName("/path/to/fiel_key.der")
);
content.Add(new StringContent("passphrase"), "fielPassword");
content.Add(
    new ByteArrayContent(File.ReadAllBytes("/path/to/csd_certificate.der")),
    "csdCertificate",
    Path.GetFileName("/path/to/csd_certificate.der")
);

content.Add(
    new ByteArrayContent(File.ReadAllBytes("/path/to/csd_key.der")),
    "csdKey",
    Path.GetFileName("/path/to/csd_key.der")
);
content.Add(new StringContent("passphrase"), "csdPassword");
request.Content = content;
request.Content.Headers.ContentType = new MediaTypeHeaderValue("multipart/form-data");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
<?php
require 'vendor/autoload.php';

use GuzzleHttp\Client;
use GuzzleHttp\Psr7;

$client = new Client();

$response = $client->post('https://api2.csfacturacion.com/monitor-cancelacion/contribuyentes', [
    'headers' => [
        'Authorization' => 'Basic QUFBMDEwMTAxQUFBOlBBU1NT',
        'Content-Type'  => 'multipart/form-data'
    ],
    'multipart' => [
        [
            'name' => 'fielCertificate',
            'contents' => Psr7\Utils::tryFopen('/path/to/fiel_certificate.der', 'r')
        ],
        [
            'name' => 'fielKey',
            'contents' => Psr7\Utils::tryFopen('/path/to/fiel_key.der', 'r')
        ],
        [
            'name' => 'fielPassword',
            'contents' => 'passphrase'
        ],
        [
            'name' => 'csdCertificate',
            'contents' => Psr7\Utils::tryFopen('/path/to/csd_certificate.der', 'r')
        ],
        [
            'name' => 'csdKey',
            'contents' => Psr7\Utils::tryFopen('/path/to/csd_key.der', 'r')
        ],
        [
            'name' => 'csdPassword',
            'contents' => 'passphrase'
        ]
    ]
]);
import java.io.File;
import java.io.IOException;
import okhttp3.MultipartBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

OkHttpClient client = new OkHttpClient();

RequestBody requestBody = new MultipartBody.Builder()
    .setType(MultipartBody.FORM)
    .addFormDataPart("fielCertificate", RequestBody.create("", new File("/path/to/fiel_certificate.der")))
    .addFormDataPart("fielKey", RequestBody.create("", new File("/path/to/fiel_key.der")))
    .addFormDataPart("fielPassword", "passpharase")
    .addFormDataPart("csdCertificate", RequestBody.create("", new File("/path/to/csd_certificate.der")))
    .addFormDataPart("csdKey", RequestBody.create("", new File("/path/to/csd_key.der")))
    .addFormDataPart("csdPassword", "passphrase")
    .build();

Request request = new Request.Builder()
    .url("https://api2.csfacturacion.com/monitor-cancelacion/contribuyentes")
    .post(requestBody)
    .header("Authorization", "Basic QUFBMDEwMTAxQUFBOlBBU1NT")
    .header("Content-Type", "multipart/form-data")
    .build();

try (Response response = client.newCall(request).execute()) {
    if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);
    response.body().string();
}
201 CREATED

no-body

2. Registrar Cancelaciones

Una vez registrado el receptor, el sistema automáticamente registra las nuevas solicitudes de cancelación. Este evento se ejecuta sin intervención del receptor, sin embargo, puede ser iniciado manualmente desde una petición HTTP.

No Asíncrono

Este evento NO ES ASÍNCRONO, el máximo tiempo de respuesta para esta solicitud es de 1 minuto.

using System.Net.Http;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(
    HttpMethod.Post,
    "https://api2.csfacturacion.com/monitor-cancelacion/cancelaciones/AAA010101AAA"
);

request.Headers.Add("Accept", "application/json");
request.Headers.Add("Authorization", "Basic QUFBMDEwMTAxQUFBOnBhc3N3b3Jk");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
<?php
require 'vendor/autoload.php';

use GuzzleHttp\Client;

$client = new Client();

$response = $client->post(
    'https://api2.csfacturacion.com/monitor-cancelacion/cancelaciones/AAA010101AAA',
    [
        'headers' => [
            'Accept'        => 'application/json',
            'Authorization' => 'Basic QUFBMDEwMTAxQUFBOnBhc3N3b3Jk'
        ]
    ]
);
import java.io.IOException;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
    .url("https://api2.csfacturacion.com/monitor-cancelacion/cancelaciones/AAA010101AAA")
    .post()
    .header("Accept", "application/json")
    .header("Authorization", "Basic QUFBMDEwMTAxQUFBOnBhc3N3b3Jk")
    .build();

try (Response response = client.newCall(request).execute()) {
    if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);
    response.body().string();
}
200 OK

application/json

Solicitud Exitosa
{
    "success": true,
    "message": "Solicitud exitosa"
}

3. Manifestar Respuesta

Cuando se tienen solicitudes de cancelación registradas, es posible manifestar la aprobación o rechazo de dichas solicitudes.

using System.Net.Http;
HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://api2.csfacturacion.com/monitor-cancelacion/cancelaciones/AAAA010101AAA/61DAF276-1084-4942-9B82-A835160009F1");

request.Headers.Add("Accept", "application/json");
request.Headers.Add("Authorization", "Basic QUFBMDEwMTAxQUFBOnBhc3N3b3Jk");
request.Headers.Add("X-Action", "RECHAZO"); // RECHAZO - ACPETACION

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
<?php
require 'vendor/autoload.php';

use GuzzleHttp\Client;

$client = new Client();

$response = $client->post('https://api2.csfacturacion.com/monitor-cancelacion/cancelaciones/AAAA010101AAA/61DAF276-1084-4942-9B82-A835160009F1', [
    'headers' => [
        'Accept'        => 'application/json',
        'Authorization' => 'Basic QUFBMDEwMTAxQUFBOnBhc3N3b3Jk',
        'X-Action'      => 'RECHAZO' // RECHAZO - ACEPTACION
    ]
]);
import java.io.IOException;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
    .url("https://api2.csfacturacion.com/monitor-cancelacion/cancelaciones/AAAA010101AAA/61DAF276-1084-4942-9B82-A835160009F1")
    .post()
    .header("Accept", "application/json")
    .header("Authorization", "Basic QUFBMDEwMTAxQUFBOnBhc3N3b3Jk")
    .header("X-Action", "RECHAZO") // RECHAZO - ACEPTACION
    .build();

try (Response response = client.newCall(request).execute()) {
    if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);
    response.body().string();
}

La postura a la solicitud de cancelación se refleja mediante el header X-Action, con los posibles valores de [RECHAZO, ACEPTACION].

200 OK

application/json

Solicitud Exitosa
{
    "id": 12,
    "accion": "RECHAZO",
    "codigoEstatus": "1000",
    "mensajeEstatus": "Se recibió la respuesta de la petición de forma exitosa",
    "fecha": "2023-09-11T19:06:37"
}