3.1.5. Detección de recompras y URL de cumplimiento#
Los pedidos y contratos de Taler deben contener una fulfillment_url o un fulfillment_message, que son utilizados por el monedero 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 el monedero 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
Los monederos Whe aprenden el texto antes de que se realice la compra, por lo que 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. fulfillment_url#
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 monedero.
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 y URL de cumplimiento#
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 un monedero 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 el monedero que pagó anteriormente por el artículo (por ejemplo, escaneando el código QR en el escritorio con la aplicación Android), el monedero 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, el monedero 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 del monedero 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 este mecanismo funciona según lo previsto, los comerciantes deben asegurarse de no utilizar la misma URL de cumplimiento para diferentes productos o para productos físicos en los que se espera que los clientes compren el artículo repetidamente. Del mismo modo, es crucial que los comerciantes utilicen sistemáticamente la misma URL de cumplimiento para el mismo producto digital cuando se desee detectar recompras.
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).