3.1.5. Comprensión de las URLs de cumplimiento#
Los pedidos y contratos de Taler deben contener una fulfillment_url o un fulfillment_message, que son utilizados por la cartera después de que el contrato haya sido pagado. Este tutorial explica cómo establecer correctamente estos valores.
3.1.5.1. Mensaje de cumplimiento#
Este campo es simplemente un mensaje que será mostrado al usuario por la cartera Taler después de que el usuario haya completado la compra. Se puede establecer en cualquier tipo de texto UTF-8 y se supone que se utiliza como un mensaje final amistoso del comerciante al final de la transacción comercial.
Nota
Mientras que las carteras conocen el texto antes de que se realice la compra, los usuarios podrían obtener el mensaje de cumplimiento antes de la compra real. Como resultado, no debería contener ninguna credencial o información real que el usuario pudiera estar comprando con el contrato.
Los mensajes de cumplimiento se utilizan cuando el comerciante no tiene una URL de cumplimiento a la que redirigir al usuario.
3.1.5.2. URLs de cumplimiento#
Los contratos pueden contener una fulfillment_url en lugar de un fulfillment_message. La fulfillment_url debe hacer referencia a un sitio web (empezar por http:// o https://) y el usuario será redirigido allí inmediatamente después de completar la compra y posiblemente más tarde desde el diálogo de detalles de la compra en el historial de transacciones de su cartera.
Las URL de cumplimiento tienen un segundo propósito, y es que también se utilizan para la detección de recompra. Por lo tanto, hay que tener cuidado de utilizar correctamente las URL de cumplimiento. En las dos secciones siguientes explicamos los dos escenarios relevantes y su motivación.
3.1.5.3. Detección de recompras#
Un posible problema para los comerciantes que venden acceso a artículos digitales es que un cliente puede haber pagado por un artículo en un dispositivo, pero luego querer leerlo en otro distinto, posiblemente uno que ni siquiera tenga instalado una cartera Taler.
Naturalmente, en ese momento se le pedirá al cliente que vuelva a pagar por el artículo. Si el cliente abre entonces el enlace taler:// en la cartera que pagó anteriormente por el artículo (por ejemplo, escaneando el código QR en el escritorio con la aplicación Android), la cartera reclamará el contrato, detectará que la URL de cumplimiento es idéntica a una por la que ya ha realizado un pago en el pasado, e iniciará la redirección de recompra: En este caso, la cartera se pondrá en contacto con el comerciante y repetirá el pago anterior, salvo que esta vez utilizará el ID de sesión (actual) del navegador (aprende el ID de sesión del código QR).
El backend del comerciante actualiza entonces el ID de sesión del pedido existente al ID de sesión actual del navegador. Cuando se comprueba el estado de pago del «nuevo» pedido impagado (o ya en long-polling), el backend detecta que para el ID de sesión y la URL de cumplimiento del navegador hay un contrato pagado existente. Entonces le dice al navegador que redirija inmediatamente a la URL de cumplimiento donde está disponible el artículo ya pagado.
Por tanto, es crucial que los comerciantes utilicen siempre la misma URL de cumplimiento para el mismo producto digital cuando se desee detectar recompras.
Nota
El cambio del identificador de sesión a un dispositivo diferente requiere la participación de la cartera original que realizó el pago, lo que limita razonablemente la posibilidad de compartir ampliamente las compras digitales.
3.1.5.4. Permitir compras repetidas#
Para garantizar que la detección de recompras no impida a los clientes comprar el mismo servicio o producto físico por segunda vez, los comerciantes deben asegurarse de no utilizar la misma URL de cumplimiento para productos diferentes o para productos físicos en los que se espera que los clientes compren el artículo repetidamente.
Una forma práctica de crear una URL de cumplimiento única es incrustar el identificador de pedido en la URL de cumplimiento. Para poder utilizar el ID de pedido en una URL de cumplimiento aunque el comerciante no establezca el campo order_id al enviar un nuevo pedido (y, por tanto, el backend del comerciante elija el ID de pedido real), puede utilizar el texto de marcador de posición ${ORDER_ID} en la fulfillment_url al enviarla al backend del comerciante. El servidor del vendedor sustituirá inmediatamente ${ORDER_ID} en la URL por el ID de pedido real (antes de guardar las condiciones del contrato localmente).