{"id":21091491,"url":"https://github.com/runtimellc/moneta-api","last_synced_at":"2025-06-11T12:08:43.977Z","repository":{"id":29645418,"uuid":"33186940","full_name":"RuntimeLLC/moneta-api","owner":"RuntimeLLC","description":"МОНЕТА.РУ (MONETA.MerchantAPI.v2)","archived":false,"fork":false,"pushed_at":"2017-11-08T08:38:17.000Z","size":2763,"stargazers_count":8,"open_issues_count":1,"forks_count":4,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-26T05:01:46.814Z","etag":null,"topics":["moneta","money","payanyway","payment-methods","payments","ruby"],"latest_commit_sha":null,"homepage":null,"language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/RuntimeLLC.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-03-31T13:28:52.000Z","updated_at":"2019-06-13T04:35:31.000Z","dependencies_parsed_at":"2022-09-03T18:01:24.619Z","dependency_job_id":null,"html_url":"https://github.com/RuntimeLLC/moneta-api","commit_stats":null,"previous_names":[],"tags_count":28,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RuntimeLLC%2Fmoneta-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RuntimeLLC%2Fmoneta-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RuntimeLLC%2Fmoneta-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RuntimeLLC%2Fmoneta-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/RuntimeLLC","download_url":"https://codeload.github.com/RuntimeLLC/moneta-api/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254538461,"owners_count":22087867,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["moneta","money","payanyway","payment-methods","payments","ruby"],"created_at":"2024-11-19T21:46:31.996Z","updated_at":"2025-05-16T13:31:49.596Z","avatar_url":"https://github.com/RuntimeLLC.png","language":"Ruby","readme":"[![Gem Version](https://badge.fury.io/rb/moneta-api.svg)](http://badge.fury.io/rb/moneta-api)\n[![Build Status](https://travis-ci.org/RuntimeLLC/moneta-api.svg?branch=master)](https://travis-ci.org/RuntimeLLC/moneta-api)\n[![Code Climate](https://codeclimate.com/github/ssnikolay/moneta-api/badges/gpa.svg)](https://codeclimate.com/github/ssnikolay/moneta-api)\n[![Test Coverage](https://codeclimate.com/github/ssnikolay/moneta-api/badges/coverage.svg)](https://codeclimate.com/github/ssnikolay/moneta-api)\n[![Inline docs](http://inch-ci.org/github/ssnikolay/moneta-api.svg?branch=master)](http://inch-ci.org/github/ssnikolay/moneta-api)\n\n[Описание MerchantAPI](https://www.moneta.ru/doc/MONETA.MerchantAPI.v2.ru.pdf) | [RDoc](http://www.rubydoc.info/gems/moneta-api) |\n[Список методов](http://www.rubydoc.info/gems/moneta-api/Moneta/Api/ServiceMethods)\n\n# moneta-api\n\nМОНЕТА.РУ (MONETA.MerchantAPI.v2).\n\n## Различия между v1 и v2\n\nВ целом, версии совместимы друг с другом. Главные отличия:\n\n- v1 работает с Moneta.ru при помощи SOAP, v2 при помощи JSON.\n- В v1 числа являются строками, в v2 числами (например, значения `id`).\n- Изменились настройки фильтрации, добавилась настройка `log_body`, убрались `log`, `pretty_print_xml`\n- В аттрибутах ключ-значение (например, результат `FindBankAccounts`), значение всегда строка. \n  Поэтому например значение поля `is_international` будет строка `\"false\"`, а не Boolean `false`. \n  Это связано с особенностями работы с Moneta.ru при помощи JSON.\n\n## Установка\n\nДобавьте эти строки в Gemfile вашего приложения:\n\n```ruby\ngem 'moneta-api'\n```\n\nИ выполните:\n\n    $ bundle\n\nИли установите напрямую:\n\n    $ gem install moneta-api\n\n## Использование\nЕсть несколько вариантов работы с сервисами монеты:\n1. API - работа происходит с использованием методов описанных в MONETA.MerchantAPI.v2\n2. FRONT - работа происходит напрямую с интерфейсом монеты.\n\n### Примеры работы c API\n\n#### Получить данные счета\n\n```ruby\n  require 'moneta/api'\n\n  # получить данные счета\n  service = Moneta::Api::Service.new('username', 'password', { demo_mode: true })\n\n  response = service.find_account_by_id(10999)\n\n  puts response.class.name\n  # =\u003e 'Moneta::Api::Responses::FindAccountByIdResponse'\n  puts \"Баланс: #{ response.account.balance} #{ response.account.currency }\"\n  # =\u003e 'Баланс: 100 RUB'\n```\n\n#### Перевод на другой счет в Монета.ру\n\n```ruby\n  transfer_request = Moneta::Api::Requests::TransferRequest.new.tap do |request|\n    request.payee = 28988504\n    request.payer = 10999\n    request.amount = 10\n    request.is_payer_amount = false\n    request.payment_password = '123456'\n  end\n\n  response = service.transfer(transfer_request)\n\n  # проверить данные счета\n  response = service.find_account_by_id(10999)\n  puts \"Баланс после пополнения: #{ response.account.balance} #{ response.account.currency }\"\n  # =\u003e 'Баланс после пополнения: 110 RUB'\n```\n\n#### Вывод денег со счета в QIWI\n\n```ruby\n  withdrawal_request = Moneta::Api::Requests::PaymentRequest.build(\n    payer: 28988504,\n    payee: Moneta::Constants::Withdrawal::QIWI,\n    amount: 10,\n    client_transaction: SecureRandom.uuid,\n    payment_password: '123456',\n    is_payer_amount: true\n  )\n\n  withdraw_to = Moneta::Api::Types::KeyValueAttribute.build(key: 'EXTERNALACCOUNTID', value: qiwi_account)\n\n  withdrawal_info = Moneta::Api::Types::OperationInfo.new\n  withdrawal_info.add_attribute(withdraw_to)\n\n  withdrawal_request.operation_info = withdrawal_info\n\n  service.payment(withdrawal_request)\n```\n\n**Полный [список методов](http://www.rubydoc.info/gems/moneta-api/Moneta/Api/ServiceMethods), с помощью которых вы можете обратиться к MONETA.MerchantAPI.v2**\n\n### Настройки\n\n#### Logger\n\n```ruby\n  Moneta::Api::Service.new('username', 'password', {\n    logger: Rails.logger,\n    log_body: true,\n    filter: [\n      [/(\"availableBalance\":)([\\d\\.]{0,})/,'\\1[FILTERED]'], # фильтр доступного баланса кошелька\n      [/(\"balance\":)([\\d\\.]{0,})/,'\\1[FILTERED]'],          # фильтр баланса кошелька\n      [/(\"protectionCode\":)(\"\\d+\")/,'\\1[FILTERED]']         # фильтр кода протекции\n      # ...\n    ]\n  })\n```\n\nДоступны следующие настройки:\n\n Название                  | Описание\n---------------------------|:-----------------------------------------------------------\n`:demo_mode`               | Выполнение операций на демо стенде.\n`:logger`                  | По умолчанию логирование не используется. Можно указать конкретный логгер, например `Rails.logger`.\n`:log_body`                | Логировать ли тело запроса, по умолчанию выключено.\n`:open_timeout`            | Таймаут подключения.\n`:filter`                  | Настройка фильтрации содержимого лога. Пароль пользователя фильтруется всегда.\n\n#### Demo режим\nДля использования тестового сервера (http://demo.moneta.ru) следует инициализировать сервис со специальным флагом\n\n```ruby\n  Moneta::Api::Service.new('username', 'password', { demo_mode: true })\n```\n\n\n### Примеры работы с FRONT (интерфейс монеты)\n\n#### Получить квинтанцию оплаты в формате PDF\n```ruby\n  require 'moneta/api'\n\n  certificate = OpenSSL::X509::Certificate.new(File.read('cert_path'))\n  private_key = OpenSSL::PKey::RSA.new(File.read('key_path'), 'password')\n\n  service = Moneta::Front::Service.new(certificate, private_key, { demo_mode: true })\n\n  service.get_receipt_pdf(468398)\n  # =\u003e 'PDF файл'\n```\n\n**Полный [список методов](http://www.rubydoc.info/gems/moneta-api/Moneta/Front/ServiceMethods), с помощью которых вы можете обратиться к интефейсу moneta.ru**\n\n### Настройки\n**Для работы с интерфейсом монеты понадобиться получение сертификатов, получение подробно описано в [MONETA.MerchantAPI.v2](https://www.moneta.ru/doc/MONETA.MerchantAPI.v2.ru.pdf)**\n\nПараметры:\n\n Название                  | Описание\n---------------------------|:----------------------------------------------\n`certificate`              | Сертификат пользователя, полученный от монеты.\n`private_key`              | Приватный ключ, сгенерированный пользователем.\n`:demo_mode`               | Выполнение операций на демо стенде.\n`:open_timeout`            | Таймаут подключения.\n`:filter`                  | Настройка фильтрации содержимого лога.\n\n#### Demo режим\nДля использования тестового сервера (http://demo.moneta.ru) следует инициализировать сервис со специальным флагом\n\n```ruby\n  Moneta::Front::Service.new(certificate, private_key, { demo_mode: true })\n```\n\n## Contributing\n\n1. Стандартная схема с pull-request workflow\n2. Для локального запуска тестов необходимо создать конфигурационный файл со своими demo доступами\n```bash\n  cp spec/support/moneta.example.yml spec/support/moneta.yml\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fruntimellc%2Fmoneta-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fruntimellc%2Fmoneta-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fruntimellc%2Fmoneta-api/lists"}