0

给定以下方法

  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。

处理这个问题的最佳方法是什么?Fire & forget 并允许 Stripe webhook 回调根据需要管理过期的活动状态?

另一种情况是如果第 4 行没有通过,所有代码都会在第 4 行之后停止。救援是这样的吗?

4

1 回答 1

1

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

于 2013-06-20T12:00:32.600 回答