3.1.5. Compreender os URLs de preenchimento#

As ordens e contratos do Taler devem conter um fulfillment_url ou um fulfillment_message, que são usados pela carteira após o contrato ter sido pago. Este tutorial explica como definir corretamente estes valores.

3.1.5.1. Mensagem de cumprimento#

Este campo é simplesmente uma mensagem que será mostrada ao utilizador pela carteira Taler depois de o utilizador ter concluído a compra. Pode ser definido para qualquer tipo de texto UTF-8 e é suposto ser utilizado como uma mensagem final amigável do comerciante no final da transação comercial.

Nota

As carteiras Whe aprendem o texto antes de a compra ser efectuada, pelo que os utilizadores podem obter a mensagem de cumprimento antes da compra efectiva. Consequentemente, não deve conter quaisquer credenciais ou informações reais que o utilizador possa estar a comprar com o contrato.

As mensagens de processamento de pedidos são utilizadas quando o comerciante não tem um URL de processamento de pedidos para onde redirecionar o utilizador.

3.1.5.2. URLs de preenchimento#

Os contratos podem conter um fulfillment_url em vez de uma fulfillment_message. O fulfillment_url deve referir-se a um sítio Web (começa com http:// ou https://) e o utilizador será redireccionado para esse sítio imediatamente após ter concluído a compra e, possivelmente, mais tarde, a partir da caixa de diálogo dos detalhes da compra no histórico de transacções da sua carteira.

Os URLs de processamento servem um segundo objetivo, que é o facto de também serem utilizados para deteção de recompra. Assim, há que ter o cuidado de utilizar corretamente os URL de preenchimento. Explicamos os dois cenários relevantes e a sua motivação nas duas secções seguintes.

3.1.5.3. Deteção de recompra#

Um possível problema para os comerciantes que vendem acesso a artigos digitais é que um cliente pode ter pago por um artigo num dispositivo, mas pode depois querer lê-lo num dispositivo diferente, possivelmente um que nem sequer tenha uma carteira Taler instalada.

Naturalmente, nesta altura, o cliente será solicitado a pagar novamente o artigo. Se o cliente abrir o link taler:// na carteira que pagou anteriormente pelo artigo (por exemplo, digitalizando o código QR no ambiente de trabalho com a aplicação Android), a carteira reivindicará o contrato, detectará que o URL de preenchimento é idêntico a um que já foi pago anteriormente e iniciará o redireccionamento de recompra: Aqui, a carteira contactará o comerciante e repetirá o pagamento anterior, só que desta vez utilizando o ID de sessão (atual) do browser (aprende o ID de sessão a partir do código QR).

O backend do comerciante actualiza então o ID da sessão da encomenda existente para o ID da sessão atual do navegador. Quando o estado do pagamento para a «nova» encomenda não paga é verificado (ou já está em sondagem longa), o backend detecta que para o ID da sessão do browser e o URL de execução existe um contrato pago. Em seguida, diz ao browser para redirecionar imediatamente para o URL de execução onde o artigo já pago está disponível.

Por conseguinte, é crucial que os comerciantes utilizem consistentemente o mesmo URL de processamento para o mesmo produto digital em que se pretende a deteção de recompra.

Nota

A alteração do ID da sessão para um dispositivo diferente exige o envolvimento da carteira original que efectuou o pagamento, limitando assim razoavelmente a possibilidade de partilhar amplamente as compras digitais.

3.1.5.4. Permitir compras repetidas#

Para garantir que a deteção de recompra não impede os clientes de comprarem o mesmo serviço ou bem físico uma segunda vez, os comerciantes devem certificar-se de que não utilizam o mesmo URL de processamento para produtos diferentes ou para produtos físicos em que se espera que os clientes comprem o artigo repetidamente.

Uma maneira conveniente de criar um URL de atendimento exclusivo é incorporar o ID do pedido no URL de atendimento. Para permitir o uso do ID do pedido em um URL de processamento de pedidos, mesmo que o campo order_id não seja definido pelo comerciante ao postar um novo pedido (e, portanto, o ID real do pedido será escolhido pelo backend do comerciante), é possível usar o texto de espaço reservado ${ORDER_ID} no fulfillment_url ao postá-lo no backend do comerciante. O backend do comerciante substituirá imediatamente ${ORDER_ID} no URL pelo ID real da encomenda (antes de persistir localmente as condições contratuais).