Как видно из названия, это приложение для работы с платежной системой http://onpay.ru/ для сайта, построенного на фреймворке джанго.
Пользователи других фреймворков или своих велосипедов на python (svarga,
pylons, turbogears, web.py, etc) могут написать своё приложение, специально
для этого основная функциональность собрана в файле common.py
.
Фреймворко-зависимую часть (запросы, систему хранения, обработку форм,
оповещение менеджеров) естественно придётся переписать, взяв за основу
текущий код.
Все просто, надо:
- Сгенерировать тег
iframe
из множества параметров. В этом поможет классIframeGenerator
. - Принять запрос от сервиса, который и скажет, кому и сколько денег положили и собственно внести сумму в базу данных.
В личном кабинете OnPay.ru (Настройки магазина) необходимо настроить параметры API IN:
- Уведомлять по API - Да
- Проверять MD5 на ссылках - Да (не обязательно)
- URL API: http://вашдомен/onpay/api/ (можно переопределить через URLconf)
- Пароль для API IN: ksjgJskLJds - ваш секретный код, который будет нужен при настройках платежного модуля OnPay в django
Приложение требует модуль lxml. Начиная с версии 2.6 python содержит его в стандартной библиотеке. Если вы пользуетесь более ранней версией (например, той, что идёт в пакетах с debian lenny), необходимо установить пакет python-lxml.
Для собственно установки пакета подойдет один из вариантов:
$ hg clone http://bitbucket.org/denger/django-onpay
$ ln -s /path/to/django-onpay/onpay /usr/lib/python2.6/site-packages
$ hg clone http://bitbucket.org/denger/django-onpay
$ cd django-onpay
$ sudo python setup.py install
$ sudo pip install -e hg+http://bitbucket.org/denger/django-onpay
Далее:
- прописываем
onpay
вINSTALLED_APPS
, ./manage.py syncdb
- в
settings.py
добавляем переменнуюONPAY
с минимумом настроек (см. ниже), - добавляем в
urls.py
:('^onpay/', include('onpay.urls')),
, - тестируем работу.
Все параметры хранятся в словаре ONPAY
в файле settings.py
.
Обязательные параметры:
ONPAY = {
'onpay_login': 'example', # Ваш логин на onpay
'private_code': 'ksjgJskLJds', # Пароль, который вы ввели на сайте onpay
'new_operation_status': 0, #По умолчанию нужно
}
Необязательные параметры:
"url_success": "http://example.org/onpay/api/",
# default: то что задано в настройках на сайте onpay
"use_balance_table": True,
# записывать в таблицу баланса. Без нее если честно не пробовал
"pay_mode": "fix",
# 'free' - обновление баланса, юзер может изменить цифру
# 'fix' - фиксированный платеж, цифра в фрейме только для чтения
"f": None,
# скин, возможные значения - None, 1, 2, 3
# в зависимости от скина
# подробнее: http://onpay.ru/form/
"enable_email_notify": None,
# если включить опцию, при платежах будет отправлен email
# через функцию email_managers
"enable_footman_update_balance": None,
# это только для примера и включать ни в коем случае нельзя!
# при получении платежа накидывается баланс на счет пользователя
# из профиля другого приложения (не путать с таблицей Balance)
# по аналогии стоит написать свою функцию и подключить через сигнал,
# если вам требуется хранить счет пользователя в другом месте
"new_operation_status": 0,
# опция довольно бесполезная, оставил так как была в рхршных примерах
"debug": None,
# на данный момент отправляет через mail_admins запрос от onpay
Чтобы встроить платежную систему в свой дизайн надо переопределить шаблоны из папки onpay. Надеюсь с этим справитесь без проблем.
Можно вместо include в urls.py прописать свои роуты к своим views, если требуется какие-то изменения.
Можно поменять параметры после инициализации IframeGenerator:
iframe_generator = IframeGenerator()
iframe_generator.set_f(3)
iframe_generator.width = 100500
iframe_generator.pay_mode = "free"
После оплаты отправляется сигнал onpay.signals.refilled_balance
,
если на него подписать свою функцию, можно добиться любой функциональности.
Примеры смотрите в файле signals.py
.
Ну и, наконец, можно изменить исходные тексты и прислать hg патчи мне
- по возможности добавлю в репозиторий. Комментарии писались по большей части на русском, так как сама платежная система русская.
То, что хотелось бы сделать (но врядли у меня дойдут руки до этого, "и так работает"):
- Опция для английского языка фрейма
- Более качественная поддержка fix платежей (я концентрировался на free)
- Поддержка скинов для одной валюты
- Добавить сигналы на все случаи жизни
- Сделать
setup.py
и установку черезpip
- Автоматические тесты
- Еще несколько фич, которые в данный момент не помню
Автор: Денис Бурый denger@footter.com
Лицензия: MIT