我认为 Dwolla API 在通知中发送了错误的事务 ID。在正常的 dwolla 货币交易中,会创建两个交易 ID(这对我来说很奇怪,但 dwolla 就是这样做的)。因为这两个是同时创建的,所以它们总是(根据我的经验)连续的数字。例如,如果账户 X 向账户 Y 汇款,Y 将看到交易 id M,X 将看到交易 id M+1。
但是 Dwolla 的通知 webhook 会发送 Y 条 id 为 M+1 的交易细节。虽然 ID M+1 对该交易仍然是唯一的,但 ID M+1 不能被 Y 通过 API 使用——因为 M+1 应该只被 X 使用。
这是一个具体的例子:
通过我的 web 应用程序,我通过异地网关 api 从我的个人 dwolla 帐户向我的组织汇款。
我的 webapp 以回调和通知形式发送交易详细信息。第 1 步生成的事务 id 是 1431566。这是发送给回调和通知的事务 id。我的网络应用程序存储此 ID 以供将来使用。
通过我的网络应用程序,我决定从我的组织退还我的个人 dwolla 帐户,因此:
我的 webapp 尝试向 dwolla 查询交易 1431566 以获取 SourceId,但这失败了 - dwolla 报告“找不到帐户的交易”。如果没有像从 ID 中减去一个并重试这样的丑陋杂物,我的自动退款将无法继续。
手动解决方法是通过 Web 界面登录到我组织的 dwolla 帐户。在这里我可以根据日期时间查找交易,可以看到交易ID实际上是1431565(在Web界面中正确报告)。如果我进入我组织的数据库并将 1431566 替换为 1431565,我可以重复第 4 步,这一次可以正常工作。之后我可以发起一个 send() 并退款。
在 dwolla 将支持转移到 stackoverflow 之前,我在这里报告了同样的问题:https ://getsatisfaction.com/dwolla/topics/callback_and_webhook_notification_sent_wrong_transaction_id_off_by_one
我认为如果其他人有同样的问题,它会更快地修复。或者,也许我遗漏了一些明显的东西,有人会指出来。