OneSpan Sign Developer: Notificación de eventos de devolución de llamada - Parte 3

Duo Liang, 24 de Abril de 2019

En las dos primeras partes de esta serie de blogs, revisamos los beneficios del uso de notificaciones de eventos, así como el flujo de trabajo recomendado para las transacciones de sondeo y la información relacionada con el firmante en Parte 1 . A partir de ahí, revisamos los detalles técnicos relacionados con el oyente de devolución de llamada en Parte 2 .

Para la tercera parte de esta serie de blogs, utilizaremos un proyecto simple de arranque de primavera para mostrar cómo configurar un oyente de devolución de llamada en acción. En combinación con la Parte 2, verá cómo seguimos estos flujos para facilitar su integración de escucha de eventos.

Notificación de evento de devolución de llamada en acción

Antes de comenzar el proyecto de arranque de primavera, asegúrese de completar lo siguiente:

Registrarse para notificaciones de eventos

Antes de que el sistema OneSpan Sign pueda notificarle un evento, debe activar las notificaciones. Siga esta guía de funciones para aprender cómo registrarse.

En nuestro ejemplo, simplemente nos registraremos desde el portal web.

Descargar el SDK de Java de OneSpan Sign

También necesitarás SDK Java de OneSpan Sign . Descargue y descomprima el SDK en la ubicación que elija.

O bien, puede importar OneSpan Sign Java SDK desde el Repositorio de Maven de la siguiente manera:

 com.silanis.esl  sdk  11.21 

Instalar JDK e IDE

Descargar Ngrok

Conocimientos básicos de Spring Boot y Maven

En esta guía, crearemos un proyecto de arranque de primavera utilizando métodos asincrónicos de primavera. El código fuente completo se puede encontrar aquí .

Siéntase libre de importar directamente el código fuente como un proyecto Maven existente o copiar y pegar todos los archivos / códigos necesarios en su proyecto existente.

Asegúrese de consultar también los tutoriales oficiales sobre Creación de un servicio web RESTful con Spring Boot y Crear métodos asincrónicos .

El código

Necesitaremos un controlador para manejar las solicitudes de devolución de llamada enviadas desde OneSpan Sign. A continuación se muestra el código para que CallbackController procese la notificación del evento.

@RestController
CallbackController de clase pública {

	@Autowired
	OssCallbackService privado ossCallbackService;

	@PostMapping("/llamar de vuelta")
	@ResponseStatus(HttpStatus.OK)
	devolución de llamada nula pública ( @RequestBody OssCallbackVo ossCallbackVo, @RequestHeader ("Autorización") String callbackKey) {
		System.out.println ("recibe una notificación de devolución de llamada!");

		// 1. comprobar la clave de devolución de llamada
		if (callbackKey! = null) {
			System.out.println ("tecla de devolución de llamada:" + callbackKey);
			Si ( !ossCallbackService .validateCallbackKey (callbackKey)) {
				lanzar nueva RuntimeException ("La clave de devolución de llamada no es válida:" + callbackKey);
			}
		}
		System.out.println ("cuerpo de devolución de llamada:" + ossCallbackVo);

		// 2. manejar la devolución de llamada asincrónicamente
		tratar {
			ossCallbackService.handleCallback (ossCallbackVo);
		} catch (Excepción e) {
			e.printStackTrace ();
		}
	}
}

En el código anterior, cualquier solicitud POST que llegue a la ruta "/ callback" será manejada por nuestra aplicación.

Una vez que se hayan firmado todos los documentos de un paquete y se haya completado el paquete, OneSpan Sign realizará una solicitud POST a la URL registrada con el siguiente ejemplo de carga JSON: 

{
  " @class ":" com.silanis.esl.packages.event.ESLProcessEvent ",
  "nombre": "PACKAGE_COMPLETE",
  "sessionUser": "0787be84-f095-44c7-ba00-787093df86fc",
  "packageId": "KHiRfOXgKK0gpVWwwpFOSNy6o34 =",
  "mensaje": nulo,
  "documentId": nulo
}

Nota:

El "usuario de sesión" anterior se refiere al Id. De firmante, por lo que se recomienda establecer un Id. Personalizado (en SDK) o Id. De firmante (en REST) cuando se crea el firmante y almacenarlo en su base de datos local.

Luego, lo distribuiremos a diferentes funciones de servicio dependiendo del evento de devolución de llamada. Se utilizó una clase de servicio con método asincrónico para manejar esta lógica de negocios.

@Service
clase pública OssCallbackService {

	@Autowired
	OssConfiguration privada ossConfiguration;

	public boolean validateCallbackKey (String callbackKey) {
		if (callbackKey! = null) {
			Cadena base64Credentials = callbackKey.substring ("Basic" .length ()). Trim ();
			return ossConfiguration.CALLBACK_KEY.equals (base64Credentials);
		} más {
			falso retorno;
		}
	}

	@Async("asyncExecutor")
	public void handleCallback (OssCallbackVo ossCallbackVo) {
		switch (OssCallbackEvents.valueOf (ossCallbackVo.getName ())) {
		caso PACKAGE_COMPLETE:
			process_PACKAGE_COMPLETE (ossCallbackVo);
			rotura;
		caso PACKAGE_CREATE:

			rotura;
		caso PACKAGE_DEACTIVATE:

			rotura;
		......

		defecto:
			rotura;
		}

	}

	privado vacío process_PACKAGE_COMPLETE (OssCallbackVo ossCallbackVo) {
		EslClient eslClient = nuevo EslClient (ossConfiguration.API_KEY, ossConfiguration.API_URL);
		String packageId = ossCallbackVo.getPackageId ();
		byte [] documentos = eslClient.downloadZippedDocuments (nuevo PackageId (packageId));

		String filePath = ossConfiguration.FILE_SAVE_PATH + "\\ documents_" + packageId + "_"
				+ nuevo SimpleDateFormat ("aaaa_MM_dd"). format (nueva fecha ()) + ".zip";

		Files.saveTo (documentos, ruta de archivo);
	}
	
	privado vacío process_DOCUMENT_SIGNED (OssCallbackVo ossCallbackVo) {
	}
	privado vacío process_SIGNER_COMPLETE (OssCallbackVo ossCallbackVo) {
	}
	......
}

Hemos declarado todas las posibles funciones de código auxiliar que manejan eventos de devolución de llamada en nuestro código. En este ejemplo, el evento "PACKAGE_COMPLETE" se monitoreó y activó la función de servicio correspondiente. Luego se utilizó eslClient para descargar los documentos firmados.

Finalmente, todas las configuraciones relacionadas con OneSpan Sign se almacenan en el archivo oss.properties. Simplemente ajústese a su propia información antes de ejecutar el código:

OSS_API_KEY = {api_key}
OSS_API_URL = {api_url}
OSS_FILE_SAVE_PATH = {file_save_path}
OSS_CALLBACK_KEY = {callback_key}

Realizar una prueba

Ejecute la función principal en su clase Application.java. Luego, abra un símbolo del sistema y cambie el directorio a la ubicación donde guardó su ejecutable ngrok. Ingrese el siguiente comando:

ngrok http [puerto] -host-header = "localhost: [puerto]"

Luego, inicie sesión en su cuenta de OneSpan Sign, vaya a la página Administrador y modifique el dominio de su URL de devolución de llamada. 

Finalmente, cree, envíe y complete un paquete de prueba. Debería poder ver los documentos firmados como un archivo comprimido en el archivo oss.properties. En el momento en que OneSpan Sign envíe una notificación de devolución de llamada a su oyente, verá el mensaje a continuación en su consola IDE. Si puede verlos a ambos, significa que su escucha de devolución de llamada está funcionando correctamente.4-24-1

Si tiene alguna pregunta sobre este blog o cualquier otra cosa relacionada con la integración de OneSpan Sign en su aplicación, visite el Foros de la comunidad de desarrolladores . ¡Sus comentarios nos importan!

Comunidad de desarrolladores de OneSpan Sign

Comunidad de desarrolladores de OneSpan Sign

¡Únase a la comunidad de desarrolladores de OneSpan Sign! Foros, blogs, documentación, descargas de SDK y más.

Únete hoy