Coder Social home page Coder Social logo

moneta-api's Introduction

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

moneta-api's People

Contributors

kamsharipova avatar llxff avatar ssnickolay avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

moneta-api's Issues

Пример вывода на QIWI

Привет.

Хотелось бы больше примеров кода для вывода с кошелька Монеты.

Например в данный момент мне нужно вывести на QIWI и приходится разбирать код "по косточкам", чтобы понять как это сделать :)

Оплата услуг

Привет!

Не могу разобраться - можно ли с помощью API оплачивать услуги?
Например как оплатить услуги мобильного оператора?

Ошибка при получении деталей операции

Привет!

Код из примера работает как ожидается, но следующий код вызывает ошибку.
Параметр id беру из существующей операции (продакшен) - целое число.
Что я делаю не так?

def get_operation(id)
  service = Moneta::Api::Service.new('user', 'password')
  service.get_operation_details_by_id(id)
end
Moneta::Api::HTTPException: <html>    <head>        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">        <title>Страница не найдена / Page not found</title>    </head>    <body>        <h1>Страница не найдена / Page not found</h1>    </body></html>
	from /home/vagrant/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/moneta-api-1.12.7/lib/moneta/api/service_methods.rb:220:in `rescue in call'
	from /home/vagrant/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/moneta-api-1.12.7/lib/moneta/api/service_methods.rb:199:in `call'
	from /home/vagrant/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/moneta-api-1.12.7/lib/moneta/api/service_methods.rb:91:in `get_operation_details_by_id'
	from /vagrant/app/models/backend/payment_transactions/qiwi_withdrawal.rb:30:in `check_operation'
	from (irb):8
	from /home/vagrant/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/railties-5.0.1/lib/rails/commands/console.rb:65:in `start'
	from /home/vagrant/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/railties-5.0.1/lib/rails/commands/console_helper.rb:9:in `start'
	from /home/vagrant/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/railties-5.0.1/lib/rails/commands/commands_tasks.rb:78:in `console'
	from /home/vagrant/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/railties-5.0.1/lib/rails/commands/commands_tasks.rb:49:in `run_command!'
	from /home/vagrant/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/railties-5.0.1/lib/rails/commands.rb:18:in `<top (required)>'
	from bin/rails:4:in `require'
	from bin/rails:4:in `<main>'

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.