Project

moneta-api

0.01
Low commit activity in last 3 years
A long-lived project that still receives updates
МОНЕТА.РУ (MONETA.MerchantAPI.v2).
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
 Dependencies

Development

Runtime

~> 0.11.0
>= 2.16
 Project Readme

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