# .NET

### Requisitos previos

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

* [Obtener un access\_token de Afip SDK](https://app.afipsdk.com)

### Básicos

Para usar los Web Services de ARCA, vamos a utilizar la [API de Afip SDK](https://docs.afipsdk.com/integracion/api).

En la [documentación de la API](https://docs.afipsdk.com/integracion/api) podés consultar todos los parámetros del endpoint.

***

### 1. Instalación

Vamos a usar [Newtonsoft.Json](https://www.nuget.org/packages/Newtonsoft.Json/) para trabajar con JSON.

{% tabs %}
{% tab title="dotnet CLI" %}

```bash
dotnet add package Newtonsoft.Json
```

{% endtab %}

{% tab title="Visual Studio (Package Manager Console)" %}

```bash
PM> Install-Package Newtonsoft.Json
```

{% endtab %}
{% endtabs %}

### 2. Obtener el Ticket de Acceso (TA)

Antes de llamar a los Web Services de ARCA, necesitás un ticket de acceso (TA), también llamado Token Authorization.

Este TA expira tras un tiempo, pero no tenés que preocuparte por renovarlo: Afip SDK lo cachea y solicita uno nuevo automáticamente si es necesario. Solo llamá a la API y Afip SDK te devuelve el TA correspondiente.

Para obtener el TA se necesita un certificado digital, pero con Afip SDK podés empezar en modo desarrollo usando el CUIT 20-40937847-2 sin necesidad de uno.

Si preferís [usar tu propio certificado](#usar-tu-propio-certificado-opcional), al final te mostramos cómo.

{% tabs %}
{% tab title="AfipSDKRequest.cs" %}

```csharp
using System;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
using Newtonsoft.Json;

var client = new HttpClient();

var authUrl = "https://app.afipsdk.com/api/v1/afip/auth";

// Reemplazar con tu access_token obtenido de https://app.afipsdk.com
var accessToken = "TU_TOKEN_AQUI";
client.DefaultRequestHeaders.Add("Authorization", $"Bearer {accessToken}"); 

var authData = new
{
    environment = "dev",
    tax_id = "20409378472", // CUIT a utilizar
    wsid = "wsfe"
};

var authJsonContent = JsonConvert.SerializeObject(authData);
var authContent = new StringContent(authJsonContent, Encoding.UTF8, "application/json");

var authResponse = await client.PostAsync(authUrl, authContent);

if (!authResponse.IsSuccessStatusCode)
{
    Console.WriteLine($"Error en la autorización: {authResponse.StatusCode}");
    return;
}

var authResponseBody = await authResponse.Content.ReadAsStringAsync();
dynamic auth = JsonConvert.DeserializeObject(authResponseBody);

string token = auth.token;
string sign = auth.sign;

Console.WriteLine($"Token: {token}");
Console.WriteLine($"Sign: {sign}");
```

{% endtab %}
{% endtabs %}

`token` y `sign` corresponden el TA que nos da ARCA. Debemos enviar estos datos en el body de cada solicitud a los Web Services. En el manual de cada Web Service verás dónde colocarlos.

### 3. Llamar al método del Web Service que necesites

Con el TA ya podés realizar las llamadas a los Web Services que necesites.

Es similar al código para obtener el TA, pero debés cambiar la URL y el body de la request.

Podés encontrar las URLs y los body correspondientes en las pestañas API de la documentación de cada Web Service.

{% content-ref url="../siguientes-pasos/web-services" %}
[web-services](https://docs.afipsdk.com/siguientes-pasos/web-services)
{% endcontent-ref %}

Si el Web Service que necesitás no se encuentra en la lista de la documentación, podés llamarlo siguiendo esta guía:

{% content-ref url="../siguientes-pasos/web-services/otro-web-service" %}
[otro-web-service](https://docs.afipsdk.com/siguientes-pasos/web-services/otro-web-service)
{% endcontent-ref %}

Podés usar la referencia de la API para obtener ejemplos de cómo usar los métodos de todos los web services de ARCA.

{% embed url="<https://afipsdk.com/docs/api-reference/introduction/>" %}

También podés usar las guías del blog de Afip SDK para .NET:

{% embed url="<https://afipsdk.com/blog/category/.NET/>" %}

***

### Usar tu propio certificado <sup><sub>(Opcional)<sub></sup>

Primero, obtenemos el certificado siguiendo esta guía.

{% embed url="<https://afipsdk.com/blog/como-obtener-certificado-para-web-services-arca/>" fullWidth="false" %}

Al pedir la autorización agregamos `cert` y `key` en el body

{% tabs %}
{% tab title="AfipSDKRequest.cs" %}

```csharp
var authData = new
{
    environment = "dev",
    tax_id = "20111111112", // CUIT del certificado
    wsid = "wsfe", 
    cert = "-----BEGIN CERTIFICATE-----MIIDRzC...", 
    key = "-----BEGIN RSA PRIVATE KEY-----MIIEowIBAAKCA..."
};
```

{% endtab %}
{% endtabs %}
