Síncrono ou assíncrono: porque a confirmação de um pagamento ou de um SMS chega depois

Automação e n8n·· 2 visualizações· 4 min de leitura

A resposta curta: num pedido síncrono, o seu site pergunta e fica à espera até ter a resposta final, como quem lê o estado de uma encomenda. Num pedido assíncrono, a API responde logo «recebido, em processamento» e o resultado chega mais tarde, por outro caminho. Os pagamentos por telemóvel, por referência ou por transferência, e a entrega de um SMS, são assíncronos por natureza: dependem de uma pessoa confirmar no telemóvel, de um banco ou de uma rede móvel, e nenhum servidor deve ficar parado à espera disso. Para quem integra pagamentos, SMS ou outras APIs no seu site.

O que costuma ser síncrono e o que não é

Situação Tipo Porquê
Consultar uma encomenda, um cliente, um saldo Síncrono A resposta já existe do outro lado: é só lê-la.
Pagamento em que o cliente confirma no telemóvel (com PIN ou código) Assíncrono A API aceita o pedido, mas o resultado depende de o cliente aceitar, recusar ou deixar passar o tempo.
Pagamento por referência ou transferência Assíncrono O cliente paga quando paga, às vezes muito depois de sair do site.
Pagamento por cartão na página do operador Parece síncrono O cliente vê o resultado na hora, mas a confirmação em que se pode confiar é a notificação que o operador envia ao seu servidor. Veja URL de callback ou URL de retorno.
Envio de um SMS Assíncrono A API aceita a mensagem e devolve um identificador. Se foi entregue ou falhou só se sabe depois, pelo relatório de entrega que vem da rede.
Uma exportação, um relatório grande, uma conversão de vídeo Assíncrono Demora. A API devolve um identificador de tarefa e avisa (ou deixa consultar) quando acabar.

Como tratar uma resposta assíncrona

1 Reconheça a resposta. Um código 202 Accepted, ou um estado como «pending», «processing» ou «queued» no JSON, querem dizer «recebi, ainda não fiz». Não é um sucesso, nem é um erro.
2 Guarde o identificador que a API devolve (da transacção, da mensagem, da tarefa) junto da sua encomenda, antes de mostrar o que quer que seja ao cliente. Sem ele, quando a confirmação chegar não sabe a que encomenda pertence.
3 Marque como pendente, não como paga ou enviada. Na página de agradecimento diga a verdade: «Recebemos o seu pedido; assim que o pagamento for confirmado, enviamos um e-mail.»
4 Receba o resultado por um destes dois caminhos: a API chama um endereço seu quando tem o resultado (callback ou webhook), ou o seu sistema pergunta o estado com o identificador de vez em quando (consulta periódica). Veja webhook ou consulta periódica.
5 Mude o estado só com uma resposta final verificada: pago, recusado, expirado, entregue, falhado. Se o resultado vem por callback, confirme que veio mesmo do serviço: receber um webhook em PHP e verificar a assinatura.
6 Trate o que nunca chega. Uma tarefa agendada que procura os pedidos pendentes há demasiado tempo, pergunta o estado à API e decide (confirmar, cancelar, avisar) apanha as notificações que se perderam: correr um script PHP numa tarefa cron.
Não ponha o PHP à espera da confirmação dentro do pedido do visitante (um ciclo com sleep() que volta a perguntar à API). Cada visitante à espera ocupa um processo, o pedido esbarra no tempo máximo de execução e o cliente acaba a ver uma página de erro. Veja os limites do PHP e os entry processes.
A página que «se actualiza sozinha» faz-se com um pouco de JavaScript que pergunta de vez em quando ao seu servidor o estado da encomenda (nunca directamente à API, para não expor a chave). O seu servidor responde com o que já sabe, que é o que o callback ou a tarefa agendada lá deixaram.

Os pagamentos ficam pendentes no seu site e o operador diz que estão pagos? Abra um pedido com a hora de um pagamento e o endereço de callback que configurou, e vemos se o pedido do operador chegou à hospedagem.

Abrir pedido de suporte

VEJA TAMBÉM

Webhook ou consulta periódica: como um sistema fica a saber que algo mudou noutro

URL de callback ou URL de retorno: porque o cliente voltar ao site não prova o pagamento

Tempos de espera, repetições e idempotência: como não cobrar duas vezes ao cliente

Receber um webhook em PHP e verificar a assinatura

Correr um script PHP numa tarefa agendada (cron)

Como funcionam os pagamentos online: gateway, processador e conta de comerciante

PRODUTO RECOMENDADO

Alojamento de sites com cPanel

Domínio e SSL incluídos, cópias diárias e o painel que já conhece. desde 5.940,00 Kz/mês (plano de 3 anos, com cupão)

Ver planos
Esta resposta foi útil? A sua resposta ajuda-nos a melhorar este artigo.