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
我不确定如何处理 :resource
或 customer
。我在网络上的其他材料中看到,有些人会创建客户。在其他网站上它说 :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',
})
我正在构建一个应用程序(基于在线资源)。您可以使用 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
我不确定如何处理 :resource
或 customer
。我在网络上的其他材料中看到,有些人会创建客户。在其他网站上它说 :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',
})