【问题标题】:Rails 4 and Stripe Card Processing ErrorRails 4 和 Stripe Card 处理错误
【发布时间】: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
  • 你真的在使用&lt;input-type="hidden"吗?不应该是&lt;input type="hidden"吗?
  • @muistooshort 哇,真不敢相信我错过了这个,这成功了......非常感谢!
  • @Richard Seviora,感谢您的回复,我认为在这种情况下,原因只是代表我的一个愚蠢的错字,我忽略了它并花了一整天的时间在别处寻找修复...

标签: javascript ruby-on-rails ruby ruby-on-rails-4 coffeescript


【解决方案1】:

createToken 方法需要a JS object with number and expiry date values。我不相信你会把那些寄给它。尝试显式传递这些,并在浏览器调试器中的方法之后放置断点,看看会发生什么。

【讨论】:

    猜你喜欢
    • 2013-11-04
    • 2014-05-11
    • 2020-03-18
    • 1970-01-01
    • 2015-07-01
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    • 2021-07-13
    相关资源
    最近更新 更多