Skip to main content
Generas un patToken, se lo entregas al widget, y el usuario se va — o tu propio sistema cancela la orden un minuto después. El token permanece válido hasta el exp con el que lo firmaste, así que sin una forma de revocarlo el usuario podría volver más tarde y completar un pago que ya no quieres. terminateWidgetSession finaliza la sesión del lado del servidor. Al usuario se le niega el acceso la próxima vez que navegue dentro del widget, y cualquier intento de pago contra esa sesión es rechazado.
Requisitos previos: la API Key de tu aplicación para autenticación Basic, y ya sea el operator token que emitiste o su jti.

Autenticación

Esta mutación se autentica con las credenciales de tu aplicación, no con un access token de usuario — el mismo encabezado Basic que ya usas para generateUserAccessToken:
Envía la API Key del Developer Console tal cual; ya está codificada en base64 y decodifica al par app_id:apiSecret que verifica el servidor. Usa la key de la misma aplicación cuyo apiSecret firmó el operator token.
Staging y producción son aplicaciones separadas con credenciales separadas. Una key del entorno incorrecto devuelve 401 con el mismo mensaje que una mal formada — consulta If the token request returns 401 para la lista completa de verificación.
Solo puedes terminar sesiones que pertenezcan a la aplicación con la que te autenticas. Un jti emitido por una aplicación diferente no se ve afectado por tu llamada — obtendrás una respuesta exitosa con wasActive: false, y la sesión de esa aplicación seguirá en ejecución. La autenticación Basic no está disponible para aplicaciones con estado PERSONAL.

Identificar la sesión

Proporciona ya sea el operator token o su jti. Se requiere al menos uno.
Pasa el mismo patToken que entregaste al widget. Se verifica contra el secreto de tu aplicación, por lo que un token que no es tuyo se rechaza de inmediato.Un token ya expirado igualmente es aceptado — terminar una sesión expirada es inofensivo, y significa que no tienes que rastrear la expiración antes de llamar.El propio exp del token también limita cuánto tiempo se recuerda la terminación, por lo que esta es la mejor opción cuando aún lo tienes.
Proporcionar ambos está permitido siempre que describan la misma sesión. El token prevalece, y el jti se trata como una afirmación sobre este — un jti que no coincida con el propio del token se rechaza en lugar de ignorarse silenciosamente, por lo que una confusión no puede terminar la sesión equivocada.

Argumentos

  • input (TerminateWidgetSessionInput!): identifica la sesión a terminar.

Campos de TerminateWidgetSessionInput

Mutación de ejemplo

Ejemplo con cURL

Respuesta de ejemplo

Campos de la respuesta

wasActive: false es un éxito, no un fallo. Es la respuesta normal cuando el usuario nunca abrió el widget — que también es el momento más seguro para cancelar. Terminar una sesión que nunca se abrió está completamente soportado y es la forma recomendada de abortar un pago que ya entregaste.

Cuando se rechaza la terminación

La terminación es idempotente — terminar una sesión ya terminada tiene éxito. Se rechaza en exactamente dos casos, cada uno significando que la cuestión del dinero ya está resuelta: Otros errores que puedes ver:

Lo que ve el usuario

La terminación entra en vigor en la próxima navegación o actualización del usuario dentro del widget. No cierra una pantalla que ya está renderizada. Cuando vuelva a moverse, verá un mensaje de “Sesión finalizada” que nombra tu aplicación y le indica cerrar la ventana e iniciar de nuevo desde tu producto. Si llega hasta confirmar un pago, esa confirmación se rechaza con el mismo mensaje, y el pago se rechaza del lado del servidor con WidgetSessionTerminated (WIDGET-005, 410).
Terminar no detiene por sí mismo un pago que ya comenzó a ejecutarse — ese caso devuelve 409 en su lugar, y debes esperar el evento de finalización o de fallo en lugar de asumir que el dinero está detenido.

Cuánto tiempo se recuerda una terminación

Una sesión terminada se rechaza durante tanto tiempo como de otro modo podría haberse usado:
  • Terminada por token — hasta el propio exp del token, y nunca menos de una hora.
  • Terminada solo por jti — por 30 días. Nada limita por cuánto tiempo puedes firmar un operator token, así que sin un exp que leer la terminación se conserva muy por encima de cualquier vida útil plausible de la sesión.
Después de esa ventana, el registro se descarta. En la práctica, el operator token ya habrá expirado hace tiempo, por lo que la sesión no puede usarse de todos modos.

Próximos pasos

Configura tu servidor

Genera el patToken y el jti que toma esta mutación.

Integra el widget

Etiqueta de script, llamada de init, vinculación del botón.

Resumen de Widgets embebidos

Cómo encajan las sesiones del widget, grants de OAuth y tokens de transacción preaprobados.

Idempotencia

Por qué cada llamada que mueve dinero necesita un jti único.