我正在我的应用程序中实现另一个Checkout Session示例。在我的donations控制器中,下面的create操作工作正常:
def create
@donation = Donation.create(create_params)
if @donation.save
if Rails.env.development?
success_url = "http://localhost:3000/donations_success?session_id={CHECKOUT_SESSION_ID}"
cancel_url = "http://localhost:3000/"
elsif Rails.env.production?
success_url = "https://www.dbsan.org/donations_success?session_id={CHECKOUT_SESSION_ID}"
cancel_url = "https://www.dbsan.org/"
end
data = {
line_items: [{
price_data: {
currency: 'usd',
product_data: {
name: @donation.program
},
unit_amount: @donation.amount.to_i
},
quantity: 1,
}],
mode: 'payment',
customer_email: @donation.email,
success_url: success_url,
cancel_url: cancel_url
}
session = Stripe::Checkout::Session.create(data)
redirect_to session.url, allow_other_host: true
end
end
我将相关的Stripe部分复制到我的参与者注册控制器中:
def create
@registrant = @challenge.challenge_participants.build(register_params)
@registrant.user_id = current_user.id
unless @registrant.donations.empty?
@registrant.donations.first.user_id = current_user.id
@registrant.donations.first.email = current_user.email
end
if @registrant.save
@challenge = @registrant.challenge
ChallengeMailer.with(registrant: @registrant).registered.deliver_now
if @registrant.price.price == 0
redirect_to challenge_participant_path(@challenge, @registrant)
else
if Rails.env.development?
success_url = "http://localhost:3000/donations_success?session_id={CHECKOUT_SESSION_ID}"
cancel_url = "http://localhost:3000/"
elsif Rails.env.production?
success_url = "https://www.dbsan.org/donations_success?session_id={CHECKOUT_SESSION_ID}"
cancel_url = "https://www.dbsan.org/"
end
data = {
line_items: [{
price_data: {
currency: 'usd',
product_data: {
name: "Registration"
},
unit_amount: 100
},
quantity: 1,
}],
mode: 'payment',
success_url: success_url,
cancel_url: cancel_url
}
session = Stripe::Checkout::Session.create(data)
redirect_to session.url, allow_other_host: true
end
end
捐赠一个将重定向到条纹没有问题;但是,如果所选的定价大于0,则注册服务器将尝试启动条带校验。在我的浏览器控制台中,我得到一个Preflight响应不成功的错误代码403,其中包含一些TypeError,但它没有给我详细信息。
在这两个视图中,Stripe API Javascript包含在提交按钮的上方:
= javascript_include_tag "https://js.stripe.com/v3"
由于我从捐赠控制器复制了代码,所以我没有看到我的错误是什么。
我还没有更新success_url,因为我想先重定向到Stripe。name和unit_amount现在是硬编码的,以防我的变量不起作用。
1条答案
按热度按时间4dc9hkyq1#
您共享的代码是Ruby中一个简单的HTTP重定向服务器端,除非您的客户端代码正在发出 AJAX 请求而不是页面/表单提交,否则不应该在浏览器中导致CORS错误。
或者,表单提交可能配置错误,Rails将其转换为turbo请求。将
data-turbo=false
添加到表单中可能会解决这个问题。