Ошибка оплаты: необходимо указать источник или клиента - PullRequest
1 голос
/ 02 мая 2019

Я пытался реализовать способ оплаты для корзины покупок, используя информацию о карте, прикрепленную к пользователю через модель подписки. И хотя последний работает нормально, всякий раз, когда я пытаюсь взимать плату за корзину, я получаю «Необходимо указать источник или ошибку».

Вот код для начала. Дайте мне знать, если вам нужно больше.

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

 {
   "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 ]

3 голосов
/ 02 мая 2019

Вы должны убедиться, что customer, который вы создаете, передается при вызове создания оплаты:

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

И варианты, и примеры можно найти здесь

1 голос
/ 04 мая 2019

переход от комментария к ответу

Привет @ Grasshopper27, похоже, что созданный вами клиент не создается с источником. Вы должны заглянуть в Dashboard -> Logs, чтобы просмотреть тело запроса на создание запроса / customer и посмотреть, передается ли токен.

Я также хотел бы отметить, что этот документ Rails немного устарел, вы должны попробовать обновленную Checkout, чтобы действительно упростить вашу интеграцию: stripe.com/docs/payments/checkout

...