因此,我尝试设置此示例https://stripe.com/docs/recipes/variable-amount-checkout
我正在使用Debian 8 Rails版本:5.2.3 Ruby版本:2.6.3(x86_64-linux)
我想使用应该作为默认选项的SQLite
这就是我的工作,我在主目录中,想要创建一个新项目。
我愿意
rails new stripetest
完成后,我就做cd stripetest
nano Gemfile
并一直进行到最后,添加新行,粘贴gem 'stripe'
添加另一行,粘贴gem 'jquery-rails'
,然后保存,然后执行bundle install
< / p>
那行得通,我得到了“捆绑包!”信息,现在看看Stripe的教程,在我仍处于〜/ stripetest的情况下进行第一步
nano config/initializers/stripe.rb
我将5行代码粘贴到其中,然后保存
接下来,我会在〜/ stripetest中直接运行rails g controller charges new create
,就像它告诉我那样,成功了。
现在,本教程告诉我编辑“ routes.rb”“用resources :charges
替换所有Rails生成的收费路线”
所以我做cd config
,nano routes.rb
,然后我看到已经有东西了
Rails.application.routes.draw do
get 'charges/new'
get 'charges/create'
# For details on the DSL available within this file, see http://guides.r$
end
所以我替换
get 'charges/new'
get 'charges/create'
使用resources :charges
并保存。我的routes.rb文件现在看起来像这样
Rails.application.routes.draw do
resources :charges
# For details on the DSL available within this file, see http://guides.r$
end
然后我执行cd ..
退出配置目录
现在,我进入我正在关注的本教程的“创建付款表格和确认页面”部分
我做nano app/views/charges/new.html.erb
,删除该文件中已有的2行,然后复制并粘贴示例中的前15行代码,然后保存
然后我做nano app/views/charges/create.html.erb
,擦除之前存在的2行,并粘贴显示给我的3行代码,然后保存。
现在,我继续本教程的“定义JavaScript”部分
我做nano app/views/charges/new.html.erb
,添加新的空白行,然后复制并粘贴其他14行代码,然后添加新的空白行,然后复制并粘贴随后显示给我的23行代码,然后保存。
我意识到的一件事是,它希望您添加的最初14行代码的末尾有</script>
。粘贴完成后,我需要删除</script>
,然后将最后23行代码粘贴到最初的14行下面,然后在最后用文件底部的</script>
结束它。否则捐赠按钮的javascript代码将无法正常工作。
现在它有4行代码,希望我将其添加到app / views / new.html.erb中,所以我执行nano app/views/new.html.erb
并将其粘贴,然后保存。
在此之后,我进入“写控制器”部分
我做nano app/controllers/charges_controller.rb
并看到一些已经存在的代码。
class ChargesController < ApplicationController
def new
end
def create
end
end
回头看教程中的代码,我可以看到
def new
end
没有被触及,因此我去定义def create,按Enter在其下创建一个新的空白行,然后复制并粘贴所有内容,直到该教程的代码示例的最后一行为止,将先前存在的最后一行保留为“结束”,然后保存
完成后,这是我的app / controllers / charges_controller.rb的样子
class ChargesController < ApplicationController
def new
end
def create
@amount = params[:amount]
@amount = @amount.gsub('$', '').gsub(',', '')
begin
@amount = Float(@amount).round(2)
rescue
flash[:error] = 'Charge not completed. Please enter a valid amount in USD ($).'
redirect_to new_charge_path
return
end
@amount = (@amount * 100).to_i # Must be an integer!
if @amount < 500
flash[:error] = 'Charge not completed. Donation amount must be at least $5.'
redirect_to new_charge_path
return
end
Stripe::Charge.create({
amount: @amount,
currency: 'usd',
source: params[:stripeToken],
description: 'Custom donation',
})
rescue Stripe::CardError => e
flash[:error] = e.message
redirect_to new_charge_path
end
end
现在已经完成了,我回看教程,发现我已经完成了我想做的所有事情,现在剩下要做的就是测试它。
首先,我需要添加环境变量,以便其正常运行。这是给我们的两个测试键 PUBLISHABLE_KEY = pk_test_VgxsElpJEyhyry0JhTjAas4x SECRET_KEY = sk_test_xQHXBbxUcFeqysHHC9DEThUA
我将它们添加到/ etc / environment中并且也这样做
export PUBLISHABLE_KEY=pk_test_VgxsElpJEyhyry0JhTjAas4x
export SECRET_KEY=sk_test_xQHXBbxUcFeqysHHC9DEThUA
并重新启动VM以确保它们已生效。
重新登录后,我将执行cd stripetest
和
bundle exec rails s -b 0.0.0.0
进行测试。
我得到以下控制台输出
=> Booting Puma
=> Rails 5.2.3 application starting in development
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.12.1 (ruby 2.6.3-p62), codename: Llamas in Pajamas
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://0.0.0.0:3000
Use Ctrl-C to stop
因此,我打开一个网络浏览器,导航到http://[Server IP]:3000 /,然后看到“是的!您在Rails上!”消息
然后我按照教程中的说明转到http://[Server IP]:3000 / charges / new
当我尝试在文本框中输入金额时,说“ 50”,然后单击“捐赠”按钮,我得到一个错误提示
“ ChargesController#create中的“ Stripe :: InvalidRequestError” 无效的源对象:必须是字典或非空字符串。请参阅https://stripe.com/docs'“
上的API文档并显示“提取的来源(第26行附近):”
24: end
25:
26: Stripe::Charge.create({
27: amount: @amount,
28: currency: 'usd',
29: source: params[:stripeToken],
在这一点上,我不知道该怎么办,也不知道我在哪里出错了。我尝试了多次,更改了我对chargescontroller.rb和/config/routes.rb文件所做的操作,但似乎无法使其正常工作。
我的/config/routes.rb文件或我的app / controllers / charges_controller.rb文件可能有问题,但我不确定是什么