ruby-on-rails - Rails 应用程序中的条带success_url 格式未创建正确的URL
问题描述
我有一个使用 Stripe Checkout 并创建 Stripe 会话然后重定向到结帐的应用程序。在我的控制器中,此代码工作正常:
session = Stripe::Checkout::Session.create(
payment_method_types: ['card'],
subscription_data: {
items: [{ plan: stripe_plan }],
},
customer: stripe_customer_id,
customer_email: stripe_customer_email,
client_reference_id: current_user.id,
success_url: "http://localhost:3000/welcome_new_subscriber?session_id={CHECKOUT_SESSION_ID}",
cancel_url: "http://localhost:3000/charges/new?stripe_plan=" + stripe_plan,
)
并正确重定向到 URL:
http://localhost:3000/welcome_new_subscriber?session_id=cs_test_abcd1234
当我将 success_url 行更改为以下内容时(如一些网站上所建议的那样),它不起作用:
success_url: welcome_new_subscriber_url(:session_id => '{CHECKOUT_SESSION_ID}'),
URL 解析为:
http://localhost:3000/welcome_new_subscriber?session_id=%7BCHECKOUT_SESSION_ID%7D
{CHECKOUT_SESSION_ID} 似乎没有正确解析。知道我做错了什么吗 - 我已经尝试了所有我能想到的语法更改?
解决方案
当你使用
welcome_new_subscriber_url(:session_id => '{CHECKOUT_SESSION_ID}')
Rails 试图通过 URI 转义{
和}
. 然而,Stripe gem 使用这些作为特殊字符来知道在哪里替换模板变量。
所以你可以使用
welcome_new_subscriber_url + "?session_id={CHECKOUT_SESSION_ID}"
不是最优雅的东西,但是Stripe的系统在这里有点奇怪(他们为什么不让你CHECKOUT_SESSION_ID
自己通过?),所以我们必须凑合
推荐阅读
- soap - 如何在单独的日志文件中动态地使用 log4j2 记录 SOAP 请求/响应
- java - How to return all database columns with CrudRepository?
- javascript - Is there a way to get the timestamp of each call from a callstack?
- azure - Clarity required in creating LUIS and KB and linking them
- python - First gradient descent : how to normalize X and Y?
- elixir - 在 Elixir 中将集合转换为地图
- php - 在加载网页之前先用 PHP 拦截 Angular URL
- reactjs - 找不到模块'@babel/plugin-proposal-class-properties' – React+Spring-boot
- anaconda - 启动终端时的clang后端
- python - 我想在熊猫中将两个具有相同名称列的数据框组合起来