> For the complete documentation index, see [llms.txt](https://docs.afipsdk.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.afipsdk.com/siguientes-pasos/web-services/constatacion-de-comprobantes.md).

# Constatación de Comprobantes

### Requisitos previos

Para poder usar esta guía, primero necesitarás:

* [Integrar Afip SDK en tu proyecto](/readme.md#integracion)

***

<https://www.afip.gob.ar/ws/WSCDCV1/WSCDC_manual_desarrollador_v.2.pdf>

<details>

<summary>Identificador <kbd>wscdc</kbd></summary>

Producción <img src="/files/2MfR8eglU7oXMmZAqg6h" alt="Produccion" data-size="line">

Desarrollo <img src="/files/ycJkoLkZmdfaZt1HSWJo" alt="Desarrollo" data-size="original">

</details>

### **Paso 1 - Crear una instancia del web service**

{% tabs %}
{% tab title="Node" %}

```js
const ws = afip.WebService('wscdc');
```

{% endtab %}

{% tab title="PHP" %}

```php
$ws = $afip->WebService('wscdc');
```

{% endtab %}

{% tab title="Ruby" %}

```ruby
ws = afip.webService("wscdc")
```

{% endtab %}

{% tab title="Python" %}

```python
ws = afip.webService("wscdc")
```

{% endtab %}

{% tab title=".NET" %}

```csharp
AfipWebService ws = afip.WebService("wscdc");
```

{% endtab %}

{% tab title="Java" %}

```java
AfipWebService ws = afip.webService("wscdc");
```

{% endtab %}

{% tab title="API" %}
No se requiere ninguna acción adicional.
{% endtab %}
{% endtabs %}

### **Paso 2 - Preparar los datos para la solicitud**

En la [Referencia de API de Constatación de Comprobantes](https://afipsdk.com/docs/api-reference/web-services/wscdc/) pueden encontrar los métodos disponibles.

En este ejemplo vamos a usar los datos para el método `ComprobanteConstatar`

{% tabs %}
{% tab title="Node" %}

```js
// Obtenemos el TA
const ta = await ws.getTokenAuthorization();
	
// Preparamos los datos
const data = {
	'Auth': { 
		'Token': ta.token,
		'Sign': ta.sign,
		'Cuit': afip.CUIT
	},
	'CmpReq': {
                'CbteModo': 'CAE',
                'CuitEmisor': 20000000001,
                'PtoVta': 1,
                'CbteTipo': 1,
                'CbteNro': 2,
                'CbteFch': 20101014,
                'ImpTotal': 300.8,
                'CodAutorizacion': '60428000005029',
                'DocTipoReceptor': '80',
                'DocNroReceptor': '300000000007'
        }
};
```

{% endtab %}

{% tab title="PHP" %}

```php
// Obtenemos el TA
$ta = $ws->GetTokenAuthorization();
	
// Preparamos los datos
$data = array(
	'Auth' => array( 
		'Token' => $ta->token,
		'Sign' => $ta->sign,
		'Cuit' => $afip->CUIT
	),
	'CmpReq' => array(
                'CbteModo' => 'CAE',
                'CuitEmisor' => 20000000001,
                'PtoVta' => 1,
                'CbteTipo' => 1,
                'CbteNro' => 2,
                'CbteFch' => 20101014,
                'ImpTotal' => 300.8,
                'CodAutorizacion' => '60428000005029',
                'DocTipoReceptor' => '80',
                'DocNroReceptor' => '300000000007'
        )
);
```

{% endtab %}

{% tab title="Ruby" %}

```ruby
# Obtenemos el TA
ta = ws.getTokenAuthorization
	
# Preparamos los datos
data = {
  "Auth": { 
    "Token": ta["token"],
    "Sign": ta["sign"],
    "Cuit": afip.CUIT
  },
  "CmpReq": {
    "CbteModo": "CAE",
    "CuitEmisor": 20000000001,
    "PtoVta": 1,
    "CbteTipo": 1,
    "CbteNro": 2,
    "CbteFch": 20101014,
    "ImpTotal": 300.8,
    "CodAutorizacion": "60428000005029",
    "DocTipoReceptor": "80",
    "DocNroReceptor": "300000000007"
  }
}
```

{% endtab %}

{% tab title="Python" %}

```python
# Obtenemos el TA
ta = ws.getTokenAuthorization()
	
# Preparamos los datos
data = {
  "Auth": { 
    "Token": ta["token"],
    "Sign": ta["sign"],
    "Cuit": afip.CUIT
  },
  "CmpReq": {
    "CbteModo": "CAE",
    "CuitEmisor": 20000000001,
    "PtoVta": 1,
    "CbteTipo": 1,
    "CbteNro": 2,
    "CbteFch": 20101014,
    "ImpTotal": 300.8,
    "CodAutorizacion": "60428000005029",
    "DocTipoReceptor": "80",
    "DocNroReceptor": "300000000007"
  }
}
```

{% endtab %}

{% tab title=".NET" %}

```csharp
// Obtenemos el TA
var ta = await ws.GetTokenAuthorizationAsync();

// Preparamos los datos
var data = new Dictionary<string, object?>
{
    ["Auth"] = new Dictionary<string, object?>
    {
        ["Token"] = ta["token"],
        ["Sign"] = ta["sign"],
        ["Cuit"] = afip.CUIT
    },
    ["CmpReq"] = new Dictionary<string, object?>
    {
        ["CbteModo"] = "CAE",
        ["CuitEmisor"] = 20000000001,
        ["PtoVta"] = 1,
        ["CbteTipo"] = 1,
        ["CbteNro"] = 2,
        ["CbteFch"] = 20101014,
        ["ImpTotal"] = 300.8,
        ["CodAutorizacion"] = "60428000005029",
        ["DocTipoReceptor"] = "80",
        ["DocNroReceptor"] = "300000000007"
    }
};
```

{% endtab %}

{% tab title="Java" %}

```java
// Obtenemos el TA
GetServiceTAResponse ta = ws.getTokenAuthorization();

// Preparamos los datos
Map<String, Object> auth = new HashMap<>();
auth.put("Token", ta.getToken());
auth.put("Sign", ta.getSign());
auth.put("Cuit", afip.getOptions().getCuit());

Map<String, Object> cmpReq = new HashMap<>();
cmpReq.put("CbteModo", "CAE");
cmpReq.put("CuitEmisor", 20000000001L);
cmpReq.put("PtoVta", 1);
cmpReq.put("CbteTipo", 1);
cmpReq.put("CbteNro", 2);
cmpReq.put("CbteFch", 20101014);
cmpReq.put("ImpTotal", 300.8);
cmpReq.put("CodAutorizacion", "60428000005029");
cmpReq.put("DocTipoReceptor", "80");
cmpReq.put("DocNroReceptor", "300000000007");

Map<String, Object> data = new HashMap<>();
data.put("Auth", auth);
data.put("CmpReq", cmpReq);
```

{% endtab %}

{% tab title="API" %}
No se requiere ninguna acción adicional.
{% endtab %}
{% endtabs %}

### **Paso 3 - Ejecutamos la solicitud**

{% tabs %}
{% tab title="Node" %}

```js
const res = await ws.executeRequest('ComprobanteConstatar', data);

console.log(res);
```

{% endtab %}

{% tab title="PHP" %}

```php
$res = $ws->ExecuteRequest('ComprobanteConstatar', $data);

var_dump($res);
```

{% endtab %}

{% tab title="Ruby" %}

```ruby
res = ws.executeRequest("ComprobanteConstatar", data)

puts res
```

{% endtab %}

{% tab title="Python" %}

```python
res = ws.executeRequest("ComprobanteConstatar", data)

print(res)
```

{% endtab %}

{% tab title=".NET" %}

```csharp
var res = await ws.ExecuteRequestAsync<Dictionary<string, object?>>("ComprobanteConstatar", data);

Console.WriteLine(JsonSerializer.Serialize(res));
```

{% endtab %}

{% tab title="Java" %}

```java
Map<String, Object> res = ws.executeRequest("ComprobanteConstatar", data);

System.out.println(res);
```

{% endtab %}

{% tab title="API" %}
**Endpoint**

<mark style="color:blue;">`POST`</mark> `https://app.afipsdk.com/api/v1/afip/requests`

**Ejemplo**

```json
{
    "environment": "dev",
    "method": "ComprobanteConstatar",
    "wsid": "wscdc",
    "params": {
        "Auth": {
            "Token": "{{token}}",
            "Sign": "{{sign}}",
            "Cuit": "20409378472"
        },
        "CmpReq": {
            "CbteModo": "CAE",
            "CuitEmisor": 20000000001,
            "PtoVta": 1,
            "CbteTipo": 1,
            "CbteNro": 2,
            "CbteFch": 20101014,
            "ImpTotal": 300.8,
            "CodAutorizacion": "60428000005029",
            "DocTipoReceptor": "80",
            "DocNroReceptor": "300000000007"
        }
    }
}
```

{% endtab %}
{% endtabs %}
