如何避免订阅与Stripe不同步?

时间:2013-06-20 10:55:04

标签: ruby-on-rails stripe-payments

给出以下方法

  def change_plan_to(plan_id)
    new_plan = Plan.find plan_id
    stripe_customer = Stripe::Customer.retrieve(stripe_customer_token)
    stripe_customer.update_subscription(plan: new_plan.slug)
    self.plan = new_plan
    self.active = true
    save
  rescue Stripe::InvalidRequestError => e
    logger.error "[STRIPE] #{ e }"
    errors.add :base, "Unable to change your plan!"
    false
  end

特别是第4-6行。我希望4和5仅在4成功时发生,但Stripe不会返回在if中包装它的能力。如果它出错,它只会抛出Stripe :: InvalidRequestError。

处理此问题的最佳方法是什么?火与火忘记并允许Stripe webhook回调根据需要管理过期的活动状态?

另一种情况是,如果没有通过,所有代码将在第4行之后停止。这是救援工作的方式吗?

1 个答案:

答案 0 :(得分:1)

是的,这就是救援工作的方式, 因此,最好执行这些语句,这些语句依赖于条带发送给您的webhook回调中的第4行。因为这可以确保订阅更改。