Package: django-robokassa3
================django-robokassa3================*Данный репозиторий является форком более неподдерживаемой библиотеки за авторством https://github.com/kmike**Добавлены поддержка современных версий Django (1.11, 2.0), поддержка Python 3 и тестовый проект.***django-robokassa3** - это приложение для интеграции платежной системы ROBOKASSA впроекты на Django.До использования следует ознакомиться с официальной документациейROBOKASSA (http://docs.robokassa.ru/). Приложение реализуетпротокол взаимодействия, описанный в этом документе.Установка=========::$ pip install django-robokassa3Потом следует добавить 'robokassa' в INSTALLED_APPS и выполнить ::$ python manage.py migrateДля работы требуется Django 1.11 или 2.0. Поддерживаются Python 2.7 и >=3.4.Настройка=========В settings.py нужно указать следующие настройки:* ROBOKASSA_LOGIN - логин* ROBOKASSA_PASSWORD1 - пароль №1Необязательные параметры:* ROBOKASSA_PASSWORD2 - пароль №2. Его можно не указывать, еслиdjango-robokassa используется только для вывода формы платежа.Если django-robokassa используется для приема платежей, то этотпараметр обязательный.* ROBOKASSA_USE_POST - используется ли метод POST при приеме результатов отROBOKASSA. По умолчанию - True. Считается, что для Result URL, Success URL иFail URL выбран один и тот же метод.* ROBOKASSA_STRICT_CHECK - использовать ли строгую проверку (требоватьпредварительного уведомления на ResultURL). По умолчанию - True.* ROBOKASSA_TEST_MODE - включен ли тестовый режим. По умолчанию False(т.е. включен боевой режим).* ROBOKASSA_EXTRA_PARAMS - список (list) названий дополнительных параметров,которые будут передаваться вместе с запросами. "Shp" к ним приписывать ненужно.* ROBOKASSA_TEST_FORM_TARGET - url робокассы для тестового режима.Настройка предназначена для случая, когда в распоряжении не имеетсядоступного в интернете домена (например разработка на localhost)и вместо сервера робокассы необходимоиспользовать свой.Использование=============Форма для приема платежей-------------------------Для того, чтобы упростить конструирование html-форм для отправки пользователей вRobokassa, в django-robokassa есть форма RobokassaForm. Она нужнадля упрощения вывода информации в шаблонах, вычисления контрольной суммы иформирования параметров GET-запросов.Пример::# views.pyfrom django.shortcuts import get_object_or_404, renderfrom django.contrib.auth.decorators import login_requiredfrom robokassa.forms import RobokassaForm@login_requireddef pay_with_robokassa(request, order_id):order = get_object_or_404(Order, pk=order_id)form = RobokassaForm(initial={'OutSum': order.total,'InvId': order.id,'Desc': order.name,'Email': request.user.email,# 'IncCurrLabel': '',# 'Culture': 'ru'})return render(request, 'pay_with_robokassa.html', {'form': form})В initial все параметры необязательны. Детальную справку по параметрамлучше посмотреть в `документации <http://robokassa.ru/ru/Doc/Ru/Interface.aspx#222>`_к Robokassa. Можно передавать в initial значения "пользовательских параметров",описанных в ROBOKASSA_EXTRA_PARAMS ('shp' к ним приписывать опять не нужно).Соответствующий шаблон::{% extends 'base.html' %}{% block content %}<form action="{{ form.target }}" method="POST"><p>{{ form.as_p }}</p><p><input type="submit" value="Купить"></p></form>{% endblock %}Форма выведется в виде набора скрытых input-тегов.У формы есть атрибут target, содержащий URL, по которому форму следуетотправлять. В тестовом режиме это будет тестовый URL, в боевом - боевой.Обратите внимание, {% csrf_token %} в форме не нужен (и более того, добавлятьего к форме небезопасно), т.к. форма ведет на внешний сайт - сайт робокассы.Вместо отправки формы можно сформировать GET-запрос. У формы естьметод get_redirect_url, который возвращает нужный адрес со всеми параметрами.Редирект на этот адрес равносилен отправке формы методом GET.django-robokassa не включает в себя модели "Покупка" (``Order`` в примере),т.к. эта модель будет отличаться от сайта к сайту. Обработку смены статусовпокупок следует осуществлять в обработчиках сигналов.Получение результатов платежей------------------------------В Robokassa есть несколько методов определения результата платежа:1. При переходе на страницы Success и Fail гарантируется, что платежсоответственно прошел и не прошел2. При успешном или неудачном платеже Robokassa отправляет POST или GET запросна Result URL.3. Можно запрашивать статус платежа через XML-сервис.В django-robokassa на данный момент поддерживаются методы 1 и 2 и их совмещение(дополнительная проверка, что при переходе на Success URL уже было уведомлениена Result URL при использовании опции ROBOKASSA_STRICT_CHECK = True).В целях безопасности лучше всегда использовать строгую проверку(с подтверждением через Result URL). Ее механизм:1. После оплаты robokassa.ru отправляет "фоновый" запрос на ResultURL.2. Внутри view, связанного с ResultURL, происходит проверка содержащейся взапросе md5-подписи через ROBOKASSA_PASSWORD2 (это второй пароль, который непередается по сети и известен только отправителю и получателю).ROBOKASSA_PASSWORD2 нужен для подтверждения того, что запрос был посланименно с robokassa.ru.3. Если запрос правильный, то view шлет сигнал``robokassa.signals.result_received``. Чтоб производитьманипуляции внутри сайта (например, начислять средства согласнопришедшему запросу или менять статус заказа), нужно добавитьсоответствующий обработчик этого сигнала.4. Если все в порядке, то view, связанный с Result URL,отдает robokassa.ru ответ вида ``OK<operation_id>``,где ``<operation_id>`` - уникальный id текущей операции.Этот ответ  необходим для того, чтобы robokassa.ru получилаподтверждение того, что все необходимые действия произведены.5. Если robokassa.ru получает этот ответ, то пользователь перенаправляетсяна Success URL. На этой страничке обычно лучше вывести сообщениеоб успешном прохождении платежа/оплаты. Если ответ view, связаннойс Result URL, не соответвтует ожидаемому, то пользователь перенаправляетсяне на Success URL, а на Fail URL; там ему хорошо бы показатьсообщение о произошедшей ошибке.Сигналы-------Обработку смены статусов покупок следует осуществлять в обработчиках сигналов.* ``robokassa.signals.result_received`` - шлется при получении уведомления отRobokassa. Получение этого сигнала означает, что оплата была успешной.В качестве sender передается экземпляр модели SuccessNotification, укоторой есть атрибуты InvId и OutSum.* ``robokassa.signals.success_page_visited`` - шлется при переходе пользователяна страницу успешной оплаты. Этот сигнал следует использовать вместоresult_received, если не используется строгая проверка(ROBOKASSA_STRICT_CHECK=False)* ``robokassa.signals.fail_page_visited`` - шлется при переходе пользователяна страницу ошибки оплаты. Получение этого сигнала означает, что оплатане была произведена. В обработчике следует осуществлять разблокирвку товарана складе и т.д.Все сигналы получают параметры InvId (номер заказа), OutSum (сумма оплаты) иextra (словарь с дополнительными параметрами, описанными вROBOKASSA_EXTRA_PARAMS).Пример::from robokassa.signals import result_receivedfrom my_app.models import Orderdef payment_received(sender, **kwargs):order = Order.objects.get(id=kwargs['InvId'])order.status = 'paid'order.paid_sum = kwargs['OutSum']order.extra_param = kwargs['extra']['my_param']order.save()result_received.connect(payment_received)urls.py-------Для настройки Result URL, Success URL и Fail URL можно подключитьмодуль robokassa.urls::urlpatterns = patterns('',#...url(r'^robokassa/', include('robokassa.urls')),#...)Адреса, которые нужно указывать в панели robokassa, в этом случае будут иметь вид* Result URL: ``http://yoursite.ru/robokassa/result/``* Success URL: ``http://yoursite.ru/robokassa/success/``* Fail URL: ``http://yoursite.ru/robokassa/fail/``Шаблоны-------* ``robokassa/success.html`` - показывается в случае успешной оплаты. Вконтексте есть переменная form типа ``SuccessRedirectForm``, InvIdи OutSum с параметрами заказа, а также все дополнительные параметры, описанныев ROBOKASSA_EXTRA_PARAMS.* ``robokassa/fail.html`` - показывается в случае неуспешной оплаты. Вконтексте есть переменная form типа ``FailRedirectForm``, InvIdи OutSum с параметрами заказа, а также все дополнительные параметры, описанныев ROBOKASSA_EXTRA_PARAMS.* ``robokassa/error.html`` - показывается при ошибочном запросе к странице"успех" или "неудача" (например, при ошибке в контрольной сумме). В контекстеесть переменная form класса ``FailRedirectForm`` или ``SuccessRedirectForm``.Разработка==========Оригинальная более неподдерживаемая версия библиотеки: https://github.com/kmike/django-robokassaРазработка ведётся на GitHub: https://github.com/mpyrev/django-robokassaПожелания, идеи, баг-репорты и тд. пишите в трекер: https://github.com/mpyrev/django-robokassa/issuesЛицензия - MIT.Тестирование------------Для запуска тестов установите `tox <http://tox.testrun.org/>`_, склонируйте репозиторийи выполните команду::$ toxиз корня репозитория.История изменений=================1.4 (2018-04-26)----------------* Добавлена поддержка Python 3 (3.4, 3.5, 3.6, 3.7)* Добавлена поддержка последних версий Django (1.11, 2.0)* Добавлен тестовый проект example_project* Миграции заменены на стандартные (вместо South)* Код подчищен для большего соответствия PEP-81.3 (2016-03-07)----------------* исправлена работа в тестовом режиме (спасибо Шумихину Ивану);* настройка ROBOKASSA_TEST_FORM_TARGET позволяет указать свой тестовый сервер(спасибо https://github.com/superqwer).* репозиторий на bitbucket больше не поддерживается;* setup.py теперь использует setuptools.1.2 (2013-12-24)----------------* Добавлена поддержка django 1.6 - спасибо Александру Симкину;* Python 2.5 больше не поддерживается.1.1 (2013-04-12)----------------* На странице FailURL больше не проверяется подпись (т.к. Робокасса еебольше не передает) - спасибо @amureki;* улучшена справка - спасибо @bo858585.1.0 (2012-03-24)----------------* Для работы теперь требуется django >= 1.3;* добавлена поддержка django 1.4;* все вьюхи возвращают теперь TemplateResponse;* миграции переведены на современную версию south;* запуск тестов через tox;* небольшие улучшения в README.0.9.3 (2010-08-05)------------------Сообщения с ошибочной подписью не вызывают исключения.0.9.2 (2010-06-23)------------------Добавлена поддержка django 1.2.0.9.1 (2010-05-10)------------------Исправлена работа с дополнительными (пользовательскими) параметрами.0.9.0 (2010-04-15)------------------Первая версия