我必须创建一个包含两笔付款的订阅流程:
- 第一个是资金。允许的付款类型是定期邮件和ActiveMerchant检查(ACH)通过Authorize.Net。
- 第二个是资金的费用。允许的付款类型与通过Authorize.Net的资金+信用卡相同。
只需一次付款就无法做到这一点(特别是如果客户想用信用卡支付费用),所以我必须坚持:
- ActiveMerchant 1.55.0(Ruby 2.2.0,Rails 4.2.0)。
- 两种不同的付款方式。
- 确认过程将对后端进行一次点击,这将打到数据库并执行两次付款。
为了原子地捕捉错误,我可以:
- 验证模型。
- 验证付款(某种方式是某种瞬态模型)。
- 执行付款1(资金)。
- 执行付款2(费用)。
- 存储所有内容。
但这些是外部系统,可能因各种原因而失败,例如:
- 系统已进入维护状态。
- 可疑操作。
- 卡号无效。
- 路由号码无效。
- ...
所以我达到了常规数据库交易没有帮助的地步(因为这是外部系统中的两个操作),并且可能是资金支付有效,但费用支付不是。
如果第二次付款失败,有没有办法回滚第一笔付款,那么这两笔付款是成功还是没有付款?