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

Gra*_*r27 2 ruby-on-rails stripe-payments ruby-on-rails-5

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

这是一些入门代码。如果您需要更多,请告诉我。

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
Run Code Online (Sandbox Code Playgroud)

来自 Stripe Post Body 的错误日志

 {
   "amount": "9500",
   "currency": "usd",
   "description": "Order #1"
 }
Run Code Online (Sandbox Code Playgroud)

从响应体

 {
   "error": {
   "code": "parameter_missing",
   "doc_url": "https://stripe.com/docs/error-codes/parameter-    missing",
   "message": "Must provide source or customer.",
   "type": "invalid_request_error"
 }
Run Code Online (Sandbox Code Playgroud)

}

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

我已经检查了条带文档并从https://stripe.com/docs/checkout/rails复制了他们创建操作中的代码段但这只会触发错误“无法向没有活动卡的客户收费”,尽管这张卡是当前用于订阅。

那么我在哪儿瞎扯了?

Mát*_*áté 5

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

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

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

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

可以在此处找到选项和示例