【发布时间】:2019-09-17 00:45:11
【问题描述】:
假设您使用交易来处理 Stripe 支付并更新用户实体:
@ndb.transactional
def process_payment(user_key, amount):
user = user_key.get()
user.stripe_payment(amount) # API call to Stripe
user.balance += amount
user.put()
Stripe API 调用可能成功,但 put 由于争用而失败。然后会向用户收费,但他的帐户不会反映付款。
您可以将 Stripe API 调用从事务中提取出来,然后再进行事务,但您似乎仍然遇到同样的问题。收费成功,但交易失败,用户账户未记入贷方。
这似乎是一个非常常见的情况。如何正确处理这个问题?
【问题讨论】:
-
也许你需要实现某种形式的分布式事务,例如两阶段提交 (en.wikipedia.org/wiki/Two-phase_commit_protocol)..?
-
@thebjorn,我会调查的。我希望有人使用 GAE 服务有一个相当简单的解决方案。每个接受付款的人都必须解决这个问题,所以我希望在这个问题上获得更多的活动......
标签: python google-app-engine transactions app-engine-ndb