【问题标题】:Stripe::InvalidRequestError Must provide source or customerStripe::InvalidRequestError 必须提供来源或客户
【发布时间】:2017-07-28 17:14:43
【问题描述】:

订单控制器页面

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 => params[:stripeToken] 没有通过。令牌是否为空?

【问题讨论】:

  • 向我们展示日志。我怀疑params[:stripeToken]nil

标签: ruby-on-rails stripe-connect


【解决方案1】:

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

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

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

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

您可以做两件事来向您的客户收费,第一件事是创建您自己的表单,第二件事只是将其委托给条带脚本。

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

第二个很简单。我向非高级用户推荐它。你可以按照这个链接using checkout and rails中的说明来实现它。

我通常使用第二个选项,因为它只需要 5 分钟,然后您将繁重的工作委派给条带化。

【讨论】: