3.1.3. Criação de ordens#
Esta página contém toda a documentação do vídeo tutorial que explica a criação de uma encomenda simples através da API e a verificação do seu estado.
3.1.3.1. Vídeo#
3.1.3.2. Requisitos#
Necessário para esta série de tutoriais:
- Um backend de comerciante TalerSe precisar de ajuda para utilizar o backend do comerciante pela primeira vez, pode ver o Taler merchant introduction tutorial.
- Uma instância da carteira TalerAs instruções de configuração estão disponíveis em https://wallet.taler.net.
- Um software de gestão de API REST ou competências de programação relevantesNesta série de vídeos, vamos utilizar o software gratuito Insomnia, disponível para transferência em https://insomnia.rest.
3.1.3.3. Aviso de demonstração do backend#
Para este tutorial, pode utilizar o seu próprio serviço de backend de comerciante ou o serviço de demonstração online em https://backend.demo.taler.net/instances/sandbox/.
3.1.3.4. Mais notas sobre o processamento de pagamentos por comerciantes#
Criar uma ordem para um pagamento
Os pagamentos em Taler giram em torno de uma ordem, que é uma descrição legível por máquina da transação comercial para a qual o pagamento deve ser efectuado. Antes de aceitar um pagamento Taler como comerciante, é necessário criar uma tal ordem.
Isto é feito através do POST de um objeto JSON para o endpoint da API /private/orders do backend. Pelo menos os seguintes campos devem ser fornecidos dentro do campo order:
mont: O montante a ser pago, como uma cadeia de caracteres no formatoCURRENCY:DECIMAL_VALUE, por exemploEUR:10para 10 Euros ouKUDOS:1.5para 1.5 KUDOS.summary: Um resumo legível por humanos sobre o que é o pagamento. O resumo deve ser suficientemente curto para caber nos títulos, embora não seja imposto um limite rígido.fulfillment_url: Um URL que será exibido quando o pagamento for concluído. Para produtos digitais, deve ser uma página que mostre o produto que foi comprado. Num pagamento bem sucedido, a carteira anexa automaticamente oorder_idcomo parâmetro de consulta, bem como osession_sigpara pagamentos vinculados à sessão (discutido abaixo).
As encomendas podem ter muitos mais campos, ver O formato de encomenda do Taler. Quando se faz o POST de uma encomenda, também se pode especificar detalhes adicionais, tais como uma substituição da duração do reembolso e instruções para a gestão do inventário. Estes são raramente necessários e não são cobertos neste tutorial; por favor, veja o manual de referência para detalhes.
Um fragmento mínimo de Python para criar uma encomenda teria o seguinte aspeto:
>>> import requests
>>> body = dict(order=dict(amount="KUDOS:10",
... summary="Donation",
... fulfillment_url="https://example.com/thanks.html"),
... create_token=False)
>>> response = requests.post("https://backend.demo.taler.net/instances/sandbox/private/orders",
... json=body,
... headers={"Authorization": "Bearer secret-token:sandbox"})
<Response [200]>
O backend preenche alguns dados que faltam na encomenda, como o endereço da instância do vendedor. Os dados completos são designados por condições do contrato.
Nota
A solicitação acima desativa o uso de tokens de declaração definindo a opção create_token como false. Se você precisar de tokens de declaração, deverá ajustar o código para construir o URI taler://pay/ fornecido abaixo para incluir o token de declaração.
Depois de fazer um POST com sucesso para /private/orders, será retornado um JSON com apenas um campo order_id com uma string representando o ID do pedido. Se também receber um token de reivindicação, verifique novamente se utilizou o pedido conforme descrito acima.
Juntamente com a instância do comerciante, o ID da encomenda identifica de forma única a encomenda num backend do comerciante. Utilizando o ID da encomenda, pode construir trivialmente o respetivo URI taler://pay/ que deve ser fornecido à carteira. Deixe example.com ser o nome de domínio onde os endpoints públicos da instância são acessíveis. O URI de pagamento do Taler é então simplesmente taler://pay/example.com/$ORDER_ID/ onde $ORDER_ID deve ser substituído pelo ID da ordem que foi devolvida.
Pode colocar o URI taler:// como alvo de uma ligação para abrir a carteira Taler através do esquema taler://, ou colocá-lo num código QR. No entanto, para uma loja Web, a forma mais fácil é simplesmente redirecionar o browser para https://example.com/orders/$ORDER_ID. Essa página irá então ativar a carteira Taler. Aqui o backend gera a lógica correta para ativar a carteira, suportando os vários tipos de carteiras Taler existentes. Em vez de construir o URL acima manualmente, também é possível obtê-lo verificando o estado do pagamento, como descrito na próxima secção.
Ao construir manualmente este URL, certifique-se de que fornece o token de reivindicação (a menos que tenha sido desativado) e se o backend estiver a funcionar sem TLS para utilizar taler+http:// (note que este último só é suportado por carteiras a funcionar em modo de depuração).
Nota
Uma forma trivial de obter o payment_redirect_url correto é verificar o estado do pagamento (ver abaixo). Assim, se ainda não tiver a certeza de como o construir, pode simplesmente pedir ao backend que o faça por si. No entanto, em produção, provavelmente deve construí-lo manualmente e evitar o pedido extra ao backend.
Verificação do estado do pagamento e solicitação de pagamento
Dado o ID da encomenda, o estado de um pagamento pode ser verificado com o endpoint /private/orders/$ORDER_ID. Se o pagamento ainda não tiver sido concluído pelo cliente, /private/orders/$ORDER_ID fornecerá ao frontend um URL (com o nome payment_redirect_url) que accionará a carteira do cliente para executar o pagamento. Este é basicamente o URL https://example.com/orders/$ORDER_ID que discutimos acima.
>>> import requests
>>> r = requests.get("https://backend.demo.taler.net/instances/sandbox/private/orders/" + order_id,
... headers={"Authorization": "Bearer secret-token:sandbox"})
>>> print(r.json())
Se o campo status_da_encomenda na resposta for pago, não receberá um payment_redirect_url mas sim informações sobre o estado do pagamento, incluindo:
contract_terms: As condições contratuais completas da encomenda.refunded:truese foi concedido um reembolso (possivelmente parcial) para esta compra.refunded_amount: Montante que foi reembolsado
Depois de o frontend ter confirmado que o pagamento foi bem sucedido, é normalmente necessário acionar a lógica comercial para que o comerciante cumpra as suas obrigações ao abrigo do contrato.
Nota
Não é necessário continuar a consultar para notar alterações no estado da transação da encomenda. Os endpoints suportam polling longo, basta especificar um parâmetro de consulta timeout_ms com o tempo que pretende esperar no máximo para que o estado da encomenda mude para paid.
3.1.3.5. Mais tutoriais#
Para ver tutoriais adicionais, pode navegar neste site ou ir a https://docs.taler.net para obter a documentação mais recente sobre os serviços Taler.