我正在电子商务/市场应用上处理卡支付。用户填写订单,包括送货地址,账单信息等,然后提交。如果填写的表单没有错误,则表单按预期工作,即保存订单并收取卡。Rails 4 - 出现表单错误时处理卡支付
问题:表单发生错误时(例如:zip为空),表单页面会返回错误消息。但是如果信用卡信息是正确的,用户就会被收取费用。只有在没有表单错误的情况下,我才需要卡才能充电。
这是我的订单控制器中的create
方法。我想过在respond_to块中移动条带电荷块,但这不起作用,因为只有在付款批准后才能保存订单。
由于这是一个市场,我还有一个付款转账区块,也就是说付款的一部分被转移给物品的卖家。此代码只应在处理付款并保存订单后运行。
def create
@order = Order.new(order_params)
Stripe.api_key = ENV["STRIPE_API_KEY"]
token = params[:stripeToken]
begin
charge = Stripe::Charge.create(
:amount => (@listing.price * 100).floor,
:currency => "usd",
:card => token,
:description => "Charge from ABC"
)
respond_to do |format|
if @order.save
format.html { redirect_to thankyou_path(:id => @order.id) }
format.json { render action: 'show', status: :created, location: @order }
AutoNotifier.orderconf_email(current_user, @order).deliver
AutoNotifier.sellerconf_email(current_user, @seller, @order).deliver
else
format.html { render action: 'new' }
format.json { render json: @order.errors, status: :unprocessable_entity }
end
end #end respond_to
if [email protected]?
transfer = Stripe::Transfer.create(
:amount => (((@listing.price * 97.1) - 30) * 0.8).floor, #converting to cents per stripe requirement. 80 percent in cents goes to seller.
:currency => "usd",
:recipient => @seller.recipient
)
end #end transfer
rescue Stripe::CardError => e
flash[:danger] = e.message
end #end rescue
end #end begin
end #end create
您是否找到解决方案? – Tobias 2015-12-17 14:31:33
是的,我使用了Deep发布的解决方案的变体。回复较晚,抱歉。我不在这里。 – Moosa 2016-01-13 18:07:56