Rails:条纹似乎有效,但不会产生任何费用

时间:2017-06-06 18:46:28

标签: ruby-on-rails stripe-payments

我有一个rails应用程序,其中Stripe的设置类似于this文档。当我点击"用卡支付"按钮并输入它说成功的测试卡信息,然后给我一条错误信息:

resources :charges
get 'charges/shipping'
get 'charges/address'
post 'charges/update_order'

即使我的路线是这样的:

charges_controller

我的class ChargesController < ApplicationController ... def new @order = current_order end def create # Amount in cents @amount = current_order.total * 100 @user = current_user @order = current_order if @user.stripe_customer_id customer = @user.stripe_customer_id else customer = Stripe::Customer.create( :email => params[:stripeEmail], :source => params[:stripeToken] ) @user.update_attributes(stripe_customer_id: customer.id) end @order.update_attributes(order_status_id: 2) @order.update_attributes(date_placed: DateTime.now) # OrderMailer.order_placed(@order.user, @order).deliver_now session[:order_id] = nil charge = Stripe::Charge.create( :customer => @user.stripe_customer_id, :amount => @amount.to_i, :description => 'Rails Stripe customer', :currency => 'usd' ) rescue Stripe::CardError => e flash[:error] = e.message redirect_to new_charge_path end private def order_params params.permit(:subtotal, :tax, :shipping, :total, :order_status_id, :user_id, :date_placed, :shipping_choice) end end 读起来像这样:

post "charges/new"

如果我手动将routes.rb插入Stripe::CardError,表示它已成功,但会重定向到同一页面(表示CREATE EXTENSION btree_gist;)并且没有注册费用条纹仪表板。

谁能看到我出错的地方?

5 个答案:

答案 0 :(得分:0)

您似乎不允许var apigClientFactory = {}; apigClientFactory.newClient = function (config) { var apigClient = { }; if(config === undefined) { config = { accessKey: '', secretKey: '', sessionToken: '', region: '', apiKey: undefined, defaultContentType: 'application/json', defaultAcceptType: 'application/json' }; } ... 中的'stripeToken'参数。因为骆驼的情况可能有点繁琐,但要确保你允许这样的param:

order_params

如果没有这个,那么该参数为null,并且会给你一个Stripe失败。

答案 1 :(得分:0)

问题在于控制器中的这一部分:

    rescue Stripe::CardError => e
    flash[:error] = e.message
    redirect_to new_charge_path

您应该删除redirect_to new_charge_path,只需让Stripe呈现错误消息即可。无需重定向错误。 Stripe会为您处理错误处理(这是Stripe非常棒的原因之一)。

目前,每次成功购买后,您的redirect_to都被视为 路径。不仅仅是错误。

<强>更新

进一步查看您的代码。每次成功购买后,您似乎都没有redirect_to。所以无论如何,你应该删除redirect_to new_charge_path,因为它目前是=> e的任意对象。它可能看起来与错误处理有关,导致它低于该块,但事实上它没有。您应该在redirect_to successful_path正上方添加render :successrescue Stripe::CardError =>(例如)。然后让Stripe处理(或救援)尝试购买失败,如前所述。

答案 2 :(得分:0)

没有看到你的客户端代码,我无法确定 - 但听起来你的客户端代码试图POST到/charges/new - 这是不存在的 - 所以它失败了。我建议你将你的客户端代码更新到你想要处理的路由,然后从那里继续调试。

答案 3 :(得分:0)

尝试重新启动服务器以重新加载路由。运行rake routes | grep charges以验证您是否看到POST /charges/new

等等,我知道为什么。你应该 GET /charges/new POST /charges。向我们展示您的视图代码,特别是表单提交URL地址。

请参阅http://guides.rubyonrails.org/routing.html#crud-verbs-and-actions

答案 4 :(得分:0)

最后,我必须将表单上的代码更改为charge_path而不是new_charge_path,以便它会点击create操作。尽管这与Stripe文档有所不同,但最终还是起作用了。