【发布时间】:2015-02-24 17:42:02
【问题描述】:
我是 Rails 的新手,今天花了很多时间来解决以下问题。我正在将 Stripe 集成到我的 Rails 应用程序中。一切都很顺利,直到我尝试实际完成订单并且我在本地主机中收到以下错误
Stripe::InvalidRequestError in OrdersController#create
You must supply either a card or a customer id
我尝试了各种修复,但都无济于事,包括在整个应用程序上禁用 turbolink。我将非常感谢我能得到的任何帮助,因为我不确定如何从这里开始。我在下面附上了相关代码
订单控制器
def create
@order = Order.new(order_params)
@place = Place.find(params[:place_id])
@seller = @place.user
@order.place_id = @place.id
@order.buyer_id = current_user.id
@order.seller_id = @seller.id
Stripe.api_key = ENV["STRIPE_API_KEY"]
token = params[:stripeToken]
puts "Token is #{token}"
begin
charge = Stripe::Charge.create(
:amount => (@place.rating * 100).floor,
:currency => "usd",
:card => token
)
flash[:notice] = "Thanks for ordering!"
rescue Stripe::CardError => e
flash[:danger] = e.message
end
respond_to do |format|
if @order.save
format.html { redirect_to root_url }
format.json { render :show, status: :created, location: @order }
else
format.html { render :new }
format.json { render json: @order.errors, status: :unprocessable_entity }
end
end
end
# FURTHER DOWN BELOW
private
def set_order
@order = Order.find(params[:id])
end
def order_params
params.require(:order).permit(:address, :city, :state, :card_number, :card_code, :'data-stripe' )
end
end
咖啡脚本
jQuery ->
Stripe.setPublishableKey($('meta[name="stripe-key"]').attr('content'))
payment.setupForm()
payment =
setupForm: ->
$('#new_order').submit ->
$('input[type=submit]').attr('disabled', true)
Stripe.card.createToken($('#new_order'), payment.handleStripeResponse)
false
handleStripeResponse: (status, response) ->
if status == 200
$('#new_order').append($('<input-type="hidden" name="stripeToken"/>').val(response.id))
$('#new_order')[0].submit()
else
$('#stripe_error').text(response.error.message).show()
$('input[type=submit]').attr('disabled', false)
订单视图
<div class="form-group">
<div class="row">
<div class="col-md-8">
<%= label_tag :card_number, "Credit Card Number" %>
<%= text_field_tag :card_number, nil, {:name => nil, :'data-stripe' => "number" , class: "form-control" } %>
</div>
<div class="col-md-4">
<%= label_tag :card_code, "CVC" %>
<%= text_field_tag :card_code, nil, {:name => nil, :'data-stripe' => "cvc" , class: "form-control" } %>
</div>
</div>
</div>
<div class="form-group">
<%= label_tag nil, "Expiration Date" %>
<div class="row">
<div class="col-md-3">
<%= select_month nil, { use_two_digit_numbers: true }, { :name => nil, :'data-stripe' => "exp-month", class: "form-control"} %>
</div>
<div class="col-md-3">
<%= select_year nil, { start_year: Date.today.year, end_year: Date.today.year+10 }, { :name => nil, :'data-stripe' => "exp-year", class: "form-control"} %>
</div>
</div>
</div>
另外根据另一个建议,我添加了以下内容
puts "Token is #{token}"
到控制器,我得到
Token is _____
所以我在令牌所在的终端旁边得到一个空白区域。是token没有通过这里还是怎么回事?
谁能帮我解决这个问题?我不知道该怎么办了,今天我花了大半的时间来解决这个问题。谢谢!
【问题讨论】:
-
这是你 CoffeeScript 中真正的缩进吗?
-
@muistooshort 不,这只是 Stack Overflow 格式化它的方式,我给你截图imgur.com/lu6crxW
-
你真的在使用
<input-type="hidden"吗?不应该是<input type="hidden"吗? -
@muistooshort 哇,真不敢相信我错过了这个,这成功了......非常感谢!
-
@Richard Seviora,感谢您的回复,我认为在这种情况下,原因只是代表我的一个愚蠢的错字,我忽略了它并花了一整天的时间在别处寻找修复...
标签: javascript ruby-on-rails ruby ruby-on-rails-4 coffeescript