Приложение для подключения сайта к деньгам@mail.ru
Homepage Repository PyPI Python
pip install django-mailru-money==0.1.2
django-mailru-money - это приложение для подключения django-сайта к платежной системе деньги@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/issues/new
Для запуска тестов склонируйте репозиторий, установите tox и запустите
$ tox
из корня репозитория.