Не могу понять, как передать купон в параметрах URL при создании подписки Stripe в приложении Rails 5 - PullRequest
0 голосов
/ 29 сентября 2018

очень признателен за помощь в этом, уже 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
...