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
{
"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
{
"id": 12,
"accion": "RECHAZO",
"codigoEstatus": "1000",
"mensajeEstatus": "Se recibió la respuesta de la petición de forma exitosa",
"fecha": "2023-09-11T19:06:37"
}