条纹付款错误:必须提供来源或客户

时间:2019-05-01 22:28:07

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

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

这里有一些入门代码。让我知道您是否需要更多。

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复制了其创建操作中的代码段,但这仅触发了错误“无法向没有有效卡的客户收费”,尽管该卡当前正用于订阅。

那我到哪里去了?

2 个答案:

答案 0 :(得分:3)

您需要确保将您创建的from django.utils.crypto import get_random_string otp = get_random_string(6, allowed_chars='0123456789') 传递到费用创建调用中:

customer

或者您可以直接将源用作:

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

选项和示例can be found here

答案 1 :(得分:1)

  

从评论移到答案

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

我还要指出,该Rails文档有些过时了,您应该尝试使用更新的Checkout来真正简化集成:stripe.com/docs/payments/checkout