gpt4 book ai didi

database-design - Auth-Only 信用卡交易是否应该与数据库中的 Auth-Capture 交易分开存储?

转载 作者:行者123 更新时间:2023-12-04 06:52:47 30 4
gpt4 key购买 nike

背景

我构建了一个连接到 Authorize.net 支付网关的电子商务应用程序。管理员可以通过以下方式处理信用卡:

  1. 管理员立即从客户的信用卡中扣款的“捕获”交易。
  2. “仅授权”交易,管理员从信用卡中授权 $X,然后实际获取金额(参见下面的第 3 条)
  3. “Prior-Auth-Capture”交易,其中管理员捕获的金额等于或小于之前从“Auth-Only”交易中捕获的金额。

这个问题与这些类型的交易应该如何存储在数据库中有关。我的“付款”表中有以下架构:

payments table schema

进行新付款时,我会在PaymentAmount 字段中存储有关付款方式的信息(例如信用卡、支票、现金)。

如果 PaymentType 是“信用卡”,我会存储 TransactionType(例如,Capture、Auth-Only、Prior-Auth-Capture)。

PaymentAmount 列包含付款金额(如果 TransactionType 是“capture”或“prior-auth-capture”。如果 TransactionType 是“Auth-Only”我将金额存储在 AuthorizedAmount 列中,并在 AuthExpDate 中跟踪授权金额适用的日期。

与 Authorize.net 的交易/引用数据相关的字段存储在 ApprovalCodeTransactionID 列中。

回到问题

既然您已经了解了一些背景知识,那么让我们深入探讨一下我的问题的细节:每笔交易都应该在此表中获得自己的记录吗?或者,当我从现有交易中获取资金时,我应该更新“仅授权”交易的现有交易吗?

示例:

  1. 每个 Action 的新记录:如果用户进行“仅授权”交易,我将在 Payments 表中创建一条新记录。如果用户稍后在初始交易上运行“prior-auth-capture”交易,我应该在数据库中创建第二行还是更新原始交易并将捕获的金额添加到 PaymentAmount 列?

    PaymentsID  TransactionID  PaymentType  PaymentAmount  AuthorizedAmount
    ------------------------------------------------------------------------
    1 ABC123 Auth 0.00 100.00
    2 ABC123 Auth-Capture 100.00 0.00
  2. 每个 TransactionID 的单行并使用每个自动捕获更新原始交易。

    PaymentsID  TransactionID  PaymentType  PaymentAmount  AuthorizedAmount
    ------------------------------------------------------------------------
    1 ABC123 Auth 100.00 100.00

从逻辑上讲,我可以看到两种情况的论据。一方面,如果我为每个事务创建一个新行,我可以看到每个“仅授权”事务的每次命中的良好历史记录。缺点是在您针对单个“仅授权”事务进行多个“事先授权捕获”事务的情况下,因为要计算出您还剩下多少,您必须编写一个稍微复杂的查询(将表连接到自身并按 TransactionID 分组以获得 PaymentAmount 的总和)。

如果我为每个 TransactionID 创建一行,那么我可以轻松地更新 PaymentAmount 并使用简单的计算 (AuthorizedAmount - PaymentAmount = AuthorizedBalance) 计算授权中剩余的金额。这种方法还使事情变得更清晰,因为 TransactionID、ApprovalCode、Payment Info 和几乎所有其他内容都将保持不变,因此表中的冗余数据更少。此外,从报告的角度来看,为简单起见,大多数用户只是希望看到每笔交易的一行。

我很想听听您对解决此问题的正确方法的看法。

最佳答案

为了简单起见,我会避免失去数据/灵 active 的诱惑;如果您更新原始行,您将如何独立确定授权和捕获的日期/时间?捕获了多少次?从网关 API 返回的每个授权代码和其他新值是什么?

如果在不同交易类型之间有很多具有相同值的重复字段,则通过将它们移动到新表并存储 ID 值来规范化。

关于database-design - Auth-Only 信用卡交易是否应该与数据库中的 Auth-Capture 交易分开存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39499340/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com