> ## Documentation Index
> Fetch the complete documentation index at: https://docs.didit.me/llms.txt
> Use this file to discover all available pages before exploring further.

# SDK de C# i .NET per a KYC, AML i transaccions

> Guia d'inici ràpid del SDK oficial de Didit per a C# i .NET: crides asíncrones tipades, injecció de dependències i verificació de webhooks.

El cliente oficial de Didit per a C# i .NET. És compatible amb .NET 8 i .NET Standard 2.0, i tots els mètodes de l'API són `async`. A .NET Framework, utilitza C# 11 o una versió posterior. Consulta la [visió general dels SDK de servidor](https://docs.didit.me/ca/integration/server-sdks/overview.md) per saber què comparteixen tots els SDK.

## Instal·lació

```bash theme={null}
dotnet add package Didit
```

Per a la injecció de dependències d'ASP.NET Core, afegeix també `Didit.Extensions.DependencyInjection` i registra el client amb `services.AddDidit()`.

Els paquets són [`Didit`](https://www.nuget.org/packages/Didit) i [`Didit.Extensions.DependencyInjection`](https://www.nuget.org/packages/Didit.Extensions.DependencyInjection) a NuGet. El codi font i el registre de canvis són a [didit-protocol/sdk-dotnet](https://github.com/didit-protocol/sdk-dotnet) a GitHub.

## Configura el client

`new DiditClient()` llegeix `DIDIT_API_KEY` de l'entorn. Passa `DiditClientOptions` per substituir-ho, o per establir els identificadors de l'organització i de l'aplicació que necessiten les crides amb abast d'aplicació (casos, xarxes, informes regulatoris). Crea un sol client i reutilitza'l.

```csharp theme={null}
using System;
using Didit;

using var client = new DiditClient(new DiditClientOptions
{
    ApiKey = Environment.GetEnvironmentVariable("DIDIT_API_KEY"),
    OrganizationId = Environment.GetEnvironmentVariable("DIDIT_ORGANIZATION_ID"),
    ApplicationId = Environment.GetEnvironmentVariable("DIDIT_APPLICATION_ID"),
    Timeout = TimeSpan.FromSeconds(30),
    MaxRetries = 2,
});

// Options for a single call.
var decision = await client.Sessions.RetrieveDecisionAsync(
    "11111111-2222-3333-4444-555555555555",
    requestOptions: new RequestOptions { Timeout = TimeSpan.FromSeconds(5), MaxRetries = 0 });
Console.WriteLine(decision.Status);
```

Les propietats obligatòries de les sol·licituds són `required`, de manera que si n'hi ha una que falta, no compila. Les opcionals que deixes sense establir no s'envien.

## Crea una sessió

Crea una [sessió de verificació](https://docs.didit.me/ca/sessions-api/create-session.md) per a un flux de treball i envia el teu usuari a la seva URL.

```csharp theme={null}
using System;
using Didit;

using var client = new DiditClient();

var session = await client.Sessions.CreateAsync(new SessionsCreateParams
{
    WorkflowId = "11111111-2222-3333-4444-555555555555",
    VendorData = "user-123",
    Callback = "https://example.com/verification/done",
});
Console.WriteLine(session.Url);
```

## Llegeix la decisió

Quan l'usuari acabi (o quan arribi el webhook), [llegeix la decisió](https://docs.didit.me/ca/sessions-api/retrieve-session.md). Cada resultat de funcionalitat és una llista amb una entrada per cada node del flux.

```csharp theme={null}
using System;
using Didit;

using var client = new DiditClient();

var decision = await client.Sessions.RetrieveDecisionAsync("11111111-2222-3333-4444-555555555555");
Console.WriteLine(decision.Status);
foreach (var verification in decision.IdVerifications ?? Array.Empty<SessionDecisionIdVerifications>())
{
    Console.WriteLine(verification.Status);
}
```

## Verifica un webhook

Passa el cos brut, exactament tal com l'has rebut, i una manera de llegir les capçaleres de la sol·licitud. `DiditWebhooks.Verify` llança `WebhookVerificationException` per a qualsevol cosa que no sigui un lliurament vàlid i recent, i en cas contrari retorna un esdeveniment tipat.

```csharp theme={null}
using System;
using Didit;

var secret = Environment.GetEnvironmentVariable("DIDIT_WEBHOOK_SECRET") ?? "";

int HandleWebhook(string rawBody, Func<string, string?> header)
{
    try
    {
        var evt = DiditWebhooks.Verify(rawBody, header, secret);
        if (evt is SessionStatusUpdatedEvent updated)
        {
            Console.WriteLine($"{updated.SessionId} {updated.Status}");
        }
        return 200;
    }
    catch (WebhookVerificationException error)
    {
        Console.WriteLine($"rejected: {error.Reason}");
        return 400;
    }
}
```

En una API mínima d'ASP.NET Core, llegeix el cos amb un `StreamReader` i passa `name => request.Headers[name].FirstOrDefault()`. Mentre rotes el secret, passa'ls tots dos: `new[] { newSecret, oldSecret }`. Consulta [Webhooks](https://docs.didit.me/ca/integration/webhooks.md) per als esdeveniments i l'esquema de signatura.

## Fes el cribratge d'una transacció

Envia un pagament, una retirada o una transferència de criptoactius al [monitoratge de transaccions](https://docs.didit.me/ca/transaction-monitoring/overview.md); la resposta conté el seu estat i la puntuació de risc.

```csharp theme={null}
using System;
using Didit;

using var client = new DiditClient();

var transaction = await client.Transactions.CreateAsync(new TransactionsCreateParams
{
    TransactionId = "txn-1001",
    TransactionCategory = "finance",
    TransactionDetails = new()
    {
        Direction = "outbound",
        Amount = 1500,
        Currency = "EUR",
    },
    Subject = new()
    {
        EntityType = "individual",
        VendorData = "user-123",
        FullName = "Maria Garcia",
    },
});
Console.WriteLine($"{transaction.Status} {transaction.Score}");
```

## Verifica els tokens d'Authentication

`Authentication` verifica els tokens d'accés que signa el teu emissor d'[Authentication](https://docs.didit.me/ca/authentication/overview.md), al teu backend, sense cridar Didit per a cada sol·licitud. També intercanvia codis, actualitza tokens, comprova i revoca sessions, i executa autenticacions reforçades.

> [!NOTE]
>
> La verificació de tokens realitza les comprovacions descrites a [Verifica un token al teu servidor](https://docs.didit.me/ca/authentication/tokens-and-jwks.md#verifica-un-token-al-teu-servidor), amb l'emissor i les claus de signatura de la teva aplicació.

```csharp theme={null}
using System;
using System.Threading.Tasks;
using Didit;

// The publishable key (pk_live_... or pk_test_...) carries your issuer URL.
var auth = Authentication.FromPublishableKey("pk_live_...");

async Task<string?> CurrentUserAsync(string accessToken)
{
    try
    {
        var claims = await auth.VerifyAccessTokenAsync(accessToken, audience: "your-application-id");
        return claims.Subject;
    }
    catch (TokenVerificationException error)
    {
        Console.WriteLine($"rejected: {error.Reason}");
        return null;
    }
}
```

## Errors

```csharp theme={null}
using System;
using Didit;

using var client = new DiditClient();

try
{
    await client.Sessions.RetrieveDecisionAsync("11111111-2222-3333-4444-555555555555");
}
catch (NotFoundException)
{
    Console.WriteLine("no such session");
}
catch (ApiStatusException error)
{
    Console.WriteLine($"{error.StatusCode} {error.RequestId}");
}
```

## Llistes i fitxers

```csharp theme={null}
using System;
using Didit;

using var client = new DiditClient();

// Lists page through every result.
await foreach (var session in await client.Sessions.ListAsync(new SessionsListParams { Status = "Approved" }))
{
    Console.WriteLine(session.SessionId);
}

// Uploads take FileUpload.FromPath, FromBytes or FromStream.
var result = await client.IdVerification.VerifyAsync(new IdVerificationVerifyParams
{
    FrontImage = FileUpload.FromPath("id-front.jpg"),
    BackImage = FileUpload.FromPath("id-back.jpg"),
});
Console.WriteLine(result.IdVerification?.Status);
```

Les pàgines dels endpoints de servidor de la [referència de l'API](https://docs.didit.me/ca/api-reference/overview.md) tenen un exemple en .NET per a la seva operació, excepte els endpoints i camps que encara no estan disponibles en cap versió 1.0.1, indicats a la [visió general](https://docs.didit.me/ca/integration/server-sdks/overview.md).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.