OneSpan Sign para nuevos usuarios: cómo crear y enviar su primer paquete (API REST)

Michael Williams, 15 de Julio de 2015

La finalización de la serie "OneSpan Sign for New Users" está cerca. Hasta ahora, he cubierto ejemplos simples de uso firmas electrónicas , la interfaz de usuario de OneSpan Sign, Java SDK y .NET SDK. Puedes ver la lista completa de publicaciones al final de este blog. Los dos últimos blogs de la serie cubrirán el uso de la API REST de OneSpan Sign, que cubrirá, creará y enviará un paquete de documentos.

Si no tiene una cuenta de Sandbox, consulte mi primer blog para saber cómo puedes registrarte.

Configuración

Antes de comenzar, deberá configurar su entorno. Para este ejemplo, usaré C # y Microsoft Visual Studio. Continúe y obtenga un proyecto y un archivo .cs creado. Llamé a mi proyecto "CreateAndSendPackageREST" y mi archivo .cs, "CreateAndSendPackageREST.cs". Si necesita ayuda para configurar esto, vea mi primera Blog de .NET SDK (puede ignorar la parte del SDK de .NET y pasar a las secciones "Descarga de Microsoft Visual Studio" y "Crear y configurar su proyecto C #") para obtener instrucciones más detalladas.

Firmas electrónicas - Guía del principiante

Firmas electrónicas - Guía del principiante

Esta comunicación esencial de 25 páginas presenta conceptos legales importantes y consideraciones clave a la hora de crear procesos comerciales digitales con firmas electrónicas.

Descargar ahora

Crear y enviar un paquete

El código

Dado que la configuración del entorno y la configuración del proyecto se han cubierto en blogs anteriores, en esta serie, saltaré directamente al código. Abra el archivo .cs que creó anteriormente y copie en el siguiente código. Cubriré el código con más detalle a continuación.

utilizando  Sistema; 
utilizando  Diagnostico del sistema; 
utilizando  System.IO; 
utilizando  System.Net; 
utilizando  System.Net.Http; 
utilizando  System.Net.Http.Headers; 
utilizando  System.Text; 

espacio de nombres  CreateAndSendPackageREST 
{
     público  clase  CreateAndSendPackage 
    {
         público  estático  vacío  Principal(  cuerda  [] args) 
        {        

             cuerda  apiKey =  "YOUR_API_KEY"  ; 
      cuerda  url =  "https://sandbox.esignlive.com/api"  ; 
             
      cuerda  jsonString =  "{\" roles \ ": [{\" bloqueado \ ": falso, \" emailMessage \ ": {\" content \ ": \" \ "}, \" attachRequirements \ ":
[], \ "reasignar \": falso, \ "tipos especiales \": [], \ "id \": \ "Remitente \", \ "data \": nulo, \ "tipo \": \ "SIGNER \ ", \" index \ ": 0, \" firmantes \ ": [{\" auth \ ": {\" desafíos \ ":
[], \ "esquema \": \ "NINGUNO \"}, \ "empresa \": \ "Silanis \", \ "firstName \": \ "yourFirst \", \ "lastName \": \ "yourLast \ ", \" phone \ ": \" \ ", \" email \ ": \" your.email @example .com \ ", \" knowledgeBasedAuthentication \ ": null, \" language \ ": \" en \ ", \" title \ ": \" Silanis \ ", \" external \ ": null, \" professionalIdentityFields \ " :
[], \ "userCustomFields \": [], \ "delivery \": {\ "email \": true, \ "provider \": false, \ "download \": true}, \ "group \": nulo, \ "firma \": nulo, \ "dirección \": nulo, \ "datos \": nulo, \ "nombre \": \ "\", \ "tipos especiales \":
[]}], \ "nombre \": \ "Remitente \"}, {\ "bloqueado \": falso, \ "emailMessage \": {\ "content \": \ "\"}, \ "attachRequirements \ ": [], \" reasignar \ ": falso, \" SpecialTypes \ ": [], \" id \ ": \" Signer \ ", \" data \ ": null, \" type \ ": \" SIGNER \ ", \" index \ ": 0, \" signers \ ": [{\" auth \ ": {\" challenge \ ":
[], \ "esquema \": \ "NINGUNO \"}, \ "empresa \": \ "\", \ "nombre \": \ "signerFirst \", \ "apellido \": \ "signerLast \" , \ "phone \": \ "\", \ "email \": \ "signer.email @example .com \ ", \" knowledgeBasedAuthentication \ ": null, \" language \ ": \" en \ ", \" title \ ": \" \ ", \" external \ ": null, \" professionalIdentityFields \ ":
[], \ "userCustomFields \": [], \ "entrega \": {\ "correo electrónico \": falso, \ "proveedor \": falso, \ "descarga \": falso}, \ "grupo \": nulo, \ "id \": \ "Firmante \", \ "firma \": nulo, \ "dirección \": nulo, \ "datos \": nulo, \ "nombre \": \ "\", \ "specialTypes \": []}], \ "nombre \": \ "Firmante \"}], \ "documentos \": [{\ "aprobaciones \": [{\ "rol \": \ "Firmante \ ", \" firmado \ ": nulo, \" aceptado \ ": nulo, \" datos \ ": nulo, \" campos \ ":
[{\ "página \": 0, \ "subtipo \": \ "NOMBRE COMPLETO \", \ "ancho \": 200, \ "enlace \": nulo, \ "extracto \": falso, \ "extractoAnchor \ ": nulo, \" izquierda \ ": 175, \" arriba \ ": 165, \" validación \ ": nulo, \" altura \ ": 50, \" datos \ ": nulo, \" tipo \ ": \ "FIRMA \", \ "valor \": \ "\"}], \ "nombre \": \ "\"}, {\ "rol \": \ "Remitente \", \ "firmado \": nulo, \ "aceptado \": nulo, \ "datos \": nulo, \ "campos \":
[{\ "página \": 0, \ "subtipo \": \ "NOMBRE COMPLETO \", \ "ancho \": 200, \ "enlace \": nulo, \ "extracto \": falso, \ "extractoAnchor \ ": nulo, \" izquierda \ ": 550, \" arriba \ ": 165, \" validación \ ": nulo, \" altura \ ": 50, \" datos \ ": nulo, \" tipo \ ": \ "FIRMA \", \ "valor \": \ "\"}], \ "nombre \": \ "\"}], \ "nombre \": \ "sampleAgreement \"}], \ "nombre \ ": \" Test Package REST \ ", \" type \ ": \" PACKAGE \ ", \" language \ ": \" en \ ", \" emailMessage \ ": \" \ ", \" description \ " : \ "Nuevo paquete \", \ "autocompletar \": verdadero, \ "estado \": \ "ENVIADO \"} "  ; 
             

             StringContent jsonContent =  nuevo  StringContent (jsonString, Encoding.UTF8,  "aplicación / json"  ); 


             byte  [] fileByteArray = File.ReadAllBytes (  "PATH_TO_YOUR_PDF.pdf"  ); 
             ByteArrayContent content =  nuevo  ByteArrayContent (fileByteArray); 

             content.Headers.ContentDisposition =  nuevo  ContentDispositionHeaderValue (  "datos de formulario"  ); 
             content.Headers.ContentDisposition.Name =  "\"archivo\""  ; 
             content.Headers.ContentDisposition.FileName =  "\" NAME_OF_YOUR_FILE.pdf \ ""  ; 
             content.Headers.ContentType =  nuevo  MediaTypeHeaderValue (  "Solicitud PDF"  ); 

             MultipartFormDataContent form =  nuevo  MultipartFormDataContent (); 
             form.Add (contenido,  "\"archivo\""  ,  "\" NAME_OF_YOUR_FILE.pdf \ ""  ); 
             form.Add (jsonContent,  "\"carga útil\""  ); 

             HttpClient myClient =  nuevo  HttpClient (); 
             myClient.DefaultRequestHeaders.Authorization =  nuevo  AuthenticationHeaderValue (  "Básico"  , Clave API); 
             myClient.DefaultRequestHeaders.Add (  "Aceptar"  ,  "aplicación / json"  ); 
                         
             var  respuesta = myClient.PostAsync (  nuevo  Uri (url) +  "/ paquetes /"  , forma) .Resultado; 
            Debug.WriteLine (response.Content.ReadAsStringAsync (). Resultado);

        }

    }

}

Rompiendo el código

Ahora que tiene el código copiado en su archivo .cs, recorreré el código, sección por sección, dejándole saber dónde necesitará ingresar información para su paquete y describiendo lo que hace cada sección. Como este es un ejemplo muy simple, todo se hace en el método principal. Desglosando el Código

En las primeras dos líneas, se define la información de conexión para su conexión OneSpan Sign. Si está utilizando el entorno de producción, use la url, https://apps.e-signlive.com/api. Asegúrese de reemplazar el texto del marcador de posición con su API_KEY. Puede encontrar este valor en la página CUENTA cuando inicie sesión en su cuenta de OneSpan Sign.

1 cadena apiKey = "YOUR_API_KEY";

2 string url = "https://sandbox.esignlive.com/api";

La siguiente línea es la cadena JSON que define su paquete. Por lo general, probablemente construirá su cadena JSON dinámicamente frente a tener una cadena estática gigante, como esta, pero lo hice de esta manera para dar una buena representación de la estructura de JSON que necesitará para crear su paquete correctamente. He dejado muchas propiedades vacías en la cadena que no son necesarias para la creación, por lo que puede ver algunas de las otras opciones disponibles y cómo se pasan en el JSON. He formateado el JSON para legibilidad, a continuación.

string jsonString = "{
	\ "roles \": [
	{
		\ "bloqueado": falso,
		\"Mensaje de correo electrónico\":
		{
			\"contenido\":\"\"
		},
		\ "AttachmentRequirements \": [],
		\ "reasignar \": falso,
		\ "specialTypes \": [],
		\ "id \": \ "Remitente \",
		\ "datos \": nulo,
		\ "type \": \ "SIGNER \",
		\ "index \": 0,
		\ "firmantes \": [
		{
			\ "auth \":
			{
				\ "desafíos \": [],
				\ "esquema \": \ "NINGUNO \"
			},
			\ "empresa \": \ "Silanis \",
			\ "firstName \": \ "YOUR_FIRST_NAME \",
			\ "apellido \": \ "YOUR_LAST_NAME \",
			\"teléfono\":\"\",
			\ "email \": \ "your.email @example .com \ ",
			\ "knowledgeBasedAuthentication \": nulo,
			\ "idioma \": \ "en \",
			\"título\":\"\",
			\ "externo \": nulo,
			\ "professionalIdentityFields \": [],
			\ "userCustomFields \": [],
			\"entrega\":
			{
				\ "email \": verdadero,
				\ "proveedor \": falso,
				\ "descargar \": verdadero
			},
			\ "grupo \": nulo,
			\ "firma \": nulo,
			\ "dirección \": nulo,
			\ "datos \": nulo,
			\"nombre\":\"\",
			\ "specialTypes \": []
		}],
		\ "nombre \": \ "Remitente \"
	},
	{
		\ "bloqueado": falso,
		\"Mensaje de correo electrónico\":
		{
			\"contenido\":\"\"
		},
		\ "AttachmentRequirements \": [],
		\ "reasignar \": falso,
		\ "specialTypes \": [],
		\ "id \": \ "Firmante \",
		\ "datos \": nulo,
		\ "type \": \ "SIGNER \",
		\ "index \": 0,
		\ "firmantes \": [
		{
			\ "auth \":
			{
				\ "desafíos \": [],
				\ "esquema \": \ "NINGUNO \"
			},
			\"empresa\":\"\",
			\ "firstName \": \ "SIGNER_FIRST_NAME \",
			\ "apellido \": \ "SIGNER_LAST_NAME \",
			\"teléfono\":\"\",
			\ "email \": \ "signer.email @example .com \ ",
			\ "knowledgeBasedAuthentication \": nulo,
			\ "idioma \": \ "en \",
			\"título\":\"\",
			\ "externo \": nulo,
			\ "professionalIdentityFields \": [],
			\ "userCustomFields \": [],
			\"entrega\":
			{
				\ "correo electrónico \": falso,
				\ "proveedor \": falso,
				\ "descargar \": falso
			},
			\ "grupo \": nulo,
			\ "id \": \ "Firmante \",
			\ "firma \": nulo,
			\ "dirección \": nulo,
			\ "datos \": nulo,
			\"nombre\":\"\",
			\ "specialTypes \": []
		}],
		\ "nombre \": \ "Firmante \"
	}],
	\"documentos\":[
	{
		\ "aprobaciones \": [
		{
			\ "role \": \ "Signer \",
			\ "firmado \": nulo,
			\ "aceptado \": nulo,
			\ "datos \": nulo,
			\"campos\":[
			{
				\ "página \": 0,
				\ "subtipo \": \ "NOMBRE COMPLETO \",
				\ "ancho \": 200,
				\ "enlace \": nulo,
				\ "extract \": falso,
				\ "extractAnchor \": nulo,
				\ "izquierda \": 175,
				\ "top \": 165,
				\ "validación \": nulo,
				\ "altura \": 50,
				\ "datos \": nulo,
				\ "type \": \ "SIGNATURE \",
				\"valor\":\"\"
			}],
			\"nombre\":\"\"
		},
		{
			\ "role \": \ "Remitente \",
			\ "firmado \": nulo,
			\ "aceptado \": nulo,
			\ "datos \": nulo,
			\"campos\":[
			{
				\ "página \": 0,
				\ "subtipo \": \ "NOMBRE COMPLETO \",
				\ "ancho \": 200,
				\ "enlace \": nulo,
				\ "extract \": falso,
				\ "extractAnchor \": nulo,
				\ "izquierda \": 550,
				\ "top \": 165,
				\ "validación \": nulo,
				\ "altura \": 50,
				\ "datos \": nulo,
				\ "type \": \ "SIGNATURE \",
				\"valor\":\"\"
			}],
			\"nombre\":\"\"
		}],
		\ "name \": \ "YOUR_FILE_NAME \"
	}],
	\ "name \": \ "Test Package REST \",
	\ "type \": \ "PACKAGE \",
	\ "idioma \": \ "en \",
	\"Mensaje de correo electrónico\":\"\",
	\ "descripción \": \ "Nuevo paquete \",
	\ "autoComplete \": verdadero,
	\ "estado \": \ "ENVIADO \"
} ";

 

La primera parte de la cadena JSON del paquete es el objeto "roles". Dentro de esto, puede configurar elementos como "id", "empresa", "nombre", "apellido", "correo electrónico" y "nombre" para personalizar sus roles de firmante. Algunas de las otras configuraciones notables serían "mensaje de correo electrónico", "título" y "entrega".

La siguiente sección de la cadena JSON del paquete es el objeto "documentos". Dentro de esto, establecerá elementos como el "nombre" y las "aprobaciones" (bloques de firma). En las "aprobaciones", los elementos principales para establecer serían el "tipo", el "subtipo", el "rol", la "página" y la configuración de ubicación. Estos definirán las firmas requeridas en cada documento.

Finalmente, las últimas configuraciones de la cadena JSON del paquete que querrá anotar son "nombre", "tipo", "estado", "mensaje de correo electrónico" y "autocompletar". En este ejemplo, establecí el "estado" en "ENVIADO". Hacer esto enviará el paquete y notificará a los firmantes. Si desea guardar este paquete como borrador, haga el valor "DRAFT" en su lugar.

La siguiente línea del código tomará su cadena JSON y creará el objeto StringContent que pasará como carga en su comando API REST.

StringContent jsonContent = new StringContent (jsonString, Encoding.UTF8, "aplicación / json");

Las siguientes dos líneas se leerán en su archivo PDF y lo usarán para crear su objeto ByteArrayContent para su llamada REST. Asegúrese de cambiar el marcador de posición a la ruta de su archivo.

1 byte [] fileByteArray = File.ReadAllBytes ("PATH_TO_YOUR_PDF.pdf");

2 ByteArrayContent content = nuevo ByteArrayContent (fileByteArray);

Las siguientes líneas definen el encabezado de disposición de contenido del objeto de contenido del archivo pdf.

1 content.Headers.ContentDisposition = new ContentDispositionHeaderValue ("datos de formulario");
2 content.Headers.ContentDisposition.Name = "\" archivo \ "";
3 content.Headers.ContentDisposition.FileName = "\" NAME_OF_YOUR_FILE.pdf \ "";
4 content.Headers.ContentType = new MediaTypeHeaderValue ("aplicación / pdf");

El siguiente bloque de código es donde crea su formulario multiparte y agrega los objetos de contenido creados anteriormente para pasar con su llamada REST. Asegúrese de configurar el nombre del archivo.

1 MultipartFormDataContent form = new MultipartFormDataContent ();
2 form.Add (contenido, "\" archivo \ "", "\" NAME_OF_YOUR_FILE.pdf \ "");
3 form.Add (jsonContent, "\" payload \ "");

A continuación, creará el HttpClient que usará para realizar su solicitud POST y establecerá la autorización de encabezado adecuada y aceptará los valores.

1 HttpClient myClient = new HttpClient ();
2 myClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue ("Básico", apiKey);
3 myClient.DefaultRequestHeaders.Add ("Aceptar", "aplicación / json");

Finalmente, realizará la llamada POST, pasando su formulario a OneSpan Sign, creando su paquete de documentos. La línea de depuración mostrará el resultado en la consola de salida de depuración.

1 respuesta var = myClient.PostAsync (nueva Uri (url) + "/ packages /", form) .Result;
2 Debug.WriteLine (response.Content.ReadAsStringAsync (). Resultado);

Si todo con su llamada REST es correcto, debería recibir un identificador de paquete como respuesta, como este:

captura de pantalla de la consola de depuración

Si inicia sesión en su cuenta de OneSpan Sign, puede ver que el paquete se ha creado como se define en su solicitud:

captura de pantalla del paquete

Eso es. Ha creado con éxito un nuevo paquete, que incluye un archivo, firmantes y colocar cuadros de firma con la API REST.

¡Gracias por leer! Si tiene preguntas o características que le gustaría ver cubiertas desde la perspectiva de un nuevo usuario, no dude en publicar en la sección de comentarios. Los enlaces a todas las publicaciones de esta serie de blogs se pueden encontrar a continuación. Si quieres ver más publicaciones mías, mira mi página de autor.

- Michael Williams

Gorjeo El | Facebook El | LinkedIn