Skip to content

RuntimeLLC/moneta-api

Repository files navigation

Gem Version Build Status Code Climate Test Coverage Inline docs

Описание MerchantAPI | RDoc | Список методов

moneta-api

МОНЕТА.РУ (MONETA.MerchantAPI.v2).

Различия между v1 и v2

В целом, версии совместимы друг с другом. Главные отличия:

  • v1 работает с Moneta.ru при помощи SOAP, v2 при помощи JSON.
  • В v1 числа являются строками, в v2 числами (например, значения id).
  • Изменились настройки фильтрации, добавилась настройка log_body, убрались log, pretty_print_xml
  • В аттрибутах ключ-значение (например, результат FindBankAccounts), значение всегда строка. Поэтому например значение поля is_international будет строка "false", а не Boolean false. Это связано с особенностями работы с Moneta.ru при помощи JSON.

Установка

Добавьте эти строки в Gemfile вашего приложения:

gem 'moneta-api'

И выполните:

$ bundle

Или установите напрямую:

$ gem install moneta-api

Использование

Есть несколько вариантов работы с сервисами монеты:

  1. API - работа происходит с использованием методов описанных в MONETA.MerchantAPI.v2
  2. FRONT - работа происходит напрямую с интерфейсом монеты.

Примеры работы c API

Получить данные счета

  require 'moneta/api'

  # получить данные счета
  service = Moneta::Api::Service.new('username', 'password', { demo_mode: true })

  response = service.find_account_by_id(10999)

  puts response.class.name
  # => 'Moneta::Api::Responses::FindAccountByIdResponse'
  puts "Баланс: #{ response.account.balance} #{ response.account.currency }"
  # => 'Баланс: 100 RUB'

Перевод на другой счет в Монета.ру

  transfer_request = Moneta::Api::Requests::TransferRequest.new.tap do |request|
    request.payee = 28988504
    request.payer = 10999
    request.amount = 10
    request.is_payer_amount = false
    request.payment_password = '123456'
  end

  response = service.transfer(transfer_request)

  # проверить данные счета
  response = service.find_account_by_id(10999)
  puts "Баланс после пополнения: #{ response.account.balance} #{ response.account.currency }"
  # => 'Баланс после пополнения: 110 RUB'

Вывод денег со счета в QIWI

  withdrawal_request = Moneta::Api::Requests::PaymentRequest.build(
    payer: 28988504,
    payee: Moneta::Constants::Withdrawal::QIWI,
    amount: 10,
    client_transaction: SecureRandom.uuid,
    payment_password: '123456',
    is_payer_amount: true
  )

  withdraw_to = Moneta::Api::Types::KeyValueAttribute.build(key: 'EXTERNALACCOUNTID', value: qiwi_account)

  withdrawal_info = Moneta::Api::Types::OperationInfo.new
  withdrawal_info.add_attribute(withdraw_to)

  withdrawal_request.operation_info = withdrawal_info

  service.payment(withdrawal_request)

Полный список методов, с помощью которых вы можете обратиться к MONETA.MerchantAPI.v2

Настройки

Logger

  Moneta::Api::Service.new('username', 'password', {
    logger: Rails.logger,
    log_body: true,
    filter: [
      [/("availableBalance":)([\d\.]{0,})/,'\1[FILTERED]'], # фильтр доступного баланса кошелька
      [/("balance":)([\d\.]{0,})/,'\1[FILTERED]'],          # фильтр баланса кошелька
      [/("protectionCode":)("\d+")/,'\1[FILTERED]']         # фильтр кода протекции
      # ...
    ]
  })

Доступны следующие настройки:

Название Описание
:demo_mode Выполнение операций на демо стенде.
:logger По умолчанию логирование не используется. Можно указать конкретный логгер, например Rails.logger.
:log_body Логировать ли тело запроса, по умолчанию выключено.
:open_timeout Таймаут подключения.
:filter Настройка фильтрации содержимого лога. Пароль пользователя фильтруется всегда.

Demo режим

Для использования тестового сервера (http://demo.moneta.ru) следует инициализировать сервис со специальным флагом

  Moneta::Api::Service.new('username', 'password', { demo_mode: true })

Примеры работы с FRONT (интерфейс монеты)

Получить квинтанцию оплаты в формате PDF

  require 'moneta/api'

  certificate = OpenSSL::X509::Certificate.new(File.read('cert_path'))
  private_key = OpenSSL::PKey::RSA.new(File.read('key_path'), 'password')

  service = Moneta::Front::Service.new(certificate, private_key, { demo_mode: true })

  service.get_receipt_pdf(468398)
  # => 'PDF файл'

Полный список методов, с помощью которых вы можете обратиться к интефейсу moneta.ru

Настройки

Для работы с интерфейсом монеты понадобиться получение сертификатов, получение подробно описано в MONETA.MerchantAPI.v2

Параметры:

Название Описание
certificate Сертификат пользователя, полученный от монеты.
private_key Приватный ключ, сгенерированный пользователем.
:demo_mode Выполнение операций на демо стенде.
:open_timeout Таймаут подключения.
:filter Настройка фильтрации содержимого лога.

Demo режим

Для использования тестового сервера (http://demo.moneta.ru) следует инициализировать сервис со специальным флагом

  Moneta::Front::Service.new(certificate, private_key, { demo_mode: true })

Contributing

  1. Стандартная схема с pull-request workflow
  2. Для локального запуска тестов необходимо создать конфигурационный файл со своими demo доступами
  cp spec/support/moneta.example.yml spec/support/moneta.yml