【问题标题】:Stripe Payment Error: Must provide source or customer条纹支付错误:必须提供来源或客户
【发布时间】:2019-09-20 10:43:47
【问题描述】:

我一直在尝试使用通过订阅模型附加到用户的卡信息来实现购物车的付款方式。虽然后者工作正常,但每当我尝试为购物车创建费用时,我都会收到“必须提供来源或错误”。

这里有一些代码可以开始。如果您需要更多,请告诉我。

checkouts_controller.rb

 def create

   customer = Stripe::Customer.create(
   source: params[:stripeToken],
   email: 'paying.user@example.com',
 )

   charge = Stripe::Charge.create(
   amount: current_cart.total,
   currency: 'usd',
   description: "Order ##{current_cart.id}"
 )

end

来自 Stripe Post Body 的错误日志

 {
   "amount": "9500",
   "currency": "usd",
   "description": "Order #1"
 }

来自响应正文

 {
   "error": {
   "code": "parameter_missing",
   "doc_url": "https://stripe.com/docs/error-codes/parameter-    missing",
   "message": "Must provide source or customer.",
   "type": "invalid_request_error"
 }

}

我使用的是标准的 4242 4242 4242 4242 卡,它通过我的订阅模式实际记录并附加到我的用户。当我去添加不同的卡时,诸如品牌、最后四位数字、到期月份和年份之类的卡信息都会出现在我的视图中。当我签入控制台时,stripe_id 也存在。

我检查了条带文档,并从https://stripe.com/docs/checkout/rails 的创建操作中复制了 sn-p,但这只会触发错误“无法向没有活动卡的客户收费”,尽管这张卡目前正在用于订阅。

那么我在哪里犯错了?

【问题讨论】:

  • 嗨@Grasshopper27,您正在创建一个客户,但没有在您的收费请求中传递它。您需要在 Charge 创建请求 [0] 中将 customer.id 作为 customer 参数传递。 source 是 Charge 创建的必需参数,除非您传入具有附加源的 Stripe Customer。 [0] stripe.com/docs/api/charges/create#create_charge-customer
  • 感谢您的快速响应,但现在我出现“无法向没有活动卡的客户收费”错误。这很奇怪,因为它是用于该用户订阅的同一张卡。
  • 嗨@Grasshopper27,看起来您创建的客户不是使用源创建的。您应该查看 Dashboard -> Logs 以查看 /customer 创建请求的请求正文,看看是否正在传递令牌。我还想指出,这个 Rails 文档有点过时,您应该尝试更新结帐以真正简化您的集成:stripe.com/docs/payments/checkout
  • 欣赏那里的两个指针,hmunoz。至少我对问题所在有了更好的了解,这比我之前能说的要多。我会做更多的挖掘,尝试一些事情,然后在早上重新开始。再次感谢。
  • @hmunoz,我能够利用结帐来解决使用源创建客户的问题。既然您的建议为我指明了正确的方向,我想为此感谢您。如果您愿意发表您的评论作为答案,我可以将其标记为正确的

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


【解决方案1】:

您需要确保您创建的customer 在charge create 调用中被传递:

   charge = Stripe::Charge.create(
     customer: customer,
     amount: current_cart.total,
     currency: 'usd',
     description: "Order ##{current_cart.id}"
   )

或者你可以直接使用源码作为:

   charge = Stripe::Charge.create(
     source: params[:stripeToken],
     amount: current_cart.total,
     currency: 'usd',
     description: "Order ##{current_cart.id}"
   )

选项和示例can be found here

【讨论】:

  • 感谢您的回复。您的回答可能会奏效,但我认为当 hmunoz 建议没有使用源创建客户时,他可能已经在做某事。我目前正在处理工作和家庭问题之间重做我的注册,当我得到工作时会发布更新,以防其他人遇到类似问题
  • 很公平,虽然这个答案是针对原始问题的:与charges 错误相关的错误。另一个答案是关于您遇到的第二个问题/错误。感谢您的更新!
【解决方案2】:

从评论转向答案

嗨@Grasshopper27,您创建的客户似乎不是使用源创建的。您应该查看 Dashboard -> Logs 以查看 /customer 创建请求的请求正文,并查看是否正在传递令牌。

我还想指出,这个 Rails 文档有点过时了,您应该尝试更新 Checkout 以真正简化您的集成:stripe.com/docs/payments/checkout

【讨论】:

    猜你喜欢
    • 2021-08-26
    • 2020-11-05
    • 2016-03-28
    • 2017-04-25
    • 2017-07-18
    • 2020-08-10
    • 1970-01-01
    • 1970-01-01
    • 2015-02-12
    相关资源
    最近更新 更多