我们正在管理使用Stripe的旧Rails应用程序,但我们的Stripe版本比当前API落后26个月。我们正在寻求升级到当前的Stripe API,但由于许多更改会影响我们的系统,因此在更改我们的实时网站正在使用的实时API之前,我们非常喜欢测试更改的方法。< / p>
所以我有两个问题:
1)使用API时,我们非常依赖实时和测试模式之间的区别。有没有办法只升级测试模式API(不升级Live),这样我们就可以识别并纠正任何破坏而不会真正破坏用户体验?
2)是否可以一次升级一个版本的API,而不是一次升级,以使转换对我们来说更易于管理?
答案 0 :(得分:12)
文档记录非常糟糕,但事实证明,您可以通过在使用Ruby绑定发送请求之前设置Stripe.api_version = 'YYYY-MM-DD'
,将Stripe API版本更改为您所需的任何版本({{3} }),或通过发送Stripe-Version
HTTP标头。
因此,我们计划将规范配置为针对所有请求使用最新的API版本,并以此方式测试破损。
答案 1 :(得分:0)
以下是在代码内细粒度级别覆盖Stripe版本的一种方法。
这可以通过重写Stripe.api_version
访问器方法来在线程局部变量中查找版本,或者如果找不到该版本,则退回到原始行为。 Stripe.api_version
用作lib/stripe.rb
中Stripe-Version
HTTP标头的值。
注意:这适用于1.58.0版的条纹gem,尚未经过其他版本的测试:
首先,创建包含内容的文件config/initializers/stripe_api_version_overrider.rb
module StripeAPIVersionOverrider
def api_version
Thread.current[:__stripe_api_version_override] || super
end
def with_api_version(version, &block)
original_version = api_version
Thread.current[:__stripe_api_version_override] = version
block.call
ensure
Thread.current[:__stripe_api_version_override] = original_version
end
end
Stripe.singleton_class.prepend(StripeAPIVersionOverrider)
接下来,在您要使用其他版本的Stripe API的代码中,将其包装在传递给Stripe.with_api_version
的块中:
Stripe.with_api_version "2016-07-06" do
# API versions prior to 2016-07-06 did not support
# retrieving canceled subscriptions.
Stripe::Subscription.retrieve(subscription_id)
end
运行bin/spring stop
以确保将这些更改加载到您的开发环境中。