Obtenir et mettre à jour le destinataire
Créons une classe réutilisable pour exécuter des requêtes vers l'API GraphQL. Pour l'authentification, voir S'authentifier avec l'API.
Assistant GraphQL réutilisable
Tout d'abord, créez une classe d'assistance qui encapsule l'exécution des requêtes :
GraphQLLegalesign.cs
using System.Net.Http.Headers;
using System.Text;
using System.Text.Json;
namespace CLILegalesignExamples
{
public static class GraphQLLegalesign
{
private static readonly HttpClient _httpClient = new();
public static async Task<string?> QueryAsync(string query, object variables, string token)
{
var request = new HttpRequestMessage
{
Method = HttpMethod.Post,
RequestUri = new Uri("https://graphql.uk.legalesign.com/graphql"),
Content = new StringContent(
JsonSerializer.Serialize(new { query, variables }),
Encoding.UTF8,
"application/json"
)
};
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token);
using var response = await _httpClient.SendAsync(request);
response.EnsureSuccessStatusCode();
return await response.Content.ReadAsStringAsync();
}
}
}
Outil de mise à jour du destinataire
CLIUpdateRecipient.cs
using System.Text.Json;
namespace CLILegalesignExamples
{
class CLIUpdateRecipient
{
static async Task Main(string[] args)
{
Console.WriteLine("Legalesign C# Update Recipient Tool");
string token = "<token-or-api-key>";
Console.WriteLine($"Fetching recipients for document {args[0]}.");
var data = await GraphQLLegalesign.QueryAsync(@"query getDocument($documentId:ID) {
document(id: $documentId) {
id
recipients {
id
email
firstName
lastName
}
}
}", new { documentId = args[0] }, token);
Console.WriteLine(data);
if (data == null) return;
QLResponse? d = JsonSerializer.Deserialize<QLResponse>(data);
QLRecipient? oldRecipient = d.data.document.recipients.Find(r => r.email == args[1]);
if (oldRecipient != null)
{
dynamic newRecipient = new
{
recipientId = oldRecipient.id,
email = args[2],
expiryDate = "2026-10-10T00:00:00.000Z",
firstName = args[3],
lastName = args[4]
};
await UpdateRecipientAsync(newRecipient, token);
}
else
{
Console.WriteLine($"WARNING::Unable to find recipient {args[1]} on document {args[0]}.");
}
async Task UpdateRecipientAsync(dynamic newRecipient, string token)
{
var data = await GraphQLLegalesign.QueryAsync(@"mutation ChangeRecipient(
$recipientId: ID!,
$email: String,
$expiryDate: AWSDateTime,
$firstName: String,
$lastName: String
) {
updateRecipient(
input: {
recipientId: $recipientId,
email: $email,
emailPreviousIfReplaced: false,
expiryDate: $expiryDate,
firstName: $firstName,
lastName: $lastName
}
)
}", newRecipient, token);
QLMutation mut = JsonSerializer.Deserialize<QLMutation>(data);
if (mut.errors != null) Console.WriteLine("ERROR::" + mut.errors[0].message);
else Console.WriteLine("Recipient updated.");
}
}
}
}
Classes d'assistance
Models.cs
namespace CLILegalesignExamples
{
public class QLRecipient
{
public string? id { get; set; }
public string? firstName { get; set; }
public string? lastName { get; set; }
public string? email { get; set; }
}
public class QLDocument
{
public string? id { get; set; }
public List<QLRecipient>? recipients { get; set; }
}
public class QLData
{
public QLDocument? document { get; set; }
}
public class QLResponse
{
public QLData? data { get; set; }
}
public class Data
{
public object updateRecipient { get; set; }
}
public class Error
{
public List<string> path { get; set; }
public object data { get; set; }
public string errorType { get; set; }
public object errorInfo { get; set; }
public List<Location> locations { get; set; }
public string message { get; set; }
}
public class Location
{
public int line { get; set; }
public int column { get; set; }
public object sourceName { get; set; }
}
public class QLMutation
{
public Data data { get; set; }
public List<Error>? errors { get; set; }
}
}
Trouvez tout cela dans les projets d'exemple : https://github.com/legalesign/CsharpGraphQLExamples
attention
Notez la vérification des erreurs après la mise à jour. L'API vous avertira parfois lorsque des règles métier sont enfreintes. Certains destinataires ne peuvent pas être mis à jour, par exemple si les paramètres exigent qu'ils doivent être témoins sur le même appareil que le signataire (appareil verrouillé).