Rails Payola: 给现有的订阅添加优惠券

4
我们正在开发一个使用Payola处理付款的SaaS产品,并希望添加推荐促销。将优惠券添加到被推荐人很简单(在表单上使用隐藏字段和优惠码),但似乎没有明显的方法可以将优惠券应用于现有订阅。
我已经检查了Payola源代码,似乎没有处理将优惠码应用于现有订阅的方法,只有处理新订阅的方法。
我们能否获得Stripe :: Customer对象并使用此答案:如何向Stripe客户应用优惠券 来应用优惠券?这样做会对Payola造成任何问题吗?
1个回答

3

由于Payola将订阅详细信息存储在自己的表格中,仅在Stripe上更新订阅是不够的。现在,如果我们看一下{{link2:subscription_controller.rb:28}},我们可以看到Payola本身在应用新优惠券时所做的操作(您可以在更改计划时使用Payola申请新优惠券,这可以间接地从{{link3:before_filter}} 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),该方法在{{link4: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本身使用的代码来手动修复它,以保持同步
希望这可以帮助您实现所需的功能,并至少指引您走向正确的方向。

感谢您的答复。针对我的需求,我想自动添加优惠券,因为后续费用将低于第一笔费用。但是我意识到,我可以通过在创建订阅时传递设置费用来增加第一个订阅的成本。感谢您的调查,我认为这将有助于他人。 - Amala

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接