Как настроить параметр ответа 422 с помощью гема stripe_event? - PullRequest
0 голосов
/ 14 января 2020

Я использую gem stripe_event с stripe webhook.

Мой начальный код:

config / initializers / stripe.rb

StripeEvent.configure do |events|
  events.subscribe 'checkout.session.completed', StripeCheckoutSessionService.new
end

app / services / stripe_checkout_session_service. rb

class StripeCheckoutSessionService
  def call(event)
    order = Order.find_by(checkout_session_id: event.data.object.id)
    order.update(state: "paid")
  end
end

Моя проблема в том, что если порядок равен нулю, у меня ошибка 500, и вместо этого я хочу получить ошибку 422.

Я пытаюсь это сделать:

app / services / stripe_checkout_session_service.rb

class StripeCheckoutSessionService
  def call(event)
    order = Order.find_by(checkout_session_id: event.data.object.id)
    if order
      order.update(state: "paid")
      head :accepted
    else
      head :unprocessable_entity
    end
  end
end

заголовок не распознается службой, вместо этого я пытаюсь вернуть строку и вернуть заголовок непосредственно в блок, но сейчас я заблокирован ...

У кого-нибудь есть идеи для меня?

1 Ответ

0 голосов
/ 14 января 2020

Если вы хотите вернуть строку, вероятно, вы можете сделать это:

class StripeCheckoutSessionService
  def call(event)
    order = Order.find_by(checkout_session_id: event.data.object.id)
    if order
      order.update(state: "paid")
      "Successfully updated!" # or do this { status: 400, msg: 'success' }
    else
      "Error occurred!" # or do this { status: 422, msg: 'unprocessable_entity' }
    end
  end
end

Не пробовал это, но должно работать.

...