我们正在开发使用 Payola 处理付款的 SaaS 产品,我们希望添加推荐促销。将优惠券添加到推荐人非常简单(带有优惠券代码的表单上的隐藏字段),但似乎没有任何明显的方法可以将优惠券应用于现有订阅。
我已经检查了 Payola 的来源,似乎没有任何方法可以将优惠券代码应用于现有订阅,只是用于新订阅。
我们是否可以只获取 Stripe::Customer 对象并使用以下答案:如何将优惠券应用于 Stripe 客户以应用优惠券?这会完全搞砸Payola吗?
我们正在开发使用 Payola 处理付款的 SaaS 产品,我们希望添加推荐促销。将优惠券添加到推荐人非常简单(带有优惠券代码的表单上的隐藏字段),但似乎没有任何明显的方法可以将优惠券应用于现有订阅。
我已经检查了 Payola 的来源,似乎没有任何方法可以将优惠券代码应用于现有订阅,只是用于新订阅。
我们是否可以只获取 Stripe::Customer 对象并使用以下答案:如何将优惠券应用于 Stripe 客户以应用优惠券?这会完全搞砸Payola吗?
由于 Payola 将订阅详细信息存储在自己的表中,因此仅更新 Stripe 上的订阅是不够的。现在,如果我们看一下subscription_controller.rb:28,我们会看到 Payola 本身在应用新优惠券时会做什么(您可以在更改计划时使用 Payola 应用新优惠券,这可以从before_filter find_plan_coupon_and_quantity也被调用change_plan间接看出方法。find_plan_coupon_and_quantity方法导致调用@coupon = cookies[:cc] || params[:cc] || params[:coupon_code] || params[:coupon]
)。它的作用是调用change_subscription_plan.rb:3Payola::ChangeSubscriptionPlan.call(@subscription, @plan)
中再次声明的方法并调用另一个方法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 本身使用的代码来手动修复它以保持同步。
希望这可以帮助您实现所需的功能,并至少指导您正确的方向。