我正在开发一个网站(与支付),需要支持多个支付网关。我将使用omnipay包(感谢上帝有一个包来处理这个问题),但现在我想知道什么是最好的方式来存储数据库中的所有支付信息,而不必将其绑定到特定的网关。
我的第一个想法是有以下表格:
网关(网关ID、网关名称…)
付款(付款ID,付款金额,…)
交易(交易ID、网关ID、支付ID、交易参考、交易类型交易状态、交易请求数据,
事务响应数据…。
类型可以是“authorize”、“purchase”、“refund”、“void”等,状态可以是“successful”、“failed”、“pending”等。
通过这种方式,我可以有一个网关列表(PayPal,Stutpe,TaaTaGePal,WorldPay),每个支付可以有多个交易(支付尝试可以在第一次失败,然后再尝试和工作,然后作废或退还),但一个交易属于一个单一的支付。每个事务都是使用一个特定的网关执行的,它也将被存储。
我不知道这是不是最好的方法(也许太简单了?)我想听听其他的想法。
谢谢!
最佳答案
你最初的结构是个好的开始。我还想包括:
响应,它将保留从网关发送回的响应消息,以响应您的购买呼叫
回拨。越来越多的网关在notify url上向调用者提供post消息。这些指示来自网关的状态消息的更改,如取消的事务或退款
退款和作废,我会把它们放在一张桌子上。
对回调、退款和作废的响应,如果结构正确,可以将其存储在与常规响应相同的表中
有些数据可能必须存储为json blob,因为来自每个网关的消息结构不同。您可能需要加密的一些数据,例如,如果它包含可以识别客户或信用卡的数据
关于php - 多个网关的通用数据库设计,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35129979/