Stripe :: InvalidRequestError必须提供源或客户

时间:2017-07-28 07:38:50

标签: ruby-on-rails stripe-connect

订购控制器页面

begin
    Stripe.api_key = ENV["STRIPE_API_KEY"]
    token = params[:stripeToken] 

      charge = Stripe::Charge.create(
        :amount => (@listing.price * 100).floor,
        :currency => "usd", 
        :source => params[:stripeToken],
        :destination => @seller.recipient

      )
      flash[:notice] = "Thanks for ordering!"
    rescue Stripe::CardError => e
      flash[:danger] = e.message
    end

order.js.coffee

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)

我不确定为什么source =&gt;当我检查我的条带帐户中的日志时,params [:stripeToken]没有通过。令牌是否为空?

1 个答案:

答案 0 :(得分:0)

通常当您收到此错误是因为可发布的密钥不在您的表单中,因此当您将表单发送到条带时,它不会识别您并且它不会将您发回给令牌。

向客户收费的过程就是这样。

1.-在您的网站中,您告诉用户在表单中键入他的卡信息(在本地托管或仅由条带脚本创建)。

2.-用户提交表格后。使用您的可发布密钥将信息提交给条带服务器。您从服务器收到带有令牌的响应。此令牌将转发到您控制器中的操作,并且由于链接到您的帐户,您可以创建客户,收费或将用户加入计划。这是'params [:stripeToken]'。卡信息永远不会到达您的控制器,您只需收到此令牌。

您可以为客户收取两件费用,第一件是创建自己的表单,第二件就是将其委托给条带脚本。

第一个更棘手,因为条带不时更新它们的api。它需要一些js及其api的知识。例如,Stripe v3与v2不同。允许更多的合理化,但需要更多的js知识。可以在stripe elements中找到有关如何配置的信息和示例。

第二个很容易。我推荐它不是高级用户。您只需按照此链接using checkout and rails中的说明即可实施。

我通常使用第二个选项,因为它只花了5分钟,你将辛勤工作委托给条纹。