Para descargar la muestra de código completa, consulte nuestro sitio Code Share.

Puede utilizar Callback Event Notifications para recibir notificaciones sobre los eventos que se produzcan en su cuenta de OneSpan Sign. Las devoluciones de llamada resuelven el problema de tener que sondear la información al permitirte registrar una URL que se notifica cada vez que se produce un evento en su cuenta. Cuando se produce un evento (por ejemplo, cuando se completa una transacción), OneSpan Sign crea un objeto JSON que contiene información como el tipo de evento y los datos asociados a ese evento. A continuación, OneSpan Sign envía el objeto JSON a la URL de la configuración de notificaciones de devolución de llamada de su cuenta mediante una solicitud HTTP POST.

Puede encontrar una lista completa de todos los tipos de Callback Event en Configurar notificaciones de devolución de llamada.

Se recomienda encarecidamente utilizar una Escucha de devolución de llamada en lugar de sondear los estados de las transacciones. El uso de sondeos puede consumir recursos innecesarios tanto en su extremo como en el servicio de OneSpan Sign.

Registrar notificaciones de eventos

Si bien puede seguir las instrucciones detalladas en Configurar notificaciones de devolución de llamada, para este ejemplo utilizaremos la interfaz de usuario web de OneSpan Sign. Para obtener más información, consulte Notificaciones de eventos.

OneSpan Sign permite que los integradores sean notificados automáticamente de los eventos que afectan a su cuenta. En eventos seleccionados, el sistema emite mensajes automáticamente a un destino elegido por el integrador. Antes de que OneSpan Sign le notifique sobre un evento, debe registrarse para recibir dicha notificación.

Para configurar Notificaciones de eventos en su cuenta:

  1. Haga clic en Administrador > Notificación de eventos.
  2. Introduzca Callback URL. Este campo es obligatorio.
  3. Opcionalmente, ingrese una Callback Key segura.
  4. Active los tipos de eventos para los que desee recibir notificaciones. De forma predeterminada, las notificaciones de todos los tipos de eventos están desactivadas.
  5. Haga clic en Guardar.
  6. Si cambió de opinión y quiere desactivar todas las notificaciones de eventos, haga clic en DESHACER.

    Si quiere activar la Notificación de eventos mediante el flujo de tokens de actualización de OAuth, debe hacerlo mediante una API. Tenga en cuenta que actualmente solo admitimos este método en Salesforce.

Requisitos previos

Para completar estos procedimientos, necesitará lo siguiente:

  • Eclipse IDE for Java EE Developers: Puede descargarlo aquí.
  • SDK de Java de OneSpan Sign: Puede descargarlo en el portal de la Comunidad. También puede importarlos desde nuestro repositorio Maven utilizando los siguientes comandos:
    <dependency>
    	<groupId>com.silanis.esl</groupId>
    	<artifactId>sdk</artifactId>
    	<version>11.21</version>
    </dependency>
  • Ngrok: Para recibir notificaciones de eventos de devolución de llamada, necesitará una URL de acceso público habilitado y que funcione. Su servidor localhost por sí solo no funcionará. Ngrok es una herramienta muy sencilla y fácil de usar que crea un túnel seguro en su equipo local junto con una URL pública que puede usar para navegar por su sitio local. De este modo, se ahorra la molestia de implementar su aplicación web.
  • Ngrok solo debe usarse para fines de prueba y desarrollo. No debe utilizarse en un entorno de producción.

Procesar una notificación de eventos

En este ejemplo, se construirá un proyecto de servlet simple. También puede importar directamente el código fuente como un proyecto maven existente, o copiar y pegar todos los archivos y códigos necesarios en su proyecto de servlet existente.

El servlet es necesario para gestionar las solicitudes de devolución de llamada enviadas desde OneSpan Sign. El siguiente ejemplo de código crea un controlador de acción para procesar las notificaciones de eventos. En este ejemplo, se utiliza el método doPost() para interceptar las solicitudes HTTP POST.

El último paso sería devolver un HTTP status code 2xx a OneSpan Sign para indicar que ha recibido con éxito la devolución de llamada, antes de que la solicitud de devolución de llamada caduque en 20 segundos (lo que podría variar entre diferentes instancias). Tome en cuenta que, si su función de servicio tiene un flujo de trabajo complejo y consumirá la solicitud durante un período de tiempo significativo, es mejor utilizar un método asíncrono. Se evitará que se produzca un error de tiempo de espera.

public class CallbackController extends HttpServlet {
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		resp.setContentType("text/html");
		resp.setStatus(HttpServletResponse.SC_OK);
		StringBuilder builder = new StringBuilder();
		String aux = "";
		while ((aux = req.getReader().readLine()) != null) {
			builder.append(aux);
		}
		
		String text = builder.toString();
		System.out.println("callback content:" + text);
		String callbackAuthorization = req.getHeader("Authorization");
		System.out.println("callback authorization: " + callbackAuthorization);
		
		//check callback key, if applicable
		//============
		
		try {
			JSONObject json = new JSONObject(text);
			String eventName = json.getString("name");
			final String packageId = json.getString("packageId");
			System.out.println("package ID: "+packageId);
			
			if("PACKAGE_COMPLETE".equals(eventName)) {
				new Thread(new Runnable() {
					public void run() {
						try {
							new DownloadDocumentsService().download(packageId);
						} catch (IOException e) {
							e.printStackTrace();
						}
					}
				}).start();
			}
		} catch (JSONException e) {
			e.printStackTrace();
		}
	}
}

Realizar una solicitud POST

La clave de devolución de llamada registrada se pasa a través del encabezado de autorización como Basic {callbackKey}. De este modo, se garantiza que solo reciba notificaciones que contengan la clave secreta compartida. Una vez firmados todos los documentos de un paquete y completado el paquete, OneSpan Sign realizará una solicitud POST a la URL registrada. A continuación, se muestra un ejemplo de una carga útil JSON:

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

El sessionUser anterior se refiere al ID del firmante, por lo que se recomienda establecer el ID personalizado (en SDK) o el ID del firmante (en REST) cuando se crea el firmante y almacenarlo en su base de datos local. A continuación, se utilizará el ID del paquete para descargar los documentos firmados. Una clase de servicio gestionará esta lógica empresarial utilizando este código.

public class DownloadDocumentsService {
	public void download(String packageId) throws IOException{
		
		EslClient eslClient = new EslClient("API_KEY", "https://sandbox.esignlive.com/api");
		
		byte[] documents = eslClient.downloadZippedDocuments(new PackageId(packageId));
		
		FileOutputStream stream = new FileOutputStream("your_file_path\\documents_" + packageId + ".zip");
		
		try {
		    stream.write(documents);
		} finally {
		    stream.close();
		}
	}
}

Este código utiliza eslClient para descargar los documentos firmados.

Asignar su controlador de servlet a la ruta de devolución de llamada

Por último, deberá editar su archivo web.xml para asegurarse de que ha asignado el controlador de servlet a la ruta /callback. Este es el aspecto que debería tener su archivo web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>Callback Listener Demo</display-name>
   <servlet>
    <servlet-name>CallbackController</servlet-name>
    <servlet-class>com.ossDemo.CallbackController</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>CallbackController</servlet-name>
    <url-pattern>/callback</url-pattern>
  </servlet-mapping>
</web-app>

Ejecutar su código

Para ejecutar su código, utilice el siguiente procedimiento:

  1. En su Project Explore, haga clic con el botón derecho del mouse en el proyecto de servlet creado anteriormente y seleccione Ejecutar como > Ejecutar en el servidor.
  2. Haga clic en Finalizar.
  3. Abra un símbolo del sistema y cambie el directorio a la ubicación en la que guardó el ejecutable de ngrok . Ingrese el siguiente comando:
    ngrok http [port] -host-header="localhost:[port]"

    Esto es lo que puede ver después de ejecutar este comando:

    1-2

  4. Inicie sesión en su cuenta de OneSpan Sign y vaya a la página Administrador.
  5. En el campo URL de devolución de llamada, ingrese la URL de su escucha de devolución de llamada. Por ejemplo, https://4255b9d0.ngrok.io/CallbackListenerDemo/callback
  6. Escriba una clave de devolución de llamada y regístrese para el evento Transacción completada.
  7. Cree, envíe y complete una transacción de prueba. Debería poder ver los documentos firmados como un archivo comprimido en la ubicación en la que eligió guardarlo en la clase DownloadDocumentsService.java. Una vez que OneSpan Sign envíe una notificación de devolución de llamada a su oyente, verá algo similar a esto en su consola IDE:

    Captura

Para descargar la muestra de código completa, consulte nuestro sitio Code Share.

Puede utilizar Callback Event Notifications para recibir notificaciones sobre los eventos que se produzcan en su cuenta de OneSpan Sign. Las devoluciones de llamada resuelven el problema de tener que sondear la información al permitirte registrar una URL que se notifica cada vez que se produce un evento en su cuenta. Cuando se produce un evento (por ejemplo, cuando se completa una transacción), OneSpan Sign crea un objeto JSON que contiene información como el tipo de evento y los datos asociados a ese evento. A continuación, OneSpan Sign envía el objeto JSON a la URL de la configuración de notificaciones de devolución de llamada de su cuenta mediante una solicitud HTTP POST.

Puede encontrar una lista completa de todos los tipos de Callback Event en Configurar notificaciones de devolución de llamada.

Se recomienda encarecidamente utilizar una Escucha de devolución de llamada en lugar de sondear los estados de las transacciones. El uso de sondeos puede consumir recursos innecesarios tanto en su extremo como en el servicio de OneSpan Sign.

Registrar notificaciones de eventos

Si bien puede seguir las instrucciones detalladas en Configurar notificaciones de devolución de llamada, para este ejemplo utilizaremos la interfaz de usuario web de OneSpan Sign. Para obtener más información, consulte Notificaciones de eventos.

OneSpan Sign permite que los integradores sean notificados automáticamente de los eventos que afectan a su cuenta. En eventos seleccionados, el sistema emite mensajes automáticamente a un destino elegido por el integrador. Antes de que OneSpan Sign le notifique sobre un evento, debe registrarse para recibir dicha notificación.

Para configurar Notificaciones de eventos en su cuenta:

  1. Haga clic en Administrador > Notificación de eventos.
  2. Introduzca Callback URL. Este campo es obligatorio.
  3. Opcionalmente, ingrese una Callback Key segura.
  4. Active los tipos de eventos para los que desee recibir notificaciones. De forma predeterminada, las notificaciones de todos los tipos de eventos están desactivadas.
  5. Haga clic en Guardar.
  6. Si cambió de opinión y quiere desactivar todas las notificaciones de eventos, haga clic en DESHACER.

    Si quiere activar la Notificación de eventos mediante el flujo de tokens de actualización de OAuth, debe hacerlo mediante una API. Tenga en cuenta que actualmente solo admitimos este método en Salesforce.

Requisitos previos

Para completar estos procedimientos, necesitará lo siguiente:

  • Eclipse IDE for Java EE Developers: Puede descargarlo aquí.
  • SDK de Java de OneSpan Sign: Puede descargarlo en el portal de la Comunidad. También puede importarlos desde nuestro repositorio Maven utilizando los siguientes comandos:
    <dependency>
    	<groupId>com.silanis.esl</groupId>
    	<artifactId>sdk</artifactId>
    	<version>11.21</version>
    </dependency>
  • Ngrok: Para recibir notificaciones de eventos de devolución de llamada, necesitará una URL de acceso público habilitado y que funcione. Su servidor localhost por sí solo no funcionará. Ngrok es una herramienta muy sencilla y fácil de usar que crea un túnel seguro en su equipo local junto con una URL pública que puede usar para navegar por su sitio local. De este modo, se ahorra la molestia de implementar su aplicación web.
  • Ngrok solo debe usarse para fines de prueba y desarrollo. No debe utilizarse en un entorno de producción.

Procesar una notificación de eventos

En este ejemplo, se construirá un proyecto de Spring Boot utilizando métodos asíncronos de Spring. También puede importar directamente el código fuente como un proyecto maven existente, o copiar y pegar todos los archivos y códigos necesarios en su proyecto de servlet existente.

Para obtener más información, consulte los tutoriales oficiales en Construir un servicio web RESTful con Spring Boot y Crear métodos asíncronos.

Este proyecto es necesario para gestionar las solicitudes de devolución de llamada enviadas desde OneSpan Sign. El siguiente ejemplo de código crea un controlador de acción para procesar las notificaciones de eventos. En este ejemplo, se utiliza el método doPost() para interceptar las solicitudes HTTP POST.

El último paso sería devolver un HTTP status code 2xx a OneSpan Sign para indicar que ha recibido con éxito la devolución de llamada, antes de que la solicitud de devolución de llamada caduque en 20 segundos (lo que podría variar entre diferentes instancias). Tome en cuenta que, si su función de servicio tiene un flujo de trabajo complejo y consumirá la solicitud durante un período de tiempo significativo, es mejor utilizar un método asíncrono. Se evitará que se produzca un error de tiempo de espera.

@RestController
public class CallbackController {
	@Autowired
	private OssCallbackService ossCallbackService;
	@PostMapping("/callback")
	@ResponseStatus(HttpStatus.OK)
	public void callback(@RequestBody OssCallbackVo ossCallbackVo, @RequestHeader("Authorization") String callbackKey) {
		System.out.println("receive a callback notification!");
		// 1. check callback key
		if (callbackKey != null) {
			System.out.println("callback key: " + callbackKey);
			if (!ossCallbackService.validateCallbackKey(callbackKey)) {
				throw new RuntimeException("Callback key is not valid: " + callbackKey);
			}
		}
		System.out.println("callback body: " + ossCallbackVo);
		// 2. handle callback asynchronously
		try {
			ossCallbackService.handleCallback(ossCallbackVo);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

Realizar una solicitud POST

La clave de devolución de llamada registrada se pasa a través del encabezado de autorización como Basic {callbackKey}. De este modo, se garantiza que solo reciba notificaciones que contengan la clave secreta compartida. Una vez firmados todos los documentos de un paquete y completado el paquete, OneSpan Sign realizará una solicitud POST a la URL registrada. A continuación, se muestra un ejemplo de una carga útil JSON:

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

El sessionUser anterior se refiere al ID del firmante, por lo que se recomienda establecer el ID personalizado (en SDK) o el ID del firmante (en REST) cuando se crea el firmante y almacenarlo en su base de datos local. A continuación, se utilizará el ID del paquete para descargar los documentos firmados. Una clase de servicio gestionará esta lógica empresarial utilizando este código.

@Service
public class OssCallbackService {
	@Autowired
	private OssConfiguration ossConfiguration;
	public boolean validateCallbackKey(String callbackKey) {
		if (callbackKey != null) {
			String base64Credentials = callbackKey.substring("Basic".length()).trim();
			return ossConfiguration.CALLBACK_KEY.equals(base64Credentials);
		} else {
			return false;
		}
	}
	@Async("asyncExecutor")
	public void handleCallback(OssCallbackVo ossCallbackVo) {
		switch (OssCallbackEvents.valueOf(ossCallbackVo.getName())) {
		case DOCUMENT_SIGNED:
			break;
		case EMAIL_BOUNCE:
			break;
		case KBA_FAILURE:
			break;
		case PACKAGE_ACTIVATE:
			break;
		case PACKAGE_ARCHIVE:
			break;
		case PACKAGE_ATTACHMENT:
			break;
		case PACKAGE_COMPLETE:
			process_PACKAGE_COMPLETE(ossCallbackVo);
			break;
		case PACKAGE_CREATE:
			break;
		case PACKAGE_DEACTIVATE:
			break;
		case PACKAGE_DECLINE:
			break;
		case PACKAGE_DELETE:
			break;
		case PACKAGE_EXPIRE:
			break;
		case PACKAGE_OPT_OUT:
			break;
		case PACKAGE_READY_FOR_COMPLETION:
			break;
		case PACKAGE_RESTORE:
			break;
		case PACKAGE_TRASH:
			break;
		case ROLE_REASSIGN:
			break;
		case SIGNER_COMPLETE:
			break;
		case SIGNER_LOCKED:
			break;
		case TEMPLATE_CREATE:
			break;
		default:
			break;
		}
	}
	private void process_PACKAGE_COMPLETE(OssCallbackVo ossCallbackVo) {
		EslClient eslClient = new EslClient(ossConfiguration.API_KEY, ossConfiguration.API_URL);
		String packageId = ossCallbackVo.getPackageId();
		byte[] documents = eslClient.downloadZippedDocuments(new PackageId(packageId));
		String filePath = ossConfiguration.FILE_SAVE_PATH + "\\documents_" + packageId + "_"
				+ new SimpleDateFormat("yyyy_MM_dd").format(new Date()) + ".zip";
		Files.saveTo(documents, filePath);
	}
	
	
	private void process_DOCUMENT_SIGNED(OssCallbackVo ossCallbackVo) {
	}
	private void process_SIGNER_COMPLETE(OssCallbackVo ossCallbackVo) {
	}
	private void process_PACKAGE_TRASH(OssCallbackVo ossCallbackVo) {
	}
	private void process_PACKAGE_READY_FOR_COMPLETION(OssCallbackVo ossCallbackVo) {
	}
}

Hemos dejado las funciones de stub manejando todos los eventos de devolución de llamada disponibles. En este ejemplo, el evento "PACKAGE_COMPLETE" estaba monitoreado y activó la función de servicio correspondiente. A continuación, se utilizó eslClient para descargar los documentos firmados.

Actualizar sus archivos de propiedades

Todas las configuraciones de OneSpan Sign relacionadas se almacenan en un archivo oss.properties. Antes de ejecutar su código, debe actualizar este archivo para incluir su propia información:

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

Ejecutar su código

Para ejecutar su código, utilice el siguiente procedimiento:

  1. Ejecute la función principal en su clase Application.java.
  2. Abra un símbolo del sistema y cambie la ubicación del directorio a la del ejecutable de ngrok.
  3. Ingrese el siguiente comando:
    ngrok http [port] -host-header="localhost:[port]"

    Esto es lo que podrá ver después de ejecutar el comando:

    1-2

  4. Inicie sesión en su cuenta de OneSpan Sign y vaya a la página Administrador.
  5. En el campo URL de devolución de llamada, ingrese la URL de su escucha de devolución de llamada. Por ejemplo, https://4255b9d0.ngrok.io/CallbackListenerDemo/callback
  6. Escriba una clave de devolución de llamada y regístrese para el evento Transacción completada.
  7. Cree, envíe y complete una transacción de prueba. Debería poder ver los documentos firmados como un archivo comprimido en la ubicación en la que eligió guardarlo en la clase DownloadDocumentsService.java. Una vez que OneSpan Sign envíe una notificación de devolución de llamada a su oyente, verá algo similar a esto en su consola IDE:

    Captura

Para descargar la muestra de código completa, consulte nuestro sitio Code Share.

Puede utilizar Callback Event Notifications para recibir notificaciones sobre los eventos que se produzcan en su cuenta de OneSpan Sign. Las devoluciones de llamada resuelven el problema de tener que sondear la información al permitirte registrar una URL que se notifica cada vez que se produce un evento en su cuenta. Cuando se produce un evento (por ejemplo, cuando se completa una transacción), OneSpan Sign crea un objeto JSON que contiene información como el tipo de evento y los datos asociados a ese evento. A continuación, OneSpan Sign envía el objeto JSON a la URL de la configuración de notificaciones de devolución de llamada de su cuenta mediante una solicitud HTTP POST.

Puede encontrar una lista completa de todos los tipos de Callback Event en Configurar notificaciones de devolución de llamada.

Se recomienda encarecidamente utilizar una Escucha de devolución de llamada en lugar de sondear los estados de las transacciones. El uso de sondeos puede consumir recursos innecesarios tanto en su extremo como en el servicio de OneSpan Sign.

Registrar notificaciones de eventos

Si bien puede seguir las instrucciones detalladas en Configurar notificaciones de devolución de llamada, para este ejemplo utilizaremos la interfaz de usuario web de OneSpan Sign. Para obtener más información, consulte Notificaciones de eventos.

OneSpan Sign permite que los integradores sean notificados automáticamente de los eventos que afectan a su cuenta. En eventos seleccionados, el sistema emite mensajes automáticamente a un destino elegido por el integrador. Antes de que OneSpan Sign le notifique sobre un evento, debe registrarse para recibir dicha notificación.

Para configurar Notificaciones de eventos en su cuenta:

  1. Haga clic en Administrador > Notificación de eventos.
  2. Introduzca Callback URL. Este campo es obligatorio.
  3. Opcionalmente, ingrese una Callback Key segura.
  4. Active los tipos de eventos para los que desee recibir notificaciones. De forma predeterminada, las notificaciones de todos los tipos de eventos están desactivadas.
  5. Haga clic en Guardar.
  6. Si cambió de opinión y quiere desactivar todas las notificaciones de eventos, haga clic en DESHACER.

    Si quiere activar la Notificación de eventos mediante el flujo de tokens de actualización de OAuth, debe hacerlo mediante una API. Tenga en cuenta que actualmente solo admitimos este método en Salesforce.

Requisitos previos

Para completar estos procedimientos, necesitará lo siguiente:

  • Visual Studio Community 2017: Microsoft Visual Studio Community 2017. Si aún no lo tiene, puede descargar la versión de la comunidad de forma gratuita desde aquí.
  • SDK de .NET de OneSpan Sign: Puede descargarlo en el portal de la Comunidad.
  • Ngrok: Para recibir notificaciones de eventos de devolución de llamada, necesitará una URL de acceso público habilitado y que funcione. Su servidor localhost por sí solo no funcionará. Ngrok es una herramienta muy sencilla y fácil de usar que crea un túnel seguro en su equipo local junto con una URL pública que puede usar para navegar por su sitio local. De este modo, se ahorra la molestia de implementar su aplicación web.
  • Ngrok solo debe usarse para fines de prueba y desarrollo. No debe utilizarse en un entorno de producción.

Procesar una notificación de eventos

En este ejemplo, deberá crear un nuevo proyecto de aplicación de API web de ASP.NET. Una vez creado el proyecto, agregue un nuevo controlador y llámelo CallbackController. Este proyecto es necesario para gestionar las solicitudes de devolución de llamada enviadas desde OneSpan Sign. El siguiente ejemplo de código crea un controlador de acción para procesar las notificaciones de eventos.

El último paso sería devolver un HTTP status code 2xx a OneSpan Sign para indicar que ha recibido con éxito la devolución de llamada, antes de que la solicitud de devolución de llamada caduque en 20 segundos (lo que podría variar entre diferentes instancias). Tome en cuenta que, si su función de servicio tiene un flujo de trabajo complejo y consumirá la solicitud durante un período de tiempo significativo, es mejor utilizar un método asíncrono. Se evitará que se produzca un error de tiempo de espera.

    public class CallbackController : ApiController
    {
        // POST api/
        public ActionResult Post(JObject jsonResult)
        {
            #region "check callback key if applicable"
            string callbackKey = Request.Headers.GetValues("Authorization").First();
            Debug.WriteLine("callback key: "+callbackKey);
            #endregion
            #region "Extract data from request"
            string name = jsonResult["name"].ToString();
            string sessionUser = jsonResult["sessionUser"].ToString();
            string packageId = jsonResult["packageId"].ToString();
            string message = jsonResult["message"].ToString();
            string documentId = jsonResult["documentId"].ToString();
            string createdDate = jsonResult["createdDate"].ToString();
            OssCallbackVo ossCallbackVo = new OssCallbackVo
            {
                Name = name,
                SessionUser = sessionUser,
                PackageId = packageId,
                Message = message,
                DocumentId = documentId,
                CreatedDate = createdDate
            };
            Debug.WriteLine("callback payload: " + jsonResult.ToString());
            #endregion
            #region "process callback"
            OssCallbackHandler callbackHandlder = new OssCallbackHandler();
            Task.Run(async () => await callbackHandlder.ProcessOssCallback(ossCallbackVo));
            #endregion
            return new HttpStatusCodeResult(200);
        }
    }

Realizar una solicitud POST

La clave de devolución de llamada registrada se pasa a través del encabezado de autorización como Basic {callbackKey}. De este modo, se garantiza que solo reciba notificaciones que contengan la clave secreta compartida. Una vez firmados todos los documentos de un paquete y completado el paquete, OneSpan Sign realizará una solicitud POST a la URL registrada. A continuación, se muestra un ejemplo de una carga útil JSON:

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

El sessionUser anterior se refiere al ID del firmante, por lo que se recomienda establecer el ID personalizado (en SDK) o el ID del firmante (en REST) cuando se crea el firmante y almacenarlo en su base de datos local. A continuación, se utilizará el ID del paquete para descargar los documentos firmados. Una clase de servicio gestionará esta lógica empresarial utilizando este código.

    public class OssCallbackHandler
    {
        #region Oss Callback Handler
        public Task ProcessOssCallback(OssCallbackVo ossCallbackVo)
        {
            switch (ossCallbackVo.Name)
            {
                case C.OssCallbackEvents.PACKAGE_CREATE:
                    break;
                case C.OssCallbackEvents.PACKAGE_ACTIVATE:
                    OssCallback_PACKAGE_ACTIVATE(ossCallbackVo);
                    break;
                case C.OssCallbackEvents.PACKAGE_DEACTIVATE:
                    break;
                case C.OssCallbackEvents.PACKAGE_READY_FOR_COMPLETION:
                    break;
                case C.OssCallbackEvents.PACKAGE_COMPLETE:
                    OssCallback_PACKAGE_COMPLETE(ossCallbackVo);
                    break;
                case C.OssCallbackEvents.PACKAGE_TRASH:
                    break;
                case C.OssCallbackEvents.PACKAGE_RESTORE:
                    break;
                case C.OssCallbackEvents.PACKAGE_DELETE:
                    break;
                case C.OssCallbackEvents.PACKAGE_DECLINE:
                    break;
                case C.OssCallbackEvents.PACKAGE_EXPIRE:
                    break;
                case C.OssCallbackEvents.PACKAGE_OPT_OUT:
                    break;
                case C.OssCallbackEvents.DOCUMENT_SIGNED:
                    break;
                case C.OssCallbackEvents.ROLE_REASSIGN:
                    break;
                case C.OssCallbackEvents.SIGNER_COMPLETE:
                    break;
                case C.OssCallbackEvents.KBA_FAILURE:
                    break;
                case C.OssCallbackEvents.EMAIL_BOUNCE:
                    break;
                case C.OssCallbackEvents.PACKAGE_ATTACHMENT:
                    break;
                case C.OssCallbackEvents.SIGNER_LOCKED:
                    break;
                case C.OssCallbackEvents.PACKAGE_ARCHIVE:
                    break;
                case C.OssCallbackEvents.TEMPLATE_CREATE:
                    break;
            }
            return Task.CompletedTask;
        }
        private void OssCallback_PACKAGE_ACTIVATE(OssCallbackVo ossCallbackVo)
        {
        }
        private void OssCallback_PACKAGE_COMPLETE(OssCallbackVo ossCallbackVo)
        {
            //change data in your DB
            //download document
            OssService service = new OssService();
            service.downloadDocument(ossCallbackVo.PackageId);
            
        }
        #endregion
    }

Hemos dejado las funciones de stub manejando todos los eventos de devolución de llamada disponibles. En este ejemplo, el evento "PACKAGE_COMPLETE" estaba monitoreado y activó la función de servicio correspondiente. A continuación, se utilizó eslClient para descargar los documentos firmados.

        public void downloadDocument(string packageId)
        {
            EslClient eslClient = new EslClient(C.OSS.API_KEY, C.OSS.API_URL);
            PackageId pkgId = new PackageId(packageId);
            byte[] content = eslClient.DownloadZippedDocuments(pkgId);
            string fileLocation = C.SIGNED_DOCUMENTS_STORAGE_PATH + "\\" + pkgId + "_" + DateTime.Now.ToString("yyyy_MM_dd") + ".zip";
            Debug.WriteLine("file save path: " + fileLocation);
            File.WriteAllBytes(@fileLocation, content);
            
        }

Actualizar sus archivos de propiedad

Todas las configuraciones de OneSpan Sign relacionadas se almacenan en un archivo Constants.cs. Antes de ejecutar su código, debe actualizar este archivo para incluir su propia información:

Ejecutar su código

Para ejecutar su código, utilice el siguiente procedimiento:

  1. En Visual Studio, ejecute su proyecto presionando Ejecutar.
  2. Abra un símbolo del sistema y cambie el directorio a la ubicación en la que guardó el ejecutable de ngrok. Ingrese el siguiente comando:
    ngrok http [port] -host-header="localhost:[port]"

    Esto es lo que podrá ver después de ejecutar el comando:

    1-2

  3. Inicie sesión en su cuenta de OneSpan Sign y vaya a la página Administrador.
  4. En el campo URL de devolución de llamada, ingrese la URL de su escucha de devolución de llamada. Por ejemplo, https://b404b60a.ngrok.io/api/Callback.
  5. Escriba una clave de devolución de llamada y regístrese para el evento Transacción completada.
  6. Cree, envíe y complete un paquete de prueba. Debería poder ver los documentos firmados como un archivo comprimido en la ubicación en la que eligió guardarlo en el archivo Constants.cs. Una vez que OneSpan Sign envíe una notificación de devolución de llamada a su oyente, verá algo similar a esto en su consola IDE:

    Captura

Para descargar la muestra de código completa, consulte nuestro sitio Code Share.

Puede utilizar Callback Event Notifications para recibir notificaciones sobre los eventos que se produzcan en su cuenta de OneSpan Sign. Las devoluciones de llamada resuelven el problema de tener que sondear la información al permitirte registrar una URL que se notifica cada vez que se produce un evento en su cuenta. Cuando se produce un evento (por ejemplo, cuando se completa una transacción), OneSpan Sign crea un objeto JSON que contiene información como el tipo de evento y los datos asociados a ese evento. A continuación, OneSpan Sign envía el objeto JSON a la URL de la configuración de notificaciones de devolución de llamada de su cuenta mediante una solicitud HTTP POST.

Puede encontrar una lista completa de todos los tipos de Callback Event en Configurar notificaciones de devolución de llamada.

Se recomienda encarecidamente utilizar una Escucha de devolución de llamada en lugar de sondear los estados de las transacciones. El uso de sondeos puede consumir recursos innecesarios tanto en su extremo como en el servicio de OneSpan Sign.

Registrar notificaciones de eventos

Si bien puede seguir las instrucciones detalladas en Configurar notificaciones de devolución de llamada, para este ejemplo utilizaremos la interfaz de usuario web de OneSpan Sign. Para obtener más información, consulte Notificaciones de eventos.

OneSpan Sign permite que los integradores sean notificados automáticamente de los eventos que afectan a su cuenta. En eventos seleccionados, el sistema emite mensajes automáticamente a un destino elegido por el integrador. Antes de que OneSpan Sign le notifique sobre un evento, debe registrarse para recibir dicha notificación.

Para configurar Notificaciones de eventos en su cuenta:

  1. Haga clic en Administrador > Notificación de eventos.
  2. Introduzca Callback URL. Este campo es obligatorio.
  3. Opcionalmente, ingrese una Callback Key segura.
  4. Active los tipos de eventos para los que desee recibir notificaciones. De forma predeterminada, las notificaciones de todos los tipos de eventos están desactivadas.
  5. Haga clic en Guardar.
  6. Si cambió de opinión y quiere desactivar todas las notificaciones de eventos, haga clic en DESHACER.

    Si quiere activar la Notificación de eventos mediante el flujo de tokens de actualización de OAuth, debe hacerlo mediante una API. Tenga en cuenta que actualmente solo admitimos este método en Salesforce.

Requisitos previos

Para completar estos procedimientos, necesitará lo siguiente:

  • SublimeText: Se necesita un editor de texto para este procedimiento. Para esta guía, se utiliza el editor de texto SublimeText . Si aún no lo tiene, puede descargarlo de forma gratuita desde aquí.
  • XAMPP: Necesitará crear un servidor host local. Le recomendamos que utilice XAMPP, que es un servidor web multiplataforma de código abierto gratuito con intérpretes de PHP y PERL. Es simple, ligero y le permite probar sus scripts localmente. Puede descargarlo de forma gratuita desde su sitio web oficial.
  • Ngrok: Para recibir notificaciones de eventos de devolución de llamada, necesitará una URL de acceso público habilitado y que funcione. Su servidor localhost por sí solo no funcionará. Ngrok es una herramienta muy sencilla y fácil de usar que crea un túnel seguro en su equipo local junto con una URL pública que puede usar para navegar por su sitio local. De este modo, se ahorra la molestia de implementar su aplicación web.
  • Ngrok solo debe usarse para fines de prueba y desarrollo. No debe utilizarse en un entorno de producción.

Procesar una notificación de eventos

Cree un nuevo archivo en SublimeText llamado callback.php. Copie y pegue el siguiente código en este archivo.

El último paso sería devolver un HTTP status code 2xx a OneSpan Sign para indicar que ha recibido con éxito la devolución de llamada, antes de que la solicitud de devolución de llamada caduque en 20 segundos (lo que podría variar entre diferentes instancias). Tome en cuenta que, si su función de servicio tiene un flujo de trabajo complejo y consumirá la solicitud durante un período de tiempo significativo, es mejor utilizar un método asíncrono. Se evitará que se produzca un error de tiempo de espera.

<?php
$headerArray = apache_request_headers();
if (array_key_exists('Authorization', $headerArray)) {
	$callbackKey = $headerArray['Authorization'];
}
$data = file_get_contents('php://input');
$payload = json_decode($data, true);
$packageId = $payload['packageId'];
$eventNmae = $payload['name'];
// buffer all upcoming output
ob_start();
http_response_code(200);
// get the size of the output
$size = ob_get_length();
// send headers to tell the browser to close the connection
header("Content-Length: $size");
header('Connection: close');
// flush all output
ob_end_flush();
ob_flush();
flush();
if ($eventNmae == 'PACKAGE_COMPLETE') {
	$curl = curl_init();
	curl_setopt_array($curl, array(
		CURLOPT_URL => "https://sandbox.esignlive.com/api/packages/" . $packageId . "/documents/zip",
		CURLOPT_RETURNTRANSFER => true,
		CURLOPT_ENCODING => "",
		CURLOPT_MAXREDIRS => 10,
		CURLOPT_TIMEOUT => 30,
		CURLOPT_SSL_VERIFYHOST => false,
		CURLOPT_SSL_VERIFYPEER => false,
		CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
		CURLOPT_CUSTOMREQUEST => "GET",
		CURLOPT_HTTPHEADER => array(
			"authorization: Basic your_api_key",
		),
	));
	$response = curl_exec($curl);
	$err = curl_error($curl);
	curl_close($curl);
	if ($err) {
		echo "cURL Error #:" . $err;
	} else {
		file_put_contents("your_file_path/documents_" . $packageId . "_" . date("Y_m_d_H_i_s") . ".zip", $response);
	}
}
?>

En este ejemplo, hemos seguido el flujo de trabajo normal que maneja las notificaciones de devolución de llamada. Por ejemplo, analizamos la clave de devolución de llamada establecida en su portal web:

$headerArray = apache_request_headers();
if (array_key_exists('Authorization', $headerArray)) {
	$callbackKey = $headerArray['Authorization'];
}

Realizar una solicitud POST

La clave de devolución de llamada registrada se pasa a través del encabezado de autorización como Basic {callbackKey}. De este modo, se garantiza que solo reciba notificaciones que contengan la clave secreta compartida. Una vez firmados todos los documentos de un paquete y completado el paquete, OneSpan Sign realizará una solicitud POST a la URL registrada. A continuación, se muestra un ejemplo de una carga útil JSON:

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

El sessionUser anterior se refiere al ID del firmante, por lo que se recomienda establecer el ID personalizado (en SDK) o el ID del firmante (en REST) cuando se crea el firmante y almacenarlo en su base de datos local. A continuación, se utilizará el ID del paquete para descargar los documentos firmados. Una clase de servicio gestionará esta lógica empresarial utilizando este código.

Analizar el cuerpo de la solicitud

Para analizar el cuerpo de la solicitud, utilice los siguientes ejemplos de código.

La envoltura php://input es un flujo de solo lectura que le permite leer datos sin procesar del cuerpo de la solicitud. En el caso de las solicitudes POST , es preferible usar php://input en lugar de $HTTP_RAW_POST_DATA, ya que no depende de directivas php.ini especiales.

$data = file_get_contents('php://input');

A continuación, el JSON enviado desde OneSpan Sign se decodifica usando json_decode y luego se convierte en una matriz.

$payload = json_decode($data, true);
$packageId = $payload['packageId'];
$eventNmae = $payload['name'];

Antes de consumir la solicitud en función del tipo de evento de devolución de llamada, cierre la conexión y devuelva un estado 200 para evitar exceder el tiempo de espera.

// buffer all upcoming output
ob_start();
http_response_code(200);
// get the size of the output
$size = ob_get_length();
// send headers to tell the browser to close the connection
header("Content-Length: $size");
header('Connection: close');
// flush all output
ob_end_flush();
ob_flush();
flush();

A continuación, utilice la biblioteca cURL para enviar su solicitud HTTP a la API de OneSpan Sign y descargar los documentos firmados.

if ($eventNmae == 'PACKAGE_COMPLETE') {
	$curl = curl_init();
	curl_setopt_array($curl, array(
		CURLOPT_URL => "https://sandbox.esignlive.com/api/packages/" . $packageId . "/documents/zip",
		CURLOPT_RETURNTRANSFER => true,
		CURLOPT_ENCODING => "",
		CURLOPT_MAXREDIRS => 10,
		CURLOPT_TIMEOUT => 30,
		CURLOPT_SSL_VERIFYHOST => false,
		CURLOPT_SSL_VERIFYPEER => false,
		CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
		CURLOPT_CUSTOMREQUEST => "GET",
		CURLOPT_HTTPHEADER => array(
			"authorization: Basic your_api_key",
		),
	));
	$response = curl_exec($curl);
	$err = curl_error($curl);
	curl_close($curl);
	if ($err) {
		echo "cURL Error #:" . $err;
	} else {
		file_put_contents("your_file_path/documents_" . $packageId . "_" . date("Y_m_d_H_i_s") . ".zip", $response);
	}
}

Ejecutar su código

Para ejecutar su código, utilice el siguiente procedimiento:

  1. Usando XAMPP, ejecute su servidor local.
  2. Abra un símbolo del sistema y cambie el directorio a la ubicación en la que guardó el ejecutable de ngrok . Ingrese el siguiente comando:

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

    Esto es lo que puede ver después de ejecutar este comando:
    1-2

  3. Inicie sesión en su cuenta de OneSpan Sign y vaya a la página Administrador.
  4. En el campo URL de devolución de llamada, ingrese la URL de su escucha de devolución de llamada. Por ejemplo, https://4255b9d0.ngrok.io/CallbackListenerDemo/callback
  5. Escriba una clave de devolución de llamada y regístrese para el evento Transacción completada.
  6. Cree, envíe y complete una transacción de prueba. Debería poder ver los documentos firmados como un archivo comprimido en la ubicación en la que eligió guardarlo en la clase DownloadDocumentsService.java. Una vez que OneSpan Sign envíe una notificación de devolución de llamada a su oyente, verá algo similar a esto en su consola IDE:

    Captura

Para descargar la muestra de código completa, consulte nuestro sitio Code Share.

Puede utilizar Callback Event Notifications para recibir notificaciones sobre los eventos que se produzcan en su cuenta de OneSpan Sign. Las devoluciones de llamada resuelven el problema de tener que sondear la información al permitirte registrar una URL que se notifica cada vez que se produce un evento en su cuenta. Cuando se produce un evento (por ejemplo, cuando se completa una transacción), OneSpan Sign crea un objeto JSON que contiene información como el tipo de evento y los datos asociados a ese evento. A continuación, OneSpan Sign envía el objeto JSON a la URL de la configuración de notificaciones de devolución de llamada de su cuenta mediante una solicitud HTTP POST.

Puede encontrar una lista completa de todos los tipos de Callback Event en Configurar notificaciones de devolución de llamada.

Se recomienda encarecidamente utilizar una Escucha de devolución de llamada en lugar de sondear los estados de las transacciones. El uso de sondeos puede consumir recursos innecesarios tanto en su extremo como en el servicio de OneSpan Sign.

Registrar notificaciones de eventos

Si bien puede seguir las instrucciones detalladas en Configurar notificaciones de devolución de llamada, para este ejemplo utilizaremos la interfaz de usuario web de OneSpan Sign. Para obtener más información, consulte Notificaciones de eventos.

OneSpan Sign permite que los integradores sean notificados automáticamente de los eventos que afectan a su cuenta. En eventos seleccionados, el sistema emite mensajes automáticamente a un destino elegido por el integrador. Antes de que OneSpan Sign le notifique sobre un evento, debe registrarse para recibir dicha notificación.

Para configurar Notificaciones de eventos en su cuenta:

  1. Haga clic en Administrador > Notificación de eventos.
  2. Introduzca Callback URL. Este campo es obligatorio.
  3. Opcionalmente, ingrese una Callback Key segura.
  4. Active los tipos de eventos para los que desee recibir notificaciones. De forma predeterminada, las notificaciones de todos los tipos de eventos están desactivadas.
  5. Haga clic en Guardar.
  6. Si cambió de opinión y quiere desactivar todas las notificaciones de eventos, haga clic en DESHACER.

    Si quiere activar la Notificación de eventos mediante el flujo de tokens de actualización de OAuth, debe hacerlo mediante una API. Tenga en cuenta que actualmente solo admitimos este método en Salesforce.

Requisitos previos

Para completar estos procedimientos, necesitará lo siguiente:

  • Node.js: Puede descargar el instalador en el siguiente vínculo. Node.js está disponible para Windows, Mac y Linux.
  • SublimeText: Se necesita un editor de texto para este procedimiento. Para esta guía, se utiliza el editor de texto SublimeText . Si aún no lo tiene, puede descargarlo de forma gratuita desde aquí.
  • Ngrok: Para recibir notificaciones de eventos de devolución de llamada, necesitará una URL de acceso público habilitado y que funcione. Su servidor localhost por sí solo no funcionará. Ngrok es una herramienta muy sencilla y fácil de usar que crea un túnel seguro en su equipo local junto con una URL pública que puede usar para navegar por su sitio local. De este modo, se ahorra la molestia de implementar su aplicación web.
  • Ngrok solo debe usarse para fines de prueba y desarrollo. No debe utilizarse en un entorno de producción.

Procesar una notificación de eventos

En este ejemplo, construirá un proyecto simple de Node.js. Puede copiar y pegar todos los archivos y códigos necesarios en su proyecto existente.

El último paso sería devolver un HTTP status code 2xx a OneSpan Sign para indicar que ha recibido con éxito la devolución de llamada, antes de que la solicitud de devolución de llamada caduque en 20 segundos (lo que podría variar entre diferentes instancias). Tome en cuenta que, si su función de servicio tiene un flujo de trabajo complejo y consumirá la solicitud durante un período de tiempo significativo, es mejor utilizar un método asíncrono. Se evitará que se produzca un error de tiempo de espera.

En el ejemplo de código que aparece a continuación, el punto de entrada es listener.js:

const express = require('express'); //node.js web application framework that provides a robust set of features to develop web applications
const bodyParser = require('body-parser'); //node.js middleware for handling JSON, Raw, Text and URL encoded form data.
const oss = require('./ossFunctions.js');
const app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
  extended: true,
}));
app.post('/event', (req, res) => {
  const callbakKey = req.get('Authorization');
  const payload = req.body;
  console.log('callback key: '+callbakKey);
  console.log('payload: '+ JSON.stringify(payload));
  if(payload.name == 'PACKAGE_COMPLETE'){
  	oss.downloadZippedDocument(payload);
  }
  res.send('OK');
});
const portToListenOn = 3800;
app.listen(portToListenOn, () => {
  console.log(`Listening for OneSpan Sign notifications on port ${portToListenOn}. Started ${new Date().toString()}`);
});

Analizar el cuerpo de la solicitud

Para los propósitos de este ejemplo, se utiliza un marco expreso. Express es un marco de aplicaciones web Node.js mínimo y flexible que proporciona un conjunto robusto de características para aplicaciones web y móviles. Opcionalmente, puede agregar el middleware body-parser para analizar los cuerpos de solicitud entrantes en el middleware antes de sus controladores, disponibles en la propiedad the req.body .

const express = require('express'); 
const bodyParser = require('body-parser');
const app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
  extended: true,
}));

Si no tiene instalado un marco exprés y un analizador de cuerpo, abra una ventana de símbolo del sistema y cambie al directorio en el que guardó el archivo listener.js. Luego, ingrese las siguientes dos líneas:

npm install [email protected] --save
npm install [email protected] --save

Realizar una solicitud POST

La clave de devolución de llamada registrada se pasa a través del encabezado de autorización como Basic {callbackKey}. De este modo, se garantiza que solo reciba notificaciones que contengan la clave secreta compartida. Una vez firmados todos los documentos de un paquete y completado el paquete, OneSpan Sign realizará una solicitud POST a la URL registrada. A continuación, se muestra un ejemplo de una carga útil JSON:

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

El sessionUser anterior se refiere al ID del firmante, por lo que se recomienda establecer el ID personalizado (en SDK) o el ID del firmante (en REST) cuando se crea el firmante y almacenarlo en su base de datos local. A continuación, se utilizará el ID del paquete para descargar los documentos firmados. Una clase de servicio gestionará esta lógica empresarial utilizando este código.

Las llamadas POST desde OneSpan Sign se dirigen a localhost:3800/event. El enrutamiento se refiere a la definición de los puntos de conexión de la aplicación (URI) y cómo responden a las solicitudes del cliente.

En este ejemplo, hemos seguido el flujo de trabajo normal que maneja las notificaciones de devolución de llamada. En primer lugar, analizamos la clave de devolución de llamada establecida en su portal web:

  const callbakKey = req.get('Authorization');
  console.log('callback key: '+callbakKey);

Recuperar el objeto JSON

Debido a que ya hemos utilizado middleware para el analizador del cuerpo, podemos obtener directamente el objeto JSON y, dependiendo del tipo de evento, podemos distribuirlo en diferentes funciones de servicio:

  const payload = req.body;
  console.log('payload: '+ JSON.stringify(payload));
  if(payload.name == 'PACKAGE_COMPLETE'){
  	oss.downloadZippedDocument(payload);
  }

Descargar el paquete

En el módulo oss , simplemente exponemos una función que descarga el paquete completado:

const request = require('request');
const fs = require('fs');
const http = require('http');
const API_URL = 'api_url';
const API_KEY = 'api_key';
const FILE_SAVE_PATH = 'file_save_path';
const ossFunctions = module.exports = 
{
  downloadZippedDocument: async function (payload) 
  {
  	const options = 
  	{ 
  		method: 'GET',
		url: API_URL+'/packages/' + payload.packageId + '/documents/zip',
		headers: 
		{ 	
		    accept: 'application/zip',
		    authorization: 'Basic ' + API_KEY}
	};
	const file_path = FILE_SAVE_PATH+'/package_' + payload.packageId + '_'+ Date.now()+'.zip';
	request(options)
	  .pipe(fs.createWriteStream(file_path))
	  .on('close', function () {
	    console.log('File written!');
	  });
  }
};

Iniciar el servidor y escuchar posibles conexiones

Para iniciar el servidor y escuchar en el puerto 3800 para conexiones, use el siguiente ejemplo de código:

const portToListenOn = 3800;
app.listen(portToListenOn, () => {
  console.log(`Listening for OneSpan Sign notifications on port ${portToListenOn}. Started ${new Date().toString()}`);
});

Ejecutar su código

  1. Abra un símbolo del sistema y cambie la ubicación del directorio en el que guardó el archivo listener.js.
  2. Ingrese el siguiente comando:
    node listener.js
  3. En un nuevo símbolo del sistema, cambie el directorio a la ubicación en la que guardó el ejecutable de ngrok.
  4. Ingrese el siguiente comando:
    ngrok http [port] -host-header="localhost:[port]"

    Esto es lo que podrá ver después de ejecutar el comando:

    1-2

  5. Inicie sesión en su cuenta de OneSpan Sign y vaya a la página Administrador.
  6. En el campo URL de devolución de llamada, ingrese la URL de su escucha de devolución de llamada. Por ejemplo, https://4255b9d0.ngrok.io/event.
  7. Escriba una clave de devolución de llamada y regístrese para el evento Transacción completada.
  8. Cree, envíe y complete un paquete de prueba. Debería poder ver el JSON enviado por OneSpan Sign impreso en la ventana del símbolo del sistema.

Para descargar la muestra de código completa, consulte nuestro sitio Code Share.

Puede utilizar Callback Event Notifications para recibir notificaciones sobre los eventos que se produzcan en su cuenta de OneSpan Sign. Las devoluciones de llamada resuelven el problema de tener que sondear la información al permitirte registrar una URL que se notifica cada vez que se produce un evento en su cuenta. Cuando se produce un evento (por ejemplo, cuando se completa una transacción), OneSpan Sign crea un objeto JSON que contiene información como el tipo de evento y los datos asociados a ese evento. A continuación, OneSpan Sign envía el objeto JSON a la URL de la configuración de notificaciones de devolución de llamada de su cuenta mediante una solicitud HTTP POST.

Puede encontrar una lista completa de todos los tipos de Callback Event en Configurar notificaciones de devolución de llamada.

Se recomienda encarecidamente utilizar una Escucha de devolución de llamada en lugar de sondear los estados de las transacciones. El uso de sondeos puede consumir recursos innecesarios tanto en su extremo como en el servicio de OneSpan Sign.

Registrar notificaciones de eventos

Si bien puede seguir las instrucciones detalladas en Configurar notificaciones de devolución de llamada, para este ejemplo utilizaremos la interfaz de usuario web de OneSpan Sign. Para obtener más información, consulte Notificaciones de eventos.

OneSpan Sign permite que los integradores sean notificados automáticamente de los eventos que afectan a su cuenta. En eventos seleccionados, el sistema emite mensajes automáticamente a un destino elegido por el integrador. Antes de que OneSpan Sign le notifique sobre un evento, debe registrarse para recibir dicha notificación.

Para configurar Notificaciones de eventos en su cuenta:

  1. Haga clic en Administrador > Notificación de eventos.
  2. Introduzca Callback URL. Este campo es obligatorio.
  3. Opcionalmente, ingrese una Callback Key segura.
  4. Active los tipos de eventos para los que desee recibir notificaciones. De forma predeterminada, las notificaciones de todos los tipos de eventos están desactivadas.
  5. Haga clic en Guardar.
  6. Si cambió de opinión y quiere desactivar todas las notificaciones de eventos, haga clic en DESHACER.

    Si quiere activar la Notificación de eventos mediante el flujo de tokens de actualización de OAuth, debe hacerlo mediante una API. Tenga en cuenta que actualmente solo admitimos este método en Salesforce.

Requisitos previos

Para completar estos procedimientos, necesitará lo siguiente:

  • Ruby (versión 2.3.3): Puede descargarlo de la página web oficial desde aquí.
  • Kit de herramientas de desarrollo: Se requiere necesario para utilizar el módulo JSON. Puede descargarlo desde aquí. En el vínculo, se incluye un tutorial acerca de cómo instalar el kit de herramientas de desarrollado.
  • Ngrok: Para recibir notificaciones de eventos de devolución de llamada, necesitará una URL de acceso público habilitado y que funcione. Su servidor localhost por sí solo no funcionará. Ngrok es una herramienta muy sencilla y fácil de usar que crea un túnel seguro en su equipo local junto con una URL pública que puede usar para navegar por su sitio local. De este modo, se ahorra la molestia de implementar su aplicación web.
  • Ngrok solo debe usarse para fines de prueba y desarrollo. No debe utilizarse en un entorno de producción.

Recuperar los módulos JSON y Sinatra

  1. Lo primero que querrá hacer es instalar los módulos json y sinatra . Abra el símbolo del sistema e ingrese la siguiente línea:
    gem install json
    gem install sinatra
  2. En un editor de texto, cree un nuevo nombre de archivo llamado listener.rb y guárdelo en la ubicación que elija.
  3. En ese archivo, copie y pegue el siguiente código:
    require 'sinatra'
    require 'json'
    post '/event' do
      request_payload = JSON.parse(request.body.read)
      puts request_payload
      status 200
    end

Las dos primeras líneas importan los módulos necesarios para este ejemplo.

require 'sinatra'
require 'json'

Definir la URL del punto de conexión

Debe definir una URL de punto de conexión para que OneSpan Sign se conecte. Por ejemplo, http://localhost:4567/event.

Existe un manejador de solicitudes POST llamado /event que servirá todas las solicitudes de OneSpan Sign.

post '/event' do
  request_payload = JSON.parse(request.body.read)
  puts request_payload
  status 200
end

En este ejemplo, la carga útil JSON se imprime en la consola.

Ejecutar su código

  1. Abra un símbolo del sistema y cambie el directorio actual a la ubicación en la que guardó el archivo listener.rb.
  2. Ingrese el siguiente comando:
    ruby listener.py
  3. En un nuevo símbolo del sistema, cambie el directorio actual a la ubicación en la que guardó el archivo ejecutable de ngrok e ingrese lo siguiente:
    ngrok http 4567 -host-header="localhost:4567"
  4. Inicie sesión en su cuenta de OneSpan Sign y vaya a la página Administrador.
  5. En el campo URL de devolución de llamada, ingrese la URL de su escucha de devolución de llamada. Por ejemplo: https://4255b9d0.ngrok.io/CallbackListenerDemo/callback
  6. Escriba una clave de devolución de llamada y regístrese para el evento Transacción completada.

  7. Cree, envíe y complete un paquete de prueba. Debería poder ver el JSON enviado por OneSpan Sign impreso en la ventana del símbolo del sistema. Una vez que OneSpan Sign envíe una notificación de devolución de llamada a su oyente, verá algo similar a esto en su consola IDE:

1

Para descargar la muestra de código completa, consulte nuestro sitio Code Share.

Puede utilizar Callback Event Notifications para recibir notificaciones sobre los eventos que se produzcan en su cuenta de OneSpan Sign. Las devoluciones de llamada resuelven el problema de tener que sondear la información al permitirte registrar una URL que se notifica cada vez que se produce un evento en su cuenta. Cuando se produce un evento (por ejemplo, cuando se completa una transacción), OneSpan Sign crea un objeto JSON que contiene información como el tipo de evento y los datos asociados a ese evento. A continuación, OneSpan Sign envía el objeto JSON a la URL de la configuración de notificaciones de devolución de llamada de su cuenta mediante una solicitud HTTP POST.

Puede encontrar una lista completa de todos los tipos de Callback Event en Configurar notificaciones de devolución de llamada.

Se recomienda encarecidamente utilizar una Escucha de devolución de llamada en lugar de sondear los estados de las transacciones. El uso de sondeos puede consumir recursos innecesarios tanto en su extremo como en el servicio de OneSpan Sign.

Registrar notificaciones de eventos

Si bien puede seguir las instrucciones detalladas en Configurar notificaciones de devolución de llamada, para este ejemplo utilizaremos la interfaz de usuario web de OneSpan Sign. Para obtener más información, consulte Notificaciones de eventos.

OneSpan Sign permite que los integradores sean notificados automáticamente de los eventos que afectan a su cuenta. En eventos seleccionados, el sistema emite mensajes automáticamente a un destino elegido por el integrador. Antes de que OneSpan Sign le notifique sobre un evento, debe registrarse para recibir dicha notificación.

Para configurar Notificaciones de eventos en su cuenta:

  1. Haga clic en Administrador > Notificación de eventos.
  2. Introduzca Callback URL. Este campo es obligatorio.
  3. Opcionalmente, ingrese una Callback Key segura.
  4. Active los tipos de eventos para los que desee recibir notificaciones. De forma predeterminada, las notificaciones de todos los tipos de eventos están desactivadas.
  5. Haga clic en Guardar.
  6. Si cambió de opinión y quiere desactivar todas las notificaciones de eventos, haga clic en DESHACER.

    Si quiere activar la Notificación de eventos mediante el flujo de tokens de actualización de OAuth, debe hacerlo mediante una API. Tenga en cuenta que actualmente solo admitimos este método en Salesforce.

Requisitos previos

Para completar estos procedimientos, necesitará lo siguiente:

  • Python (versión 2.2): Se puede descargar desde el sitio web oficial.
  • Ngrok: Para recibir notificaciones de eventos de devolución de llamada, necesitará una URL de acceso público habilitado y que funcione. Su servidor localhost por sí solo no funcionará. Ngrok es una herramienta muy sencilla y fácil de usar que crea un túnel seguro en su equipo local junto con una URL pública que puede usar para navegar por su sitio local. De este modo, se ahorra la molestia de implementar su aplicación web.
  • Ngrok solo debe usarse para fines de prueba y desarrollo. No debe utilizarse en un entorno de producción.

  • Web.py: Web.py es un framework para Python que le permite crear aplicaciones web.

Instalar web.py

Para instalar web.py, utilice el siguiente procedimiento:

  1. Abra un símbolo del sistema e ingrese lo siguiente:
    $ pip install web.py
  2. En un editor de texto, cree un nuevo archivo llamado listener.py y guárdelo en la ubicación que elija.
  3. Copie el siguiente código:
    import web
    urls = ('/.*', 'event')
    class event:
        def POST(self):
            data = web.data()
            print
            print 'OneSpan Sign Notification:'
            print data
            print
        return 'OK'
    if __name__ == '__main__':
        app = web.application(urls, globals())
        app.run()

    La primera línea (import web) importa el módulo web.py.

Definir la URL del punto de conexión

Debe definir una URL de punto de conexión para que OneSpan Sign se conecte.

  1. Defina una estructura de URL ingresando el siguiente código. Este comando dice que la URL (la página de destino principal - http://localhost:8080) debe ser manejada por la clase llamada event:
    urls = ('/.*', 'event')
  2. Escriba la clase event . La función POST de esta clase será llamada por web.py cada vez que OneSpan Sign realiza una solicitud POST (desencadenada por los eventos en los que se registró OneSpan Sign) a la URL de devolución de llamada definida por ngrok. En este ejemplo, la carga útil JSON se imprime en la consola.
    class event:
        def POST(self):
            data = web.data()
            print
            print 'OneSpan Sign Notification:'
            print data
            print
        return 'OK'
  3. Dígale a web.py que cree una aplicación con la URL que aparece arriba, buscando las clases en el espacio de nombres global de este archivo.
    if __name__ == '__main__':
        app = web.application(urls, globals())
        app.run()

Ejecutar su código

Para ejecutar su código, utilice el siguiente procedimiento:

  1. Abra un símbolo del sistema y cambie el directorio actual a la ubicación en la que guardó el archivo listener.py. T
  2. Ingrese el siguiente comando:
    python listener.py
  3. En un nuevo símbolo del sistema, cambie el directorio actual a la ubicación en la que guardó el archivo ejecutable de ngrok e ingrese lo siguiente:
    ngrok http 8080 -host-header="localhost:8080"
  4. En un nuevo símbolo del sistema, cambie el directorio actual a la ubicación en la que guardó el archivo ejecutable de ngrok e ingrese lo siguiente:
    ngrok http 4567 -host-header="localhost:4567"
  5. Inicie sesión en su cuenta de OneSpan Sign y vaya a la página Administrador.
  6. En el campo URL de devolución de llamada, ingrese la URL de su escucha de devolución de llamada. Por ejemplo: https://4255b9d0.ngrok.io/CallbackListenerDemo/callback
  7. Escriba una clave de devolución de llamada y regístrese para el evento Transacción completada.

  8. Cree, envíe y complete un paquete de prueba. Debería poder ver el JSON enviado por OneSpan Sign impreso en la ventana del símbolo del sistema. Una vez que OneSpan Sign envíe una notificación de devolución de llamada a su oyente, verá algo similar a esto en su consola IDE:

1

Para descargar la muestra de código completa, consulte nuestro sitio Code Share.

Puede utilizar Callback Event Notifications para recibir notificaciones sobre los eventos que se produzcan en su cuenta de OneSpan Sign. Las devoluciones de llamada resuelven el problema de tener que sondear la información al permitirte registrar una URL que se notifica cada vez que se produce un evento en su cuenta. Cuando se produce un evento (por ejemplo, cuando se completa una transacción), OneSpan Sign crea un objeto JSON que contiene información como el tipo de evento y los datos asociados a ese evento. A continuación, OneSpan Sign envía el objeto JSON a la URL de la configuración de notificaciones de devolución de llamada de su cuenta mediante una solicitud HTTP POST.

Puede encontrar una lista completa de todos los tipos de Callback Event en Configurar notificaciones de devolución de llamada.

Se recomienda encarecidamente utilizar una Escucha de devolución de llamada en lugar de sondear los estados de las transacciones. El uso de sondeos puede consumir recursos innecesarios tanto en su extremo como en el servicio de OneSpan Sign.

Registrar notificaciones de eventos

Si bien puede seguir las instrucciones detalladas en Configurar notificaciones de devolución de llamada, para este ejemplo utilizaremos la interfaz de usuario web de OneSpan Sign. Para obtener más información, consulte Notificaciones de eventos.

OneSpan Sign permite que los integradores sean notificados automáticamente de los eventos que afectan a su cuenta. En eventos seleccionados, el sistema emite mensajes automáticamente a un destino elegido por el integrador. Antes de que OneSpan Sign le notifique sobre un evento, debe registrarse para recibir dicha notificación.

Para configurar Notificaciones de eventos en su cuenta:

  1. Haga clic en Administrador > Notificación de eventos.
  2. Introduzca Callback URL. Este campo es obligatorio.
  3. Opcionalmente, ingrese una Callback Key segura.
  4. Active los tipos de eventos para los que desee recibir notificaciones. De forma predeterminada, las notificaciones de todos los tipos de eventos están desactivadas.
  5. Haga clic en Guardar.
  6. Si cambió de opinión y quiere desactivar todas las notificaciones de eventos, haga clic en DESHACER.

    Si quiere activar la Notificación de eventos mediante el flujo de tokens de actualización de OAuth, debe hacerlo mediante una API. Tenga en cuenta que actualmente solo admitimos este método en Salesforce.

Requisitos previos

Para completar estos procedimientos, necesitará lo siguiente:

  • Go: Se puede descargar desde el sitio web oficial.
  • Ngrok: Para recibir notificaciones de eventos de devolución de llamada, necesitará una URL de acceso público habilitado y que funcione. Su servidor localhost por sí solo no funcionará. Ngrok es una herramienta muy sencilla y fácil de usar que crea un túnel seguro en su equipo local junto con una URL pública que puede usar para navegar por su sitio local. De este modo, se ahorra la molestia de implementar su aplicación web.
  • Ngrok solo debe usarse para fines de prueba y desarrollo. No debe utilizarse en un entorno de producción.

Procesar una notificación de eventos

En este proceso, el último paso sería devolver un HTTP status code 2xx a OneSpan Sign para indicar que ha recibido con éxito la devolución de llamada, antes de que la solicitud de devolución de llamada caduque en 20 segundos (lo que podría variar entre diferentes instancias). Tome en cuenta que, si su función de servicio tiene un flujo de trabajo complejo y consumirá la solicitud durante un período de tiempo significativo, es mejor utilizar un método asíncrono. Se evitará que se produzca un error de tiempo de espera.

  1. En un editor de texto, cree un nuevo archivo llamado listener.go en la ubicación que elija.
  2. Copie y pegue el siguiente código en ese archivo.
    package main
    import (
    	"io"
    	"log"
    	"net/http"
    	"os"
    )
    func handleEventNotification(w http.ResponseWriter, r *http.Request) {
    	_, err := io.Copy(os.Stdout, r.Body)
    	if err != nil {
    		log.Println(err)
    		return
    	}
    }
    func main() {
        log.Println("Starting server...")
    	http.HandleFunc("/event", handleEventNotification)
    	log.Fatal(http.ListenAndServe(":8080", nil))
    }
    

En el código anterior:

  • En la función main(), las peticiones http al path /event son manejadas por la biblioteca http.HandleFunc usando la función handleEventNotification.
  • La línea http.ListenAndServe inicia un nuevo servidor web en localhost:8080. Es importante tomar en cuenta que http.ListenAndServe puede devolver un error envuelto alrededor de log.Fatal().
  • En este ejemplo, el contenido del JSON simplemente se copia a stdout utilizando el método io.Copy (es decir, imprimir la carga útil JSON en la consola del terminal).

Ejecutar su código

  1. Abra un símbolo del sistema y cambie el directorio actual a la ubicación en la que guardó el archivo listener.go.
  2. Ingrese los siguientes comandos:
    go build listener.go
    listener.exe
  3. En una nueva ventana del símbolo del sistema, cambie el directorio actual a la ubicación en la que guardó el archivo ejecutable de ngrok e ingrese la siguiente línea:
    ngrok http 8080
  4. Inicie sesión en su cuenta de OneSpan Sign y vaya a la página Administrador.
  5. En el campo URL de devolución de llamada, ingrese la URL de su escucha de devolución de llamada. Por ejemplo: https://4255b9d0.ngrok.io/CallbackListenerDemo/callback
  6. Escriba una clave de devolución de llamada y regístrese para el evento Transacción completada.

  7. Cree, envíe y complete un paquete de prueba. Debería poder ver el JSON enviado por OneSpan Sign impreso en la ventana del símbolo del sistema. Una vez que OneSpan Sign envíe una notificación de devolución de llamada a su oyente, verá algo similar a esto en su consola IDE:

1