holyketzer/pscb_integration

View on GitHub
lib/pscb_integration/extended_api_error.rb

Summary

Maintainability
A
0 mins
Test Coverage
module PscbIntegration
  class ExtendedApiError < ApiError
    ERROR_CODES = {
      0 => 'Платеж обработан успешно',
      1 => 'Платеж находится в обработке',
      2 => 'Платеж ожидает подтверждения одноразовым паролем',
      3 => 'Для завершения привязки рекуррентного платежа необходимо передать сумму, заблокированную на карте Клиента',
      -1 => 'Транзакция отвергнута ПЦ  Требуется анализ subCode',
      -2 => 'Транзакция отвергнута СИСТЕМОЙ  Требуется анализ subCode',
      -3 => 'Неверные параметры платежа, платеж не прошел проверку у поставщика услуги',
      -4 => 'Карта не привязана: возникает, если карта, с которой пытаются сделать оплату, не привязана к веб-кошельку или услуге, а это требуется, согласно настройке услуги',
      -5 => 'Неизвестная ошибка, транзакция отвергнута',
      -14 => 'Не верная SMS подтверждения платежа для Веб-кошелька',
      -15 => 'Рекуррентные платежи не поддерживаются',
      -16 => 'Некорректные параметры для рекуррентного платежа',
      -17 => 'Подпись не верна',
      -18 => 'Нарушение лимитов СИСТЕМЫ',
      -19 => 'Попытка фрода',
    }.freeze

    ERROR_SUB_CODES = {
      100 => 'Сервис недоступен',
      101 => 'Регламентные работы',
      102 => 'Недоступен шлюз в МПС',
      103 => 'Технический сбой при обработке платежа, пользователь пытался задвоить транзакцию (нажал F5 в браузере)',
      104 => 'Технический сбой при обработке платежа, разрушилась сессия на веб-сервере',
      105 => 'Не прошла валидация полей',
      106 => 'Не передан телефон (для услуги, оплачиваемой через веб-кошелек)',
      -20 => 'Expired transaction',
      -19 => 'Authentication failed',
      -17 => 'Access denied',
      -16 => 'Terminal is locked, please try again',
      -9 => 'Error in card expiration date field',
      -4 => 'Server is not responding',
      -3 => 'No or Invalid response received',
      -2 => 'Bad CGI request',
      0 => 'Approved',
      1 => 'Call your bank',
      3 => 'Invalid merchant',
      4 => 'Your card is restricted',
      5 => 'Transaction declined',
      6 => 'Error - retry',
      12 => 'Invalid transaction',
      13 => 'Invalid amount',
      14 => 'No such card',
      15 => 'No such card/issuer',
      19 => 'Re-enter transaction',
      20 => 'Invalid response',
      30 => 'Format error',
      41 => 'Lost card',
      43 => 'Stolen card',
      51 => 'Not sufficient funds',
      54 => 'Expired card',
      55 => 'Incorrect PIN',
      57 => 'Not permitted to client',
      58 => 'Not permitted to merchant',
      61 => 'Exceeds amount limit',
      62 => 'Restricted card',
      65 => 'Exceeds frequency limit',
      75 => 'PIN tries exceeded',
      78 => 'Reserved',
      82 => 'Time-out at issuer',
      89 => 'Authentication failure',
      91 => 'Issuer unavailable',
      93 => 'Violation of law',
      96 => 'System malfunction',
    }.freeze

    attr_reader :error_sub_code, :description

    def initialize(error_code:, error_sub_code:, description:, body:)
      super(error_code: error_code, body: body)
      @error_sub_code = error_sub_code
      @description = description
    end

    def to_s
      "#{description} #{ERROR_CODES[error_code]} #{ERROR_SUB_CODES[error_sub_code]} #{body}"
    end
  end
end