首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >条纹信用卡处理中的错误处理

条纹信用卡处理中的错误处理
EN

Code Review用户
提问于 2015-05-14 00:47:42
回答 1查看 2.2K关注 0票数 4

我有一个使用Stripe处理信用卡的rails应用程序。目前,在事务发生的任何地方都会处理几个异常。下面的代码目前正在11个地方使用。在所有地方,除了传递给stripe_error的消息外,这基本上是一样的。是否有可能创建一个可重用的代码片段,可以在所有这些地方使用?

代码语言:javascript
复制
begin
  charge = Stripe::Charge.retrieve(@purchase.stripe_charge_id)
  resp = charge.capture(amount: fee.cancellation_fee,
                        receipt_email: @customer.email)
  @purchase.update_attributes(
    accepted_charge: true,
    stripe_transaction_id: resp['balance_transaction']
  )
  logger.info("Charged customer for cancellation #{@customer.id} #{@purchase.total_fee}")
  event('cancellation_charge', 'purchase_id', @purchase.id,
        fee: @purchase.total_fee, customer_id: @purchase.customer_id,
        provider_id: @purchase.provider_id)
  purchase_set_md5(@purchase.id)
rescue Stripe::CardError => e
  @err = stripe_error(e, 'cancellation', fee.cancellation_fee)
  @purchase.update_attributes(
    accepted_charge: false,
    charge_errors: message,
    stripe_transaction_id: '',
    status: "Cancellation fee charge did not go through #{@err['message']}"
  )
  purchase_set_md5(@purchase.id)
  render :err_show, status: :payment_required, json: @err
  return
rescue Stripe::InvalidRequestError => e
  @err = stripe_error(e, 'cancellation_invalid_request', fee.cancellation_fee)
  render :err_show, status: :payment_required, json: @err
  return
rescue Stripe::AuthenticationError => e
  @err = stripe_error(e, 'cancellation_authentication', fee.cancellation_fee)
  render :err_show, status: :payment_required, json: @err
  return
rescue Stripe::APIConnectionError => e
  @err = stripe_error(e, 'cancellation_api_connect', fee.cancellation_fee)
  render :err_show, status: :payment_required, json: @err
  return
rescue Stripe::StripeError => e
  @err = stripe_error(e, 'cancellation_generic error', fee.cancellation_fee)
  render :err_show, status: :payment_required, json: @err
  return
rescue => e
  @err = stripe_error(e, 'cancellation_something_else', fee.cancellation_fee)
  render :err_show, status: :payment_required, json: @err
  return
end

stripe_error

代码语言:javascript
复制
  def stripe_error(e, charge_type, fee = 0)
    logger.error("e #{e}")
    err = {
      charge_type: charge_type,
      errcode: ERR_STRIPE_ERR,
      message: "#{e}"
    }
    event(charge_type, 'error', "#{e}")
    logger.error("Charging error on #{charge_type} purchase for #{fee} ")
    logger.error("type #{e} ")
    err
  end
EN

回答 1

Code Review用户

回答已采纳

发布于 2015-07-08 02:46:58

您的第一步将是将实际呈现的错误消息与拯救异常分开:

代码语言:javascript
复制
def render_errors(errors, template: :err_show,  status: :payment_required)
  render template, status: status, json: errors
end

那么,您能将大多数例外情况分组吗:

代码语言:javascript
复制
rescue Stripe::InvalidRequestError, 
       Stripe::AuthenticationError
       Stripe::APIConnectionError,
       Stripe::StripeError => e

render_errors( stripe_error(e) )

一个好主意是将错误的生成和日志记录分开。

票数 1
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/90702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档