Git Product home page Git Product 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

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

Привет!

Код из примера работает как ожидается, но следующий код вызывает ошибку.
Параметр 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>'

Оплата услуг

Привет!

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

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

Привет.

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

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

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.