Rails Payola: добавить купон к существующей подписке
Мы работаем над продуктом SaaS, который использует Payola для обработки платежей, и мы хотели бы добавить реферальную рекламную акцию. Добавить купон рефери достаточно просто (скрытое поле в форме с кодом купона), но, кажется, нет никакого очевидного способа применить купон к существующей подписке.
Я проверил источник Payola, и, похоже, нет никаких методов применения кода купона для существующей подписки, только для новой.
Можем ли мы просто получить объект Stripe::Customer и использовать этот ответ: Как применить купон к клиенту Stripe, чтобы применить купон? Это испортит Payola вообще?
1 ответ
Поскольку 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]
). То, что он делает, это то, что он вызывает 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 для синхронизации.
Надеюсь, что это поможет вам достичь желаемой функциональности и, по крайней мере, направит вас в правильном направлении.