Post: [PicPay com Delphi] Compreendendo o cenário para o PicPay

Alessandro Medeiros

Fala ai Radizeiro e Radizeira, tudo bem com vocês?

A utilização do PicPay do Delphi é fácil quando compreendemos como é feito o cenário do mesmo.

E você que hoje tem acompanhado nossa série de post aqui no blog sobre o PicPay deve já estar implementando em seu dia a dia.

E no post de hoje iremos falar sobre como é o cenário para a utilização do PicPay.

Seguindo o post anterior, e já de posse do status do PicPay, eu irei precisar avisar a minha aplicação Delphi.

E é aí que surgem os problemas quando não compreendemos esse cenário.

Como irei avisar o meu servidor da Amazon vai avisar a aplicação Delphi se o status foi pago ou não?

Recapitulando sobre o que já temos feito.

Eu solicito ao PicPay o QRCode, ele retorna para minha aplicação Delphi.

Se o cliente pagar ou não eu não sei a hora que isso irá acontecer.

Quando ocorrer o pagamento, o PicPay irá avisar ao servidor da Amazon, e não diretamente ao PDV do cliente.

Para isso iremos utilizar o Redis, se você ainda não conhece, e não sabe como trabalhar com o Redis, dentro do Clube dos Programadores Delphi, temos um módulo específico mostrando como utilizar.

Nós iremos criar uma fila no Redis, para que quando o servidor receber do PicPay uma notificação.

Onde ele irá verificar se foi pago, e após isso ele irá avisar ao PDV.

Então vamos a nossa aplicação client.

Vamos precisar dentro de nossa aplicação client a mesma coisa que foi feito na aplicação server.

Simplesmente iremos adicionar os eventos para as requisições.

type
TEventReturn = procedure (Channel, Message : String) of Object;
...
private
_redis : IRedisClient;
FClosing : Boolean;
FTask : iTask;
procedure RegistryAction(Channel : String; Metodo : TEventReturn);
...
procedure TForm2.RegistryAction(Channel : String; Metodo : TEventReturn);
begin
FTask := TTask.Run(
procedure
var
r: IRedisClient;
begin
r := NewRedisClient(‘52.36.56.222’, 6379);
r.SUBSCRIBE([Channel],
procedure(Channel : String; message : String)
begin
TThread.Synchronize(nil,
procedure
begin
Metodo(channel, message);
end);
end,
function : Boolean
begin
result := Assigned(Self) and (not FClosing);
end);
end);
end;

Se observarmos foi criado uma chamada do evento para as requisições para o Redis.

Criamos variáveis específicas para trabalharmos com o Redis.

E temos uma procedure para registrar as ações, onde ao conectar ao Redis estou passando o IP do meu servidor na Amazon, nesse caso você coloque o seu servidor.

O PicPay precisa enxergar o nosso servidor, ele não irá enxergar nossa máquina e sim o nosso servidor da Amazon.

Eu faço uma requisição para PicPay do client, por exemplo, um  ponto de venda da loja.

Imaginemos que a imagem acima é o PDV da loja.

Esse PDV tem acesso ao servidor da Amazon.

Caso seu PDV não possua acesso a internet, você pode criar um servidor que requisita, claro que este servidor tem acesso a internet, e ele irá fazer as requisições ao servidor da Amazon.

Com isso seu PDV terá acesso ao QRCode do PicPay.

Nesse caso o PDV irá solicitar o QRCode, só que o PDV da loja não tem um ip público.

Não é viável ter que colocar um ip público em cada PDV, desta forma nós possuímos um servidor na aws para fazer esse meio de campo.

O PDV só irá fazer a requisição ao PicPay para receber o QRCode, e a interação do PDV com o PicPay acaba aí.

Porque neste momento, o cliente irá fazer o pagamento pelo celular.

E é ai que entra o PicPay.

Ele que irá nos avisar se o cliente fez o pagamento ou não.

Onde essa notificação será feita através de um endpoint, que aquela operação foi paga.

Só que o PicPay não tem como enxergar o PDV.

E se torna inviável, você colocar um timer em seu PDV onde em a cada 1 minuto ele fica requisitando o PicPay.

E é aí que entra o call-back que está em nosso servidor PHP.

Para que quando o PicPay me notificar, aí sim irei fazer o que precisa ser feito.

Por isso que temos um servidor com o Horse, ou qualquer outro servidor, pois é ele que irá me avisar essa notificação.

E nosso servidor irá receber essa notificação, verificar o status, e aí sim, ele que irá notificar o PDV.

Essa notificação é realizada através de um pub/sub do Redis.

Com isso eu não preciso de tempo em tempo ficar perguntando ao servidor se houve ou não pagamento.

Simplesmente registro em uma fila no Redis e aí eu trato do jeito que eu quiser.

Desta forma melhoramos o tempo de resposta do nosso servidor com os nossos PDVs.

Viu como é simples quando compreendemos todo o cenário?

Esse é um dos vastos conteúdos que você encontra dentro do Clube dos programadores Delphi.

E caso você tenha interesse de conhecer mais sobre PicPay com Delphi acessa o nosso portal do CLUBE DE PROGRAMADORES EM DELPHI, onde você não terá só conteúdos relacionados ao PicPay, mas uma quantidade enorme de conteúdos que poderá lhe ajudar muito no seu dia a dia, é uma verdadeira NETFLIX para os programadores Delphi.

CLIQUE AQUI E SAIBA MAIS SOBRE O CLUBE DOS PROGRAMADORES DELPHI


Faça sua busca

CATEGORIAS

POSTS RECENTES

E caso você tem interesse de conhecer mais sobre [PicPay com Delphi] Compreendendo o cenário para o PicPay, acesse o nosso portal do CLUBE DE PROGRAMADORES EM DELPHI
Você não terá só conteúdos relacionados ao [PicPay com Delphi] Compreendendo o cenário para o PicPay, mas uma quantidade enorme de conteúdos que poderá lhe ajudar muito no seu dia a dia, é uma verdadeira NETFLIX para os programadores Delphi.
Gostou?
Compartilhe:

Embarque no foguete com milhares de devs para aprender desenvolvimento, evoluir de forma contínua e se manter relevante no mercado.

Dúvidas
Cadastre-se em nossa lista

Para ter acesso em primeira mão, a tudo que acontece na Academia do Código, basta se cadastrar em nossa lista

Grupo Thulio Bittencourt | Academia do Código

#FaçaPartedaHistória

Copyright © 2024 – Todos os direitos reservados