{"id":21091493,"url":"https://github.com/runtimellc/payanyway","last_synced_at":"2025-05-16T13:31:54.151Z","repository":{"id":28863745,"uuid":"32387892","full_name":"RuntimeLLC/payanyway","owner":"RuntimeLLC","description":"Универсальное решение для приема платежей в сети Интернет","archived":false,"fork":false,"pushed_at":"2017-12-27T12:58:09.000Z","size":273,"stargazers_count":9,"open_issues_count":0,"forks_count":9,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-04-04T01:51:04.509Z","etag":null,"topics":["moneta","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":null,"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-17T10:51:16.000Z","updated_at":"2023-12-19T17:37:36.000Z","dependencies_parsed_at":"2022-09-05T08:51:31.043Z","dependency_job_id":null,"html_url":"https://github.com/RuntimeLLC/payanyway","commit_stats":null,"previous_names":[],"tags_count":16,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RuntimeLLC%2Fpayanyway","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RuntimeLLC%2Fpayanyway/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RuntimeLLC%2Fpayanyway/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RuntimeLLC%2Fpayanyway/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/RuntimeLLC","download_url":"https://codeload.github.com/RuntimeLLC/payanyway/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254538475,"owners_count":22087869,"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","payanyway","payment-methods","payments","ruby"],"created_at":"2024-11-19T21:46:34.989Z","updated_at":"2025-05-16T13:31:53.698Z","avatar_url":"https://github.com/RuntimeLLC.png","language":"Ruby","readme":"[![Gem Version](https://badge.fury.io/rb/payanyway.svg)](http://badge.fury.io/rb/payanyway)\n[![Build Status](https://travis-ci.org/RuntimeLLC/payanyway.svg?branch=master)](https://travis-ci.org/RuntimeLLC/payanyway)\n[![Code Climate](https://codeclimate.com/github/ssnikolay/payanyway.svg)](https://codeclimate.com/github/ssnikolay/payanyway)\n[![Test Coverage](https://codeclimate.com/github/ssnikolay/payanyway/badges/coverage.svg)](https://codeclimate.com/github/ssnikolay/payanyway)\n\n# Payanyway\n\nЭтот gem предназначен для быстрой интеграции платежного шлюза [payanyway](http://payanyway.ru) в ваше ruby приложение.\n\nПри возникновении вопросов следует ознакомиться с [документацией к шлюзу](http://moneta.ru/doc/MONETA.Assistant.ru.pdf).\n\n- [Установка](#installation)\n- [Подключение](#setup)\n- [Использование](#usage)\n    - [Запрос на оплату](#payment_url)\n    - [Получение URL для отображения виджета оплаты](#widget_url)\n    - [Специальные URL'ы](#special_urls)\n        - [Check URL](#check_url)\n        - [Return URL и InProgress URL](#return_url)\n    - [Расшифровка параметров](#params)\n        - [Автоматическое прохождение MONETA.Assistant](#auto_assistant)\n\n##\u003ca name=\"installation\"\u003e\u003c/a\u003e Установка\n\nДобавьте эти строки в Gemfile вашего приложения:\n\n```ruby\ngem 'payanyway'\n```\n\nИ выполните:\n\n    $ bundle\n\nИли установите напрямую:\n\n    $ gem install payanyway\n\n##\u003ca name=\"setup\"\u003e\u003c/a\u003e Подключение\n\nДобавьте engine в `config/routes.rb`\n```ruby\nRails.application.routes.draw do\n  mount Payanyway::Engine =\u003e '/payanyway'\nend\n```\n\nСоздайте `app/controllers/payanyway_controller.rb` со следующим кодом:\n\n```ruby\nclass PayanywayController \u003c ApplicationController\n  include Payanyway::Controller\n\n  def success_implementation(transaction_id)\n    # вызывается при отправке шлюзом пользователя на Success URL.\n    #\n    # ВНИМАНИЕ: является незащищенным действием!\n    # Для выполнения действий после успешной оплаты используйте pay_implementation\n  end\n  \n  def pay_implementation(params)\n    # вызывается при оповещении магазина об \n    # успешной оплате пользователем заказа. (Pay URL)\n    #\n    # params[ KEY ], где KEY ∈ [ :moneta_id, :transaction_id, :operation_id,\n    # :amount, :currency, :subscriber_id, :test_mode, :user, :corraccount,\n    # :custom1, :custom2, :custom3 ]\n  end\n  \n  def fail_implementation(transaction_id)\n    # вызывается при отправке шлюзом пользователя на Fail URL.\n  end\nend\n```\n\nСоздайте конфигурационный файл: `config/payanyway.yml`\n\n```yml\ndevelopment: \u0026config\n    moneta_id: YOUR_MONETA_ID\n    currency: RUB\n    payment_url: https://demo.moneta.ru/assistant.htm\n    test_mode: 1\n    token: secret_token\nproduction: \u003c\u003c: *config\n    payment_url: https://moneta.ru/assistant.htm\n    test_mode: 0\n```\n\nВ настройках счета **moneta.ru** выберите `HTTP метод: GET`\n\n![Settings](https://raw.github.com/ssnikolay/payanyway/master/settings.jpg)\n\n##\u003ca name=\"usage\"\u003e\u003c/a\u003e Использование\n\n###\u003ca name=\"payment_url\"\u003e\u003c/a\u003e Запрос на оплату\n\nЧтобы получить ссылку на платежный шлюз для оплаты заказа пользователем,\nиспользуйте хелпер\n\n```ruby\nPayanyway::Gateway.payment_url(params, use_signature = true)\n```\n\n###\u003ca name=\"widget_url\"\u003e\u003c/a\u003e Получение URL для отображения виджета оплаты\n\nЧтобы получить ссылку на виджет для оплаты заказа пользователем,\nиспользуйте хелпер\n\n```ruby\nPayanyway::Gateway.widget_url(params, use_signature = true)\n```\n\nОписание всех возможных параметров запроса (ключей params) находится [здесь](#params).\n\nЕсли в настройках счета в системе **moneta.ru** выставлен флаг «Можно переопределять настройки в URL», то можно так же передавать\n`[:success_url, :in_progress_url, :fail_url, :return_url]`.\n\nПример минимальной ссылки для оплаты:\n\n```ruby\nclass Order \u003c ActiveRecord::Base; end\n\nclass OrdersController \u003c ApplicationController\n  def create\n    order = Order.create(params[:order])\n    redirect_to Payanyway::Gateway.payment_url(\n      transaction_id: order.id,\n      amount: order.total_amount,\n      description: \"Оплата заказа № #{ order.number } на сумму #{ order.total_amount }руб.\"\n    )\n  end\nend\n```\n\n*Примечание: при необходимости можно переопределить `moneta_id`, `currency`, `test_mode`, так же передав их в payment_url.*\n\n###\u003ca name=\"special_urls\"\u003e\u003c/a\u003e Специальные URL'ы\n\nGem **payanyway** добавляет специальные роуты для обработки запросов от шлюза.\n\n####\u003ca name=\"check_url\"\u003e\u003c/a\u003e Check URL\n\n```ruby\nclass PayanywayController\n  ...\n  def check_implementation(params)\n    # Вызывается при обработке проверочных запросов (Check URL)\n    # params[ KEY ], где KEY ∈ [ :moneta_id, :transaction_id, :operation_id,\n    # :amount, :currency, :subscriber_id, :test_mode, :user, :corraccount,\n    # :custom1, :custom2, :custom3, :payment_system_unit_id ]\n\n    # ВНИМАНИЕ: при отправке корректного ответа со стороны магазина,\n    #   необходимо вернуть в методе параметры для генерации статус-кода.\n    #   { amount: AMOUNT, state: STATE, description: DESCRIPTION,\n    #   attributes: ATTRIBUTES, logger: true\\false }\n  end\nend\n```\n\nПример метода:\n\n```ruby\n...\ndef check_implementation(params)\n  order = Order.find(params[:transaction_id])\n  {\n    amount: order.total_amount,\n    state: order.state_for_payanyway, # нужно реализовать\n    attributes: { name: 'John Smith', email: 'js@gmail.com' }\n  }\nend\n...\n```\n\n**Возвращаемые параметры:**\n\n Название                  | Описание\n---------------------------|:-----------------------------------------------------------\n`:amount`                  | Сумма заказа\n`:state`                   | Состояние оплаты заказа. (см. [таблицу состояний](#states))\n`:description`             | Описание состояния заказа. Задается в произвольной форме.\n`:attributes`              | Необязательный элемент. Содержит хеш произвольных параметров, которые будут сохранены в операции.\n`:logger`                  | Вывести XML ответ в log (`Rails.logger`)\n\n\u003ca name=\"states\"\u003e\u003c/a\u003e**Возможные состояния оплаты заказа:**\n\n Состояние               | Описание\n-------------------------|:-----------------------------------------------------------\n`:paid`                  | Заказ оплачен. Уведомление об оплате магазину доставлено.\n`:in_progress`           | Заказ находится в обработке. Точный статус оплаты заказа определить невозможно. (например, если пользователя отправило на InProgress URL, но уведомления на Pay URL от шлюза еще не поступало)\n`:unpaid`                | Заказ создан и готов к оплате. Уведомление об оплате магазину не доставлено.\n`:canceled`              | Заказ не является актуальным в магазине (например, заказ отменен).\n\n####\u003ca name=\"return_url\"\u003e\u003c/a\u003e Return URL и InProgress URL\n\n```ruby\nclass PayanywayController\n  ...\n  def return_implementation(transaction_id)\n    # Вызывается при добровольном отказе пользователем от оплаты (Return URL)\n  end\n\n  def in_progress_implementation(transaction_id)\n    # Вызывается после успешного запроса на авторизацию средств,\n    # до подтверждения списания и зачисления средств (InProgress URL)\n    #\n    # ВНИМАНИЕ: InProgress URL может быть использован в любом способе оплаты.\n    #   Если к моменту, когда пользователя надо вернуть в магазин оплата,\n    #   по какой-либо причине не завершена, то его перекинет на InProgress,\n    #   если он указан, если не указан, то на Success URL.\n    #   Если операция уже успешно выполнилась, то сразу на Success.\n    #   В случае с картами чаще всего получается так, что операция не успевает выполниться,\n    #   поэтому InProgress будет использован с бОльшей вероятностью, чем Success URL.\n  end\n  ...\nend\n```\n\n###\u003ca name=\"params\"\u003e\u003c/a\u003e Расшифровка параметров\n\n params[ KEY ], где KEY    | В документации           | Описание\n---------------------------|:-------------------------|:-----------------------------------------\n`:moneta_id`               | `MNT_ID`                 | Идентификатор магазина в системе MONETA.RU.\n`:transaction_id`          | `MNT_TRANSACTION_ID`     | Внутренний идентификатор заказа, однозначно определяющий заказ в магазине.\n`:operation_id`            | `MNT_OPERATION_ID`       | Номер операции в системе MONETA.RU.\n`:amount`                  | `MNT_AMOUNT`             | Фактическая сумма, полученная на оплату заказа.\n`:currency`                | `MNT_CURRENCY_CODE`      | ISO код валюты, в которой произведена оплата заказа в магазине.\n`:test_mode`               | `MNT_TEST_MODE`          | Флаг оплаты в тестовом режиме (1 - да, 0 - нет).\n`:description`             | `MNT_DESCRIPTION`        | Описание оплаты.\n`:subscriber_id`           | `MNT_SUBSCRIBER_ID`      | Внутренний идентификатор пользователя в системе магазина.\n`:corraccount`             | `MNT_CORRACCOUNT`        | Номер счета плательщика.\n`:custom[1|2|3]`           | `MNT_CUSTOM1`            | Поля произвольных параметров. Будут возвращены магазину в параметрах отчета о проведенной оплате.\n`:user`                    | `MNT_USER`               | Номер счета пользователя, если оплата производилась с пользовательского счета в системе «MONETA.RU».\n`:locale`                  | `moneta.locale`          | (ru\\|en) Язык пользовательского интерфейса.\n`:success_url`             | `MNT_SUCCESS_URL`        | URL страницы магазина, куда должен попасть покупатель после успешно выполненных действий.\n`:in_progress_url`         | `MNT_INPROGRESS_URL`     | URL страницы магазина, куда должен попасть покупатель после успешного запроса на авторизацию средств, до подтверждения списания и зачисления средств.\n`:fail_url`                | `MNT_FAIL_URL`           | URL страницы магазина, куда должен попасть покупатель после отмененной или неуспешной оплаты.\n`:return_url`              | `MNT_RETURN_URL`         | URL страницы магазина, куда должен вернуться покупатель при добровольном отказе от оплаты.\n`:attributes`              | `MNT_ATTRIBUTES`         | Содержит произвольные параметры, которые будут сохранены в операции.\n`:payment_system_limit_ids`| `paymentSystem.limitIds` | Список (разделенный запятыми) идентификаторов платежных систем.\n\n####\u003ca name=\"auto_assistant\"\u003e\u003c/a\u003e Автоматическое прохождение MONETA.Assistant\n\nparams[ KEY ], где KEY       | В документации           | Описание\n-----------------------------|:--------------------------|:-----------------------------------------\n`:followup`                  | `followup`                | Пройти весь MONETA.Assistant с предустановленными значениями. Для этого необходимо выбрать платежную систему и заполнить параметры платежной системы (если они есть).\n`:payment_system_unit_id`    | `paymentSystem.unitId`    | (1015 – МОНЕТА.РУ, 1020 – Яндекс.Деньги, 1017 – WebMoney и т.п.) Предварительный выбор платежной системы. Полный список способов оплаты можно посмотреть: https://www.moneta.ru/viewPaymentMethods.htm\n`:javascript_enabled`        | `javascriptEnabled`       | (true\\|false) Признак возможности использовать javascript для автоматической обработки форм.\n`:payment_system_account_id` | `paymentSystem.accountId` | Номер счета платежной системы. Например, тип кошелька WebMoney, 2 – WMR, 3 – WMZ, 4 – WME.\n\n## Contributing\n\n1. Fork it ( https://github.com/ssnikolay/payanyway/fork )\n2. Create your feature branch (`git checkout -b my-new-feature`)\n3. Commit your changes (`git commit -am 'Add some feature'`)\n4. Push to the branch (`git push origin my-new-feature`)\n5. Create a new Pull Request\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fruntimellc%2Fpayanyway","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fruntimellc%2Fpayanyway","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fruntimellc%2Fpayanyway/lists"}