Rails Payola:将优惠券添加到现有订阅中

时间:2015-06-09 03:17:58

标签: ruby-on-rails stripe-payments payola

我们正在开发使用Payola处理付款的SaaS产品,并且我们想要添加推介促销。将优惠券添加到裁判员很简单(表格上带有优惠券代码的隐藏字段),但似乎没有任何明显的方式将优惠券应用于现有订阅。

我已经检查了Payola来源,并且似乎没有任何方法可以将优惠券代码应用于现有订阅,仅适用于新订阅。

我们可以获取Stripe :: Customer对象并使用此答案:How to Apply a Coupon to a Stripe Customer来应用优惠券吗?这会让Payola陷入困境吗?

1 个答案:

答案 0 :(得分:3)

由于Payola将订阅详细信息存储在自己的table中,因此仅仅更新Stripe上的订阅还不够。现在,如果我们看看subscription_controller.rb:28,我们会看到Payola本身在应用新优惠券时所做的事情(您可以在更改计划时使用Payola申请新优惠券,可以从before_filter <间接看到em> find_plan_coupon_and_quantity 也在 change_plan 方法上调用。 find_plan_coupon_and_quantity 方法导致调用@coupon = cookies[:cc] || params[:cc] || params[:coupon_code] || params[:coupon])。它的作用是调用Payola::ChangeSubscriptionPlan.call(@subscription, @plan)再次在change_subscription_plan.rb:3中声明并在同一文件上调用另一个方法 retrieve_subscription_for_customer 。此方法是关键,因为它从Stripe检索实际订阅并返回它。这是参考方法

def self.retrieve_subscription_for_customer(subscription, secret_key)
  customer = Stripe::Customer.retrieve(subscription.stripe_customer_id, secret_key)
  customer.subscriptions.retrieve(subscription.stripe_id)
end

在获取订阅后,它会根据新的计划详细信息进行更新,并存储在Payola自己的数据库数据结构中。

经过这个漫长而艰辛的调查后,我们可以看到它应该适合手动更新Stripe,然后如上所述在Payola订阅上应用相同类型的更新。所以回答关于弄乱Payola的原始问题:是的,它会使Payola混乱,但您可以通过复制Payola本身使用的代码来手动修复它以保持同步

希望这有助于您实现所需的功能,并至少指导您正确指导。