django-mailru-money 0.1.2
Приложение для подключения сайта к деньгам@mail.ru
License: MIT license

===================
django-mailru-money
===================

django-mailru-money - это приложение для подключения django-сайта
к платежной системе `деньги@mail.ru <http://money.mail.ru/>`_.

Лицензия - MIT.
Поддерживается python 2.6, 2.7 и 3.2; django 1.3 и 1.4.

Установка
=========

::

    $ pip install django-mailru-money

В settings.py пропишите данные своего магазина::

    MAILRU_MONEY_SHOP_ID = 'my_shop_id'
    MAILRU_MONEY_SECRET_KEY = 'my_secret_key'

Подключите обработчик приема платежей в urls.py::

    urlpatterns = patterns('',
        # ...
        url(r'^mailru-money/', include('mailru_money.urls')),
        # ...
    )

ResultURL (который нужно сообщить в money.mail.ru) в этом случае
будет ``http://your-site.com/mailru-money/result/``.

Затем добавьте ``'mailru_money'`` в INSTALLED_APPS и выполните syncdb
(migrate, если используется South).

В INSTALLED_APPS также должны быть ``'django.contrib.auth'``
и ``'django.contrib.contenttypes'``.

Использование
=============

На странице оплаты используйте ``mailru_money.forms.MailruOrderForm``
для вывода формы оплаты и формирования заказа::

    # views.py
    from django.shortcuts import get_object_or_404, render
    from mailru_money.forms import MailruOrderForm
    from myapp.models import Item

    @login_required
    def pay(request, item_id)

        # товар, который будем оплачивать
        item = get_object_or_404(Item, id=item_id)

        # создаем заказ
        form = MailruOrderForm(
            amount = item.price,
            description = item.description,
            user = request.user
            pay_for = item,
        )

        return render(request, 'myapp/pay.html', {'form': form})

В шаблоне требуется сформировать форму оплаты::

    {# myapp/pay.html #}
    {# ... #}

    <form method='post' action='{{ form.ACTION }}'>
        {{ form }}
        <input type='submit' value='Оплатить через Деньги@mail.ru'>
    </form>

    {# ... #}

Обратите внимание, что {% csrf_token %} использовать не нужно.
Форма будет выведена как набор скрытых полей.

Обработку платежей можно осуществлять в сигнале
``mailru_money.signals.order_status_changed``::

    from mailru_money.models import MailruOrder
    from mailru_money.signals import order_status_changed

    from myapp.models import Item

    def mailru_payment_received(sender, order, old_status, **kwargs):
        item = order.pay_for
        if order.state == MailruOrder.PAID:
            item.deliver_to(order.user)
        elif order.state == MailruOrder.REJECTED:
            item.unblock()

    order_status_changed.connect(mailru_payment_received)

Сигнал шлется только когда у заказа изменился статус. Оплаченный заказ при
этом стать неоплаченным не может.

django-mailru-money поддерживает и другую схему работы
(можно не использовать встроенные средства для контроля заказов).
См. исходный код, если описанная выше схема не устраивает.

Разработка
----------

Разработка идет на bitbucket.org и github.com:

* https://bitbucket.org/kmike/django-mailru-money/
* https://github.com/kmike/django-mailru-money/

Баг-трекер - на битбакете: https://bitbucket.org/kmike/django-mailru-money/issues/new

Для запуска тестов склонируйте репозиторий, установите `tox <http://tox.testrun.org>`_
и запустите

::

    $ tox

из корня репозитория.