(ошибка byebug) статус 200 *** Исключение ArgumentError: неверное количество аргументов (задано 1, ожидается 0)

#ruby-on-rails #ruby #stripe-payments

#ruby-on-rails #ruby #stripe-платежи

Вопрос:

В документах stripe я вижу некоторый код ruby, который условно возвращает статус 400, статус 200 и т.д.

 # Using Sinatra.
require 'sinatra'
require 'stripe'

set :port, 4242

# Set your secret key. Remember to switch to your live secret key in production!
# See your keys here: https://dashboard.stripe.com/account/apikeys
Stripe.api_key = 'sk_test_51HYHSFGtUKse83O9J4QeAib3cp8sHzGaOQRrnwvnghEzuYQKUCKEP3CHE3AIHe5ModevMK7TVAUCyJU0ADSwIUoX00qxZmBI9r'

# Uncomment and replace with a real secret. You can find your endpoint's
# secret in your webhook settings.
# webhook_secret = 'whsec_...'

post '/webhook' do
  payload = request.body.read
  sig_header = request.env['HTTP_STRIPE_SIGNATURE']

  event = nil

  # Verify webhook signature and extract the event.
  # See https://stripe.com/docs/webhooks/signatures for more information.
  begin
    event = Stripe::Webhook.construct_event(
      payload, sig_header, webhook_secret
    )
  rescue JSON::ParserError => e
    # Invalid payload.
    status 400
    return
  rescue Stripe::SignatureVerificationError => e
    # Invalid Signature.
    status 400
    return
  end

  if event['type'] == 'payment_intent.succeeded'
    payment_intent = event['data']['object']
    handle_successful_payment_intent(payment_intent)
  end

  status 200
end

def handle_successful_payment_intent(payment_intent)
  # Fulfill the purchase.
  puts payment_intent.to_s
end
 

status 200 Должен ли литерал быть допустимым кодом ruby или псевдокодом, который программист должен изменить на то, что он хочет, чтобы произошло при возникновении статуса 400? (т. Е. Следует ли удалять литерал status 400 и status 200 т. Д.?)

Причина запроса заключается в том, что, когда код доходит до точки, в которой он выполняется status 200 , он возвращает:

 (byebug) status 200
*** ArgumentError Exception: wrong number of arguments (given 1, expected 0)
 

Ответ №1:

Этот status метод можно использовать для установки возвращаемого кода состояния HTTP для действия в Sinatra, который является веб-фреймворком, используемым в приведенном вами примере.

Учитывая, что Sinatra — это веб-фреймворк, отличный от Rails, здесь это работает по-другому. С Rails эквивалентный вызов метода (в данном случае) будет head

 head 400
 

Обратите внимание, что многие другие средства доступа, используемые в примере, работают в Rails по-разному, включая получение значения заголовка запроса, чтение тела запроса и настройку контроллера e и маршрутов.

Комментарии:

1. Спасибо за очень полезный ответ. Просто для полноты картины, head xxx работает ли с каждым кодом состояния?

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