Как обрабатывать ошибки рендеринга json из сетевых запросов, сделанных гемами в Rails? - PullRequest
0 голосов
/ 19 сентября 2018

Я использую Stripe для обработки платежей по подписке.У меня есть PaymentsController, который обрабатывает, когда пользователь вводит данные своей кредитной карты.Stripe создает пользователя и присоединяет к нему подписку.Камень Stripe обрабатывает эти сетевые запросы.Тем не менее, я хотел бы отобразить ошибку json, если Stripe обнаружит ошибку в любой момент во время запроса на создание пользователя или присоединение подписки.Есть ли способ обрабатывать ошибки сетевых запросов по гемам?

payment_controller.rb

class Api::V1::PaymentsController < ApplicationController
  before_action :authenticate_user!

  def create
     Stripe.api_key = ENV['STRIPE_SECRET_KEY_TEST']

    // render an error if there is an issue creating a customer
    customer = Stripe::Customer.create({
      email: current_user.email,
      source: request.params[:id]
    })

    stripe_plan = ENV['STRIPE_PLAN_ID_TEST']

    // render an error if there is an issue creating a subscription
    subscription = Stripe::Subscription.create({
      customer: customer.id,
      items: [{ plan: stripe_plan }],
    })

    current_user.subscription_plan = 1
    current_user.save

    if current_user.save
      render json: { 'success': true }, status: 200
    else
      render json: { 'error': 'Some error with saving user here' }, status: 500
    end
  end
end

1 Ответ

0 голосов
/ 19 сентября 2018

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

https://stripe.com/docs/api/ruby#error_handling

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

// render an error if there is an issue creating a customer
begin
  customer = Stripe::Customer.create({
    email: current_user.email,
    source: request.params[:id]
  })
rescue ::Stripe::StripeError => e
  render json: { 'error': 'some error'}
  return 
end

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...