Saltar al contenido principal

SDK de C#

Recomendamos programar directamente contra la API, la referencia técnica y tu IA lo hacen sencillo. Se puede generar un SDK en C# usando la especificación OpenAPI3 de nuestra API y openapi generator. Sin embargo, si quieres un SDK, te recomendamos usar el proyecto generado proporcionado, ya que incluye correcciones a algunos problemas como campos anulables.

Haz clic aquí para el repositorio de C#.

El paquete contiene su propia documentación (en docs/), pero los ejemplos a continuación te mostrarán cómo empezar.

Obtén tu clave API

  • Regístrate para una cuenta de prueba.

  • Configura para API cuando se te solicite, y envía un correo a Soporte para obtener una clave API. Necesitas demostrar un nivel de comprensión sobre el uso de la REST API, incluye en tu correo: el nombre y dirección de tu empresa, tu nombre y rol, describe tu caso de uso y da un breve resumen de tu experiencia en programación/REST.

  • Una vez emitida, tu clave API estará disponible en la aplicación web. Verás que estás en modo sandbox con un límite de 100 llamadas por hora.

Tu clave API va en el encabezado "Authorization", y tiene la forma: Bearer <your-api-key>. Tu clave API estará claramente indicada en el Portal de Desarrolladores.

Obtén el SDK y proyectos de ejemplo

Con tus herramientas git preferidas clona el repositorio del SDK en C#.

git clone https://github.com/legalesign/LegalesignCsharpSDK.git legalesignSDK

Configura el proyecto de ejemplo

Abre LegalesignCsharpSDK.sln y compila el proyecto. Deberías ver tres proyectos incluidos en la solución, nos centraremos en LegalesignTest que te permitirá empezar a hacer llamadas a la REST API.

Para ahorrar tiempo, puede que quieras añadir tu nombre de usuario, secreto, nombre de grupo, correo electrónico destino, nombre y apellido como propiedades Text para txtUsername, txtSecretKey, etc., en Form1. Si no, necesitarás suministrar estos datos cuando ejecutes el proyecto Winform (asegúrate de que esté marcado como proyecto de inicio). Si los codificas directamente, recuerda eliminar esa información una vez termines con el proyecto.

Veamos el primer bloque de código en Form1.cs:

private Configuration makeConfig() {
Configuration c = new Configuration();
c.AddApiKey("Authorization", $"Bearer {txtSecretKey.Text}");

return c;
}

Puedes ver cómo se usa el nombre de usuario y secreto que proporcionas y se pasan a la configuración para cada llamada que haremos después. Así es cómo se autorizan las llamadas a la API.

Prueba una solicitud GET

Vamos a asegurarnos de que puedes hacer una solicitud GET simple, para comprobar que tu autenticación está configurada correctamente.

El siguiente código se ejecuta cuando haces clic en el botón Get Groups. Tómate un momento para notar dónde se pasa la información de Configuración usando makeConfig(). Ejecuta el proyecto, ingresa tu nombre de usuario y clave en las cajas si no las has codificado en la propiedad Text y haz clic en el botón Get Groups.

private void btnCall_Click(object sender, EventArgs e)
{
GroupApi group = new GroupApi(makeConfig());
GroupListResponse groupList = group.GetGroups();

richTextBox1.Text = groupList.ToJson();
}

Si tiene éxito, recibirás una lista JSON de tus grupos.

Si no, verifica que tengas el valor de Authorization correcto.

Este código obtiene cualquier documento pendiente de firma, un caso de uso común. Pruébalo examinando y luego ejecutando el botón Get Documents.

private void button2_Click(object sender, EventArgs e)
{
DocumentApi docs = new DocumentApi(makeConfig());
DocumentListResponse documentList = docs.GetDocuments();

richTextBox1.Text = documentList.ToJson();
}
sugerencia

Las llamadas 'get_statuses()' y 'get_status()' son formas más rápidas de consultar información básica de los documentos.

Deberías empezar a entender cómo funciona el SDK. Vuelve al archivo Readme del paquete, y verás todos los objetos de la API para probar, y todos sus métodos.

Prueba una solicitud POST

A continuación enviaremos algo de HTML personalizado para firmar en una llamada API, luego subiremos un PDF y lo enviaremos.

Envía un documento HTML para firmar

Aquí tienes una pequeña porción de HTML con fines de demostración, que contiene un elemento de firma. Reemplaza los valores de grupo, nombre y correo electrónico.

private void btnPost_Click(object sender, EventArgs e)
{
DocumentApi docs = new DocumentApi(makeConfig());

List<DocumentSignerPost> signers = new List<DocumentSignerPost>();
signers.Add(new DocumentSignerPost(email: txtEmail.Text, firstname: txtFirstname.Text, lastname: txtLastname.Text));

//You must provide group id as lowercase
DocumentPost dp = new DocumentPost(
group: $"/api/v1/group/{txtGroupName.Text.ToLower()}/",
name: "dotnetdocument",
text: rtbBodyHTML.Text,
signers: signers,
doEmail: true,
footerHeight:30,
footer: "Legalesign ID: {{doc_id}}");

try
{
InlineResponse201 resp = docs.PostDocument(dp);
richTextBox1.Text = resp.ToJson();
}
catch (Exception ex) {
throw ex;
}
}

¿Cómo saber si funcionó? OpenAPI arroja una excepción para respuestas que no sean 2XX. Querrás poner todas tus solicitudes dentro de un bloque try/catch.

Cada vez que hagas un POST, probablemente querrás el ID del nuevo objeto. Está en el encabezado Location de la respuesta. En nuestro siguiente ejemplo veremos cómo subir un PDF para enviarlo a los firmantes, y obtener el ID de esa nueva plantilla.

Sube y envía un PDF

Lo más probable es que uses etiquetas de texto dentro de tus PDFs, para definir dónde firmarán o llenarán formularios las personas. Usar el parámetro processTags=true indica al sistema que revise tu documento y cree los campos para la información y las firmas que el destinatario debe firmar. Un ejemplo básico de un PDF con etiquetas está incluido en la raíz del proyecto SDK.

Subamos un PDF usando la versión 'with_http_info' de la solicitud POST para obtener el ID.

private void btnUploadPdf_Click(object sender, EventArgs e)
{
DialogResult result = openFileDialog1.ShowDialog();

if (result == System.Windows.Forms.DialogResult.OK)
{
TemplatepdfApi pdf = new TemplatepdfApi(makeConfig());

// Get the file and convert the contents to a base64 byte array.
Byte[] bytes = File.ReadAllBytes(openFileDialog1.FileName);
String contents = Convert.ToBase64String(bytes);
Byte[] encodedBytes = Convert.FromBase64String(contents);

try
{
// Upload the pdf for our group to use with a title and a tag
ApiResponse &lt;object&gt; response = pdf.PostPdfTemplateWithHttpInfo(new TemplatePdfFieldPost(group: $"/api/v1/group/{txtGroupName.Text.ToLower()}/",
pdfFile: encodedBytes, processTags: true, title: "test tagged document"));

// Just to demonstrate how to read response headers we'll put the returned
// header in the output rich text box. The 'Location' header contains the new
// Template ID.
richTextBox1.Text = JsonConvert.SerializeObject(response.Headers);

// We'll save this so we can use it when calling Send with Template
txtPDFLocation.Text = response.Headers["Location"];
}
catch (Exception ex)
{
throw ex;
}
}
}

Debido a que configuramos process_tags como true, todas las etiquetas han sido procesadas para que tu PDF esté listo. Como antes, necesitamos el ID del PDF para poder enviarlo. Por suerte, lo guardamos en el cuadro de texto txtPdfLocation.

El último fragmento de código de Send with Template muestra cómo usamos esa ubicación de PDF para enviar un documento precargado para que sea firmado.

private void btnSendTemplate_Click(object sender, EventArgs e)
{
DocumentApi docs = new DocumentApi(makeConfig());

List<DocumentSignerPost> signers = new List<DocumentSignerPost>();
signers.Add(new DocumentSignerPost(email: txtEmail.Text, firstname: txtFirstname.Text, lastname: txtLastname.Text));

//You must provide group id as lowercase
DocumentPost dp = new DocumentPost(
group: $"/api/v1/group/{txtGroupName.Text.ToLower()}/",
name: "dotnetdocument",
template: txtPDFLocation.Text,
signers: signers,
doEmail: true,
footerHeight: 30,
footer: "Legalesign ID: {{doc_id}}");

try
{
InlineResponse201 resp = docs.PostDocument(dp);
richTextBox1.Text = resp.ToJson();
}
catch (Exception ex)
{
throw ex;
}
}

Ponte a programar

Asegúrate de consultar la documentación generada por OpenAPI para diferentes tipos de llamadas y opciones.

Algunos errores comunes son:

El nombre del grupo debe coincidir exactamente con uno que ya tengas en tu organización.

Tu solicitud será denegada si tus credenciales son incorrectas, están desactualizadas o bloqueadas.

¡Feliz programación!