очень признателен за помощь в этом, уже 3 часа в отладке этого.Я пытаюсь поддержать купоны при создании подписки на полосу.Для этого все, что вам нужно сделать, это передать идентификатор купона, созданный вами в Stripe, в качестве опции при создании подписки для пользователя, например:
subscription = customer.subscriptions.create(
source: params[:stripeToken],
plan: @plan,
coupon: 'testcoupon' #this works when you hardcode this
)
Но я хочу, чтобы он ссылался на параметр URL c_id
чтобы я мог сделать его динамическим, например localhost: 3000 / зарядов / новых? C_id = 'testcoupon' например:
subscription = customer.subscriptions.create(
source: params[:stripeToken],
plan: @plan,
coupon: @coupon
)
Я объявил сильные параметры, чтобы разрешить это
private
def coupon_params
#strong parameters to allow c_id
params.permit(:c_id)
@coupon = params[:c_id]
end
И объявить в контроллере зарядов before_action :coupon_params
.
Однако, когда я по какой-то причине создаю заряд, @ купон пуст.Кто-нибудь знает, что я делаю не так?
/// ОБНОВЛЕНИЕ, Вот весь контроллер обвинения:
class ChargesController < ApplicationController
before_action :authenticate_user!
before_action :amount_to_be_charged
before_action :set_plan
before_action :coupon_params
def new
if current_user.subscribed?
redirect_to root_path, notice: "Not authorized."
end
@coupon = params[:c_id]
puts "def new coupon: #{@coupon}"
end
def thanks
if !current_user.subscribed?
redirect_to new_charge_path
end
end
def create
params.permit(:stripeToken)
@coupon = params[:c_id]
puts "here is the coupon on param check #{@coupon}"
customer = if current_user.stripe_id?
Stripe::Customer.retrieve(current_user.stripe_id)
else
Stripe::Customer.create(email: current_user.email)
end
subscription = customer.subscriptions.create(
source: params[:stripeToken],
plan: @plan,
#coupon: 'test' #this works when hardcoded sdafasdf@dfs.com
coupon: @coupon
)
Rails.logger.debug("Coupon == #{@coupon}")
options = {
stripe_id: customer.id,
stripe_subscription_id: subscription.id,
}
puts current_user.update(options)
current_user.update(options)
redirect_to thanks_path
rescue Stripe::CardError => e
flash[:error] = e.message
redirect_to new_charge_path
end
private
def set_plan
@plan = ENV['STRIPE_PLAN_ID']
end
def coupon_params
#strong parameters to allow c_id
params.permit(:c_id)
@coupon = params[:c_id]
end
end