Rails - Stripe :: InvalidRequestError(必须提供源或客户。)

时间:2015-10-06 21:43:49

标签: ruby-on-rails heroku stripe-payments

我正在构建一个应用程序(基于在线资源)。您可以使用设计注册或登录。然后,您可以购买产品。或者制作自己的清单并销售产品。

我正在整合Stripe。当我创建Charge时,我在控制台中收到此错误:Stripe::InvalidRequestError (Must provide source or customer.)

以下是充电操作的orders_controller.rb的代码:

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

begin
  charge = Stripe::Charge.create(
    :amount => (@listing.price * 100).floor,
    :currency => "usd",
    :card => token
    )
  flash[:notice] = "Thanks for ordering!"
rescue Stripe::CardError => e
  flash[:danger] = e.message
end

当然,我在这里查看Stripe API文档:Charge documentation example并在此处:Charge full API Reference

我不确定如何处理:resourcecustomer。我在网络上的其他材料中看到有些人创造了一个客户。在其他网站上,它说:card已被弃用,所以我有点困惑。

我将离开我项目的github存储库,随时查看。我也试图处理转账和收款人。 Project Repository

感谢。

2 个答案:

答案 0 :(得分:9)

docs中所述,条带要求在创建费用时提及客户或来源。所以,你需要

  • 从您收到的令牌创建条带客户(如果您希望将来也向该客户收费),并在创建费用时提及该客户,

    customer = Stripe::Customer.create(source: params[:stripeToken])
    
    charge = Stripe::Charge.create({
      :amount => 400,
      :currency => "usd",
      :customer => customer.id,
      :description => "Charge for test@example.com"
    })
    
  • 或者,如果您不想创建客户,请直接提及收到的令牌作为来源,

    Stripe::Charge.create({
      :amount => 400,
      :currency => "usd",
      :source => params[:stripeToken],
      :description => "Charge for test@example.com"
    })
    

答案 1 :(得分:0)

对于经历Stripe docs的任何人,您可能会有这样的事情(使用现有帐户)

account_links = Stripe::AccountLink.create({
  account: 'acct_1032D82eZvKYlo2C',
  refresh_url: 'https://example.com/reauth',
  return_url: 'https://example.com/return',
  type: 'account_onboarding',
})

如果是这样,只需将其更改为如下所示(即包括您在上一步中创建的实际account.id):

account_links = Stripe::AccountLink.create({
  account: account.id,
  refresh_url: 'https://example.com/reauth',
  return_url: 'https://example.com/return',
  type: 'account_onboarding',
})