php - 多网关的通用数据库设计

标签 php mysql payment-gateway omnipay

我正在开发一个需要支持多个支付网关的网站(带有支付功能)。我打算使用 omnipay 包(感谢上帝,有一个包可以处理这个)但现在我想知道在数据库中存储所有支付信息而不将其绑定(bind)到特定网关的最佳方法是什么。

我的第一个想法是拥有以下表格:

  • 网关(gateway_id、gateway_name、...)
  • 付款(payment_id, payment_amount,...)
  • 交易(transaction_id, gateway_id, payment_id, transaction_reference, transaction_type transaction_status, transaction_request_data, transaction_response_data...)。 类型可以是“授权”、“购买”、“退款”、“作废”等,状态可以是“成功”、“失败”、“待定”等。

通过这种方式,我可以获得一个网关列表(Paypal、Stripe、TargetPay、WorldPay),并且每次付款都可以有多个交易(一次付款尝试可能会在第一次失败,然后再次尝试并成功但随后作废或退款),但一笔交易属于一笔付款。每笔交易都使用特定的网关执行,这也将被存储。

我不知道这是否是最好的方法(也许它太简单了?),我想听听其他一些想法。

谢谢!

最佳答案

您的初始结构是一个好的开始。我要包括的其他内容是:

  • responses,它将保存从网关发回的响应消息,以响应您的购买电话
  • 回调。越来越多的网关在通知 url 上向调用者提供 POST 消息。这些指示来自网关的状态消息的变化,例如取消的交易或拒付
  • 退款和无效,我会存储在一个表中。
  • 对回调、退款和无效的响应,如果结构正确,您可以将其存储在与常规响应相同的表中

您可能必须将某些数据存储为 JSON blob,因为来自每个网关的消息结构会有所不同。您可能想要加密的一些数据,例如,如果它包含可以识别客户或信用卡的数据

关于php - 多网关的通用数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35129979/

相关文章:

php - wordpress 中的 Razorpay 插件不起作用

javascript - onclick 获取数据并插入到文本区域

mysql - MySQL 中的 IF 语句输出

php - 如何在PHP中基于另一个表更新mysql表

asp.net - dot net mvc5 Controller 中的异步函数造成死锁

javascript - 如何在网页中将数字转换为印度卢比格式,例如 10,000.00

mysql - 为 MySQL 中的用户授予权限

payment-gateway - Paypal CreateRecurringPaymentsProfile 自动为第一个月计费

node.js - Stripe : Whats the different between Source vs. 卡 vs. 银行 vs 付款方式?

javascript - 无法使用ajax发送元素ID数据