#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. Да, вы можете задать любой числовой код состояния или его символическое имя.