【问题标题】:Handle payment response if server crashes?如果服务器崩溃,处理付款响应?
【发布时间】:2018-12-21 13:06:51
【问题描述】:

当我发起一笔交易说 Citrus、Ccavenue 或 PayUmoney 或任何支付网关时会发生什么情况我需要为该特定客户端更新数据库中的几列? 应该怎么处理?我用Mysql做数据库,用Laravel。

【问题讨论】:

  • 到目前为止你尝试了什么?
  • 如果服务器无法接收响应,那么远程服务将意识到这一点并可能中止事务。这是假设付款是在服务器到服务器之间处理的。
  • 我没有尝试过这个问题,因为我需要失败或关闭我的服务器,我不想这样做。除此之外,我的付款进展顺利。
  • @apokryfos 那么支付网关会退款吗?
  • 逻辑上会,但你需要直接询问第三者。同样,如果付款是通过客户端重定向然后回调处理的,这将不起作用。

标签: mysql laravel payment-gateway ccavenue citrus-pay


【解决方案1】:

这可以通过一个单独的队列服务来处理,比如 Laravel Queue(https://laravel.com/docs/5.6/queues)

还要确保你有一个API来检查支付状态。大多数支付网关都提供API接口来检查支付状态。

付款周期如下

  1. 客户端 - 获取付款详情
  2. 客户端 - 从支付网关请求支付,同时向队列服务添加任务以检查支付状态并更新您的数据库。
  3. 队列服务 - 从网关请求支付状态并更新数据库
  4. 客户端 - 从数据库中选择付款状态

队列服务应该作为与客户端应用程序隔离的服务器进程运行。因此您的付款周期不会因任何中断/延迟(网络超时、服务器中断等...)而中断

【讨论】:

  • 我明白了,这是个好建议,但即使我运行队列,支付网关也会将响应发送到我的控制器,而不是队列?
  • 您最好不要依赖单个支付请求本身来获取结果作为响应(有状态)。如果您可以将支付网关配置为调用单独的控制器功能,那么您甚至可以完全省略队列。
  • 这就是问题所在,即使我制作单独的控制器功能,我的服务器也会因接收响应而死机。您建议的逻辑听起来不错,因为我将在 Redis 中运行我的队列,该队列将在另一台服务器上运行。问题还是一样,支付网关是否会将响应返回到多个端点,即调用函数和等待队列
  • Yes 和 No.Some 支付网关会这样做,即 citruspay 有一个名为“Return URL Response”(Drop Around 模式)的方法,您可以在其中声明返回 url 以获取结果。您可能还需要具有 revers_proxy 以获取对相同域地址但进入单独应用程序的响应(在本例中为队列服务)
  • @nuwam,这应该很有帮助。我需要查看文档以了解更多信息。
猜你喜欢
  • 2015-09-21
  • 1970-01-01
  • 1970-01-01
  • 2019-05-09
  • 1970-01-01
  • 2021-05-06
  • 1970-01-01
  • 2017-02-08
  • 1970-01-01
相关资源
最近更新 更多