Post: [PicPay com Delphi] Preparando o servidor Horse para requisições do PicPay

Alessandro Medeiros

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

Seguindo nossa série de PicPay com Delphi, onde no post anterior nós criamos um servidor horse.

Agora que já possuímos esse servidor, iremos no post de hoje preparar ele para receber as requisições do PicPay.

Na documentação do PicPay temos a informação que quando o pagamento acontecer ele irá notificar o callbackurl encaminhando a informação da resposta dos pagamentos.

Desta forma precisamos trabalhar o servidor para que possa receber essas requisições POST no endereço de callback.

Sendo assim nós iremos implementar a requisição POST no nosso servidor Horse.

Mas segue uma duvida de muito, como receber requisições de callback?

Primeiramente, o que você tem que ter em mente, é que você irá receber essas informações em JSON.

Com isso no código abaixo, você pode observar que importamos a biblioteca System.JSON do Delphi, e utilizamos o Middleware Jhonson do Horse para trabalhar com JSON.

Hordse.Jhonson,
System.JSON;
...
App := THorse.Create(9001);
App.Use(Jhonson);
App.Post(‘/picpaycallback’
procedure (Req : THorseRequest; Res : THorseResponse; Next : TProc)
var
lBody:TJsonObject;
LStatus : TJsonValue;
_Status, _ReferenceId : String;
RESTClient1: TRESTClient;
RESTRequest1: TRESTRequest;
RESTResponse1: TRESTResponse;
begin
lBody := Req.Body<TJsonObject>;
WriteLN(lBody.ToString);
RESTClient1 := TRESTClient.Create('');
RESTRequest1 := TRESTRequest.Create(nil);
RESTResponse1 := TRESTResponse.Create(nil);
try
RESTRequest1.Client := RESTClient1;
RESTRequest1.Response := RESTResponse1;
RESTClient1.BaseURL := 'http://thuliobittencourt.com/picpay/notification.php';
RESTRequest1.Method := rmPOST;
RESTRequest1.Params.AddHeader('Content-Type', 'application/json');
RESTRequest1.AddBody(LBody.ToString, ctAPPLICATION_JSON);
RESTRequest1.Execute;
LStatus := TJSONObject.ParseJSONValue(RESTResponse1.Content);
_Status := LStatus.GetValue&lt;String&gt;('status');
_ReferenceId := LStatus.GetValue<String>('referenceId');
WriteLn(_ReferenceId + ':' + _Status);
finally
RESTResponse1.Free;
RESTRequest1.Free;
RESTClient1.Free;
end;
Res.Status(200).Send('');
end);
App.Start;

Como o PicPay me retorna um JSON tratei essa resposta dentro do meu POST como você pode ver no código acima.

Observe que deparei as variáveis dos componentes Rest do Delphi.

Logo em seguida eu instancio eles e faço toda a configuração.

Se você observar a baseURL foi colocada o link do meu servidor, aqueles arquivos php que mostrei no inicio de nossa série.

Como o Delphi está com o problema de compactação, eu criei esse classe php que retorna para nós o referenceID e o Status.

Ele está hospedado em um servidor para que eu possa fazer as requisições nele, e pegar as notificações.

O picpay quando manda as notificações só retorna referenceID e o authorizationID, que são retornos do JSON.

Na notificação não sabemos se houve pagamento ou não, só informa que aconteceu alguma coisa para o pagamento que está sendo referenciado pelo referenceID.

Com esse código nós pegamos, e realizamos uma consulta para o endpoint status do picpay.

Com o status retornado pela PicPay você irá saber se houve pagamento ou não.

E esse processo é feito onde pegamos esse JSON retornado pelo PicPay e realizamos um POST nesse nosso servidor php.

Essa classe php nos retorna o refrenceId e o status, onde você terá se houve o pagamento ou não.

// função que verifica a requisição
$notification = $picpay->notificationPayment();
if($notification){
$status= $notification->status;
$authorizationId = $notification->authorizationId;
$referenceId = $notification->referenceId;
echo '{ "referenceId" : "' . $referenceId . '",
"status" : "' . $status . '" } '
/* -- Tratar dados -- */
 }
?>

Com o status confirmado após a execução, faço o parse do conteúdo retornado do servidor php, onde eu recupero o status e o referenceID e escrevo na tela do servidor horse.

Só para recapitular.

Criamos uma aplicação client que faz uma requisição, lembrando que ele faz ao php que criamos, que faz o meio de campo.

Nessa requisição eu pego o QRCode para poder trabalhar, onde eu informo a conta e o valor.

Quando o cliente realizar o pagamento ele irá acionar o endereço, que se observar é incluído dentro da nossa biblioteca php.

class PicPay{
/*
 *@var type String: $urlCallBack
*/
private $urlCallBack = "Coloque aqui o URL de CallBack";
/*

Onde o PicPay irá avisar nesse endereço que é posto nessa classe php, onde ele irá informar que aconteceu alguma coisa ao realizar o pagamento.

Para isso entra nosso servidor Horse, que irá receber esse post, o que acabamos de implementar.

E o PicPay não passa o que aconteceu somente o JSON, que houve uma ação.

E com esse retorno irei precisar fazer uma outra requisição para saber se foi pago ou não.

E com o status recebido eu repasso para a minha aplicação 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] Preparando o servidor Horse para requisições do PicPay, acesse o nosso portal do CLUBE DE PROGRAMADORES EM DELPHI
Você não terá só conteúdos relacionados ao [PicPay com Delphi] Preparando o servidor Horse para requisições do 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.

Sobre
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 © 2022 – Todos os direitos reservados