如果不存在,如何制定计划

时间:2017-04-16 15:39:36

标签: ruby-on-rails stripe-payments

我想以编程方式创建条带化的订阅计划,我希望能够多次运行,所以如果计划存在,它应该忽略它。

我注意到如果我尝试检索一个计划,如果它不存在则抛出异常:

plan1 = Strie::Plan.retrieve("abcd123")
>>Stripe::InvalidRequestError: No such plan: abcd123

我使用以下方式创建计划:

Stripe::Plan.create(.....)

我有一个包含我所有计划的计划模型,所以我理想地想要这样做:

Plan.all.each do |plan|
  # create stripe plan here if it doesn't exist
end

如果计划已存在于条带中,那么处理此异常的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

查看https://stripe.com/docs/api#error_handling

如果您尝试使用已存在的ID创建计划,则请求将失败,并且Stripe将引发无效的请求错误。您应该能够将计划创建调用包装到帐户中以查找错误。一个准系统的例子:

require "stripe"
Stripe.api_key = "sk_test_xxxyyyzzz"

MyPlans.each do |plan|
    # try to create a plan
    begin 
        my_plan = Stripe::Plan.create(
          :amount => plan.amount,
          :interval => "month",
          :name => plan.name,
          :currency => "usd",
          :id => plan.id 
        )
        puts my_plan
    # catch any invalid request errors
    rescue Stripe::InvalidRequestError => e
        puts e.json_body[:error]
    end
end