História
Atualmente, estamos usando o chamado modelo de redirecionamento para nossos pagamentos on-line (onde você envia o pagador para um gateway de pagamento, onde ele insere seus detalhes de pagamento - o gateway o retornará a uma página de retorno de chamada com êxito / falha). Isso é fácil e direto, mas infelizmente é bastante inconveniente e às vezes confuso para nossos clientes (saindo do site, alterando os detalhes do cartão de crédito com um login adicional em outro site, etc.).
Intenção e descrição do problema
Agora, pretendemos mudar para uma abordagem integrada usando uma troca de solicitações e respostas XML. Meu problema é como lidar com todas (ou melhor, com a maioria) das coisas que podem acontecer durante o processamento - tendo em mente que normalmente a simplicidade é robusta e a complexidade é frágil.
Exemplos
- Abortar usuário: O usuário insere os detalhes do cartão de crédito e os hits são enviados. Uma mensagem XML para o gateway do provedor é enviada e aguardando resposta. O usuário pressiona "parar" em seu navegador ou fecha a janela.
- ignore_user_abort () no PHP pode ser uma opção - mas isso é confiável?
- seria melhor redirecionar o usuário para uma página "aguarde", que por sua vez abre uma solicitação AJAX ou outra para o processador real que não depende da conexão?
- O banco de dados desaparece
- parece complicado demais, mas, por exemplo, com um servidor da web nos Estados Unidos e um banco de dados no Reino Unido, isso aconteceu e acontecerá novamente: o usuário clica em seu pedido, a solicitação de pagamento foi enviada ao provedor, mas a resposta não pode ser armazenada no base de dados. Que abordagem eu poderia usar, usando o PHP para iniciar um SQL como "Transação" que somente no final é confirmado ou revertido, dependendo das etapas individuais? Então, caso nenhum commit ou retrocesso tenha acontecido, eu poderia "bloquear" o usuário para impedir que ele pague novamente ou contabilize pagamentos indevidamente - mas como?
- E o que mais eu preciso considerar tecnicamente? Nenhum dos exemplos de integração, por exemplo, Worldpay, Realex ou SagePay, oferece qualquer insight, e meu mecanismo de pesquisa ou meus termos de pesquisa não eram bons o suficiente para encontrar os pensamentos de outras pessoas sobre isso.
Muito obrigado por qualquer insight sobre como você abordaria isso!