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

Rails - Stripe::InvalidRequestError (Must provide source or customer.)

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

我正在整合 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 and here: Charge full API Reference

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

我会留下我项目的github仓库,大家可以随意看看。我也在尝试处理转账和收件人。 Project Repository

谢谢。

docs 中所述,stripe 希望在创建费用时提及客户或来源。所以,你要么需要

  • 根据您收到的令牌在 stripe 上创建一个客户(如果您将来也想向该客户收费),并在创建收费时提及该客户,

    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"
    })
    

对于经历过 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',
})