Lis*_*ker 1 ruby ruby-on-rails stripe-payments ruby-on-rails-7
在我的 Rails 7 应用程序中,我正在使用订阅模型,因此通过 Stripe API 实现订阅。
请参阅下面的付款方式 (subscriptions_controller.rb),当用户单击“选择计划”按钮时会触发该付款方式。重定向有效,然后无效,然后再次有效;我没有改变订阅的创建方式以及检索 URL 的方式。
def payment
@subscription = current_user.subscription
if @subscription
plan_id = params[:plan_id]
@subscription.update(id: @subscription.id, plan_id:, user_id: current_user.id, active: true)
else
subscription_id = SecureRandom.uuid
plan_id = params[:plan_id]
@subscription = Subscription.new(id: subscription_id, plan_id:, user_id: current_user.id)
end
@checkout_session = create_checkout_session(@subscription)
@subscription.checkout_session_id = @checkout_session.id
@subscription.save!
redirect_to @checkout_session.url, allow_other_host: true
end
private
def create_checkout_session(subscription)
Stripe::Checkout::Session.create({
customer: current_user.stripe_id,
payment_method_types: ['card'],
line_items: [{
price: subscription.plan.stripe_price_id,
quantity: 1
}],
mode: 'subscription',
success_url: subscription_url(subscription),
cancel_url: new_subscription_url
})
end
Run Code Online (Sandbox Code Playgroud)
错误信息
“出现问题。找不到您要查找的页面。请检查网址或联系商家。”
“CheckoutInitError:未设置 apiKey”。
在重定向之前调用 raise 并从那里获取 URL 是可行的。从 Stripe 开发者日志(即从创建的结帐会话)获取 URL 也可以。
我的重定向呼叫出了什么问题?
我在redirect_to调用之前添加了一个raise并检查URL是否相同:
>> @checkout_session.url
"https://checkout.stripe.com/c/pay/cs_test_a1ayFdxprxmpwtZA9cyvECPG2bNaLnCN7e5UToqdr8oNrDxZKfm1BrFts9#fidkdWxOYHwnPyd1blpxYHZxWjA0SENmbjZOdzF0UWNqbkhndD1SY0l8TUxkR2B0fUZ9PH9MX0w2T05Bcz1Cb11taU1AcTxRQkhWTFZGdWo2Z1F1MXZJfENzcDdOYlxjM0NAV01nUlRsTkNDNTVLX0twf3FyQicpJ2N3amhWYHdzYHcnP3F3cGApJ2lkfGpwcVF8dWAnPyd2bGtiaWBabHFgaCcpJ2BrZGdpYFVpZGZgbWppYWB3dic%2FcXdwYHgl"
>> redirect_to @checkout_session.url, allow_other_host: true
"<html><body>You are being <a href=\"https://checkout.stripe.com/c/pay/cs_test_a1ayFdxprxmpwtZA9cyvECPG2bNaLnCN7e5UToqdr8oNrDxZKfm1BrFts9#fidkdWxOYHwnPyd1blpxYHZxWjA0SENmbjZOdzF0UWNqbkhndD1SY0l8TUxkR2B0fUZ9PH9MX0w2T05Bcz1Cb11taU1AcTxRQkhWTFZGdWo2Z1F1MXZJfENzcDdOYlxjM0NAV01nUlRsTkNDNTVLX0twf3FyQicpJ2N3amhWYHdzYHcnP3F3cGApJ2lkfGpwcVF8dWAnPyd2bGtiaWBabHFgaCcpJ2BrZGdpYFVpZGZgbWppYWB3dic%2FcXdwYHgl\">redirected</a>.</body></html>"
Run Code Online (Sandbox Code Playgroud)
第一个有效,第二个(它被重定向到的那个)末尾有一个反斜杠(当我将其发布到此处时您甚至看不到)。如果我把它取下来刷新一下,它就会起作用。为什么添加此内容以及如何删除它?
| 归档时间: |
|
| 查看次数: |
1153 次 |
| 最近记录: |