Я пытаюсь интегрировать полосу в свое приложение. Я слежу за Railscast (#288), но у меня сложилось впечатление, что есть несколько вещей, которые Райан не упоминает явно.
Моя проблема в том, что plan_id в моем приложении не передается в Stripe. Как только я сгенерирую тестовую транзакцию в своем приложении и войду в Stripe, она покажет, что новый клиент с действительной картой был создан, но plan_id не передается. У меня есть планы по настройке полосы. Но поскольку plan_id не представлен, кредитная карта никогда не снимается. Итак, у меня есть клиенты, но нет платежей.
Вот моя подписка/new.html.haml. Мне интересно, нужно ли мне присвоить значение скрытому полю «plan_id».
%p
= @plan.name
= @plan.price
= form_for @subscription do |f|
- if @subscription.errors.any?
.error_messages
%h2
= pluralize(@subscription.errors.count, "error")
prohibited this subscription from being saved:
%ul
- @subscription.errors.full_messages.each do |msg|
%li= msg
= f.hidden_field :plan_id
= f.hidden_field :stripe_card_token
.field
= f.label :email
= f.text_field :email
- if @subscription.stripe_card_token
Credit card has been provided
- else
.field
= label_tag :card_number, "Credit Card Number "
= text_field_tag :card_number, nil, name: nil
.field
= label_tag :card_code, "Security Code on Card (CVV)"
= text_field_tag :card_code, nil, name: nil
.field
= label_tag :card_month, "Card Expiration"
= select_month nil, {add_month_numbers_true: true}, {name: nil, id: "card_month"}
= select_year nil, {start_year: Date.today.year, end_year: Date.today.year+15}, {name: nil, id: "card_year"}
.stripe_error
%noscript JavaScript is not enabled and is required for this form. First enable it in your web browser settings.
.actions= f.submit "Subscribe"
Вот мой контроллер подписки. params(:plan_id) передается с помощью строкового запроса.
def new
@subscription = Subscription.new
@plan = Plan.find_by_id(params[:plan_id])
end
def create
@subscription = Subscription.new(params[:subscription])
if @subscription.save_with_payment
flash[:success] = "Thank you for subscribing!"
redirect_to @subscription
else
render 'new'
end
end
Вот моя модель для subscribe.rb
class Subscription < ActiveRecord::Base
has_many :users
belongs_to :plan
#validates_presence_of :plan_id, :email
attr_accessible :stripe_card_token, :plan_id, :email
attr_accessor :stripe_card_token
def save_with_payment
if valid?
customer = Stripe::Customer.create(description:email, plan: plan_id, card: stripe_card_token)
self.stripe_customer_token = customer.id
save!
end
rescue Stripe::InvalidRequestError => e
logger.error "Stripe error while creating customer: #{e.message}"
errors.add :base, "There was a problem with your credit card."
end
end