【发布时间】:2017-12-05 16:51:32
【问题描述】:
我是 Rails 新手,目前正在开发我的第一个网站。
所以这是我的问题:
每次我为服务创建订阅时,它都会给我一个 Stripe::InvalidRequestError 说“计划已经存在”。我发现这与 Stripe Plan ID 有关。
我想要做的是,当用户点击订阅时,它应该检查是否已经存在具有相同 id 的计划。如果不存在具有相同 ID 的计划,则应创建该计划。如果确实存在,则不应创建计划,而只是为客户订阅该计划。
这是我尝试过的:
class PaymentsController < ApplicationController
before_action :set_order
def create
@user = current_user
unless Stripe::Plan.id == @order.service.title
plan = Stripe::Plan.create(
:name => @order.service.title,
:id => @order.service.title,
:interval => "month",
:currency => @order.amount.currency,
:amount => @order.amount_pennies,
)
end
上面你可以看到,我以为我可以只使用 Stripe 的 ID,但显然这不起作用。
customer = Stripe::Customer.create(
source: params[:stripeToken],
email: params[:stripeEmail],
)
# Storing the customer.id in the customer_id field of user
@user.customer_id = customer.id
Stripe::Subscription.create(
:customer => @user.customer_id,
:plan => @order.service.title,
)
@order.update(payment: plan.to_json, state: 'paid')
redirect_to order_path(@order)
rescue Stripe::CardError => e
flash[:error] = e.message
redirect_to new_order_payment_path(@order)
end
private
def set_order
@order = Order.where(state: 'pending').find(params[:order_id])
end
end
【问题讨论】:
-
检查
Stripe::Plan.id并打印其值 -
它告诉我!! #
的未定义方法 `id'。所以当我尝试打印它时它没有价值。当我第一次创建它时,我将 ID 分配给了字符串“test”。 -
能把用户点击订阅按钮时生成的参数贴出来吗?
-
你是这个意思吗?
“✓”, “authenticity_token”=> “ZJPFaGjSGLkACju0m7UkixWQ1kTXvko45HfLdfCP6wggmR8L7U6T7I56nrooYzCpqH7vg0VX7 + PWG + WDqOiCmw ==”, “stripeToken”=> “tok_1Ab24XL51Wq7fLz4OQOZ8f44”, “stripeTokenType”=> “卡”,“stripeEmail "=>"123456@gmail.com", "controller"=>"payments", "action"=>"create", "order_id"=>"18"} 允许:false> -
如果用户点击订阅按钮,参数只是 <:parameters>"payments", "action"=>"new", "order_id"=>" 18"} 允许:false>
标签: ruby-on-rails stripe-payments