Здесь показаны различия между двумя версиями данной страницы.
Следущая версия | Предыдущая версия Последняя версия Both sides next revision | ||
django [2011/08/02 10:36] admin создано |
django [2011/09/02 10:14] admin |
||
---|---|---|---|
Строка 3: | Строка 3: | ||
Пользователи других фреймворков могут написать своё приложение, специально для этого основная функциональность собрана в файле `common.py`. \\ | Пользователи других фреймворков могут написать своё приложение, специально для этого основная функциональность собрана в файле `common.py`. \\ | ||
Фреймворко-зависимую часть (запросы, систему хранения, обработку форм, оповещение менеджеров) нужно будет переписать, взяв за основу текущий код.\\ | Фреймворко-зависимую часть (запросы, систему хранения, обработку форм, оповещение менеджеров) нужно будет переписать, взяв за основу текущий код.\\ | ||
+ | {{:onpay-django1.png|}}\\ | ||
+ | {{:onpay-django2.png|}}\\ | ||
====Схема работы Onpay.ru через фреймворк Django==== | ====Схема работы Onpay.ru через фреймворк Django==== | ||
Строка 11: | Строка 13: | ||
====Настройки в личном кабинете Onpay.ru для работы с Django==== | ====Настройки в личном кабинете Onpay.ru для работы с Django==== | ||
- | В личном кабинете Onpay.ru (Настройки магазина) необходимо настроить параметры API IN: | + | В [[http://wiki.onpay.ru/doku.php?id=cabinet|Личном Кабинете]] Onpay.ru (Настройки магазина) необходимо настроить параметры API IN: |
Уведомлять по API - Да | Уведомлять по API - Да | ||
Проверять MD5 на ссылках - Да (не обязательно) | Проверять MD5 на ссылках - Да (не обязательно) | ||
URL API: http://вашдомен/onpay/api/ (можно переопределить через URLconf) | URL API: http://вашдомен/onpay/api/ (можно переопределить через URLconf) | ||
Пароль для API IN: ksjgJskLJds - ваш секретный код, который будет нужен при настройках платежного модуля Onpay.ru в Django | Пароль для API IN: ksjgJskLJds - ваш секретный код, который будет нужен при настройках платежного модуля Onpay.ru в Django | ||
- | + | {{:onpay-django3.png|}}\\ | |
====Установка Django-Onpay==== | ====Установка Django-Onpay==== | ||
Строка 53: | Строка 56: | ||
"use_balance_table": True, | "use_balance_table": True, | ||
- | # записывать в таблицу баланса. Без нее если честно не пробовал | + | # записывать в таблицу баланса. |
"pay_mode": "fix", | "pay_mode": "fix", | ||
Строка 66: | Строка 69: | ||
"enable_email_notify": None, | "enable_email_notify": None, | ||
# если включить опцию, при платежах будет отправлен email | # если включить опцию, при платежах будет отправлен email | ||
- | # через функцию email_managers | + | # через функцию email_managers |
- | + | ||
- | "enable_footman_update_balance": None, | + | |
- | # это только для примера и включать ни в коем случае нельзя! | + | |
- | # при получении платежа накидывается баланс на счет пользователя | + | |
- | # из профиля другого приложения (не путать с таблицей Balance) | + | |
- | # по аналогии стоит написать свою функцию и подключить через сигнал, | + | |
- | # если вам требуется хранить счет пользователя в другом месте | + | |
- | + | ||
- | "new_operation_status": 0, | + | |
- | # опция довольно бесполезная, оставил так как была в рхршных примерах | + | |
"debug": None, | "debug": None, | ||
- | # на данный момент отправляет через mail_admins запрос от onpay | + | # на данный момент отправляет через mail_admins запрос от Onpay.ru |
- | Чтобы встроить платежную систему в свой дизайн надо переопределить шаблоны из папки onpay. Надеюсь с этим справитесь без проблем. | + | Чтобы встроить платежную систему в свой дизайн надо переопределить шаблоны из папки onpay.\\ |
- | + | \\ | |
- | Можно вместо include в urls.py прописать свои роуты к своим views, | + | Можно вместо include в urls.py прописать свои роуты к своим views, если требуется какие-то изменения. \\ |
- | если требуется какие-то изменения. | + | \\ |
- | + | Можно поменять параметры после инициализации IframeGenerator: \\ | |
- | Можно поменять параметры после инициализации IframeGenerator: | + | iframe_generator = IframeGenerator() |
- | + | iframe_generator.set_f(3) | |
- | iframe_generator = IframeGenerator() | + | iframe_generator.width = 100500 |
- | iframe_generator.set_f(3) | + | iframe_generator.pay_mode = "free" |
- | iframe_generator.width = 100500 | + | \\ |
- | iframe_generator.pay_mode = "free" | + | После оплаты отправляется сигнал `onpay.signals.refilled_balance`, если на него подписать свою функцию, можно добиться любой функциональности. Примеры смотрите в файле `signals.py`. \\ |
- | + | \\ | |
- | После оплаты отправляется сигнал `onpay.signals.refilled_balance`, | + | Ну и, наконец, можно изменить исходные тексты и прислать hg патчи нам - по возможности добавим в репозиторий. |
- | если на него подписать свою функцию, можно добиться любой функциональности. | + | |
- | Примеры смотрите в файле `signals.py`. | + | |
- | Ну и, наконец, можно изменить исходные тексты и прислать hg патчи мне | + | common.py для работы с dom.minidom |
- | - по возможности добавлю в репозиторий. Комментарии писались по большей части | + | |
- | на русском, так как сама платежная система русская. | + | |
- | common.py для работы с dom.minidom | + | |
- | # coding: UTF-8 | + | # coding: UTF-8 |
- | import urllib | + | import urllib |
- | from hashlib import md5 | + | from hashlib import md5 |
- | #from lxml import etree | + | #from lxml import etree |
- | from xml.dom.minidom import getDOMImplementation | + | from xml.dom.minidom import getDOMImplementation |
- | from onpay.conf import get_constant | + | from onpay.conf import get_constant |
- | class IframeGenerator(object): | + | class IframeGenerator(object): |
- | def __init__(self): | + | def __init__(self): |
- | self.pay_mode = get_constant("pay_mode", "fix") | + | self.pay_mode = get_constant("pay_mode", "fix") |
- | self.currency = get_constant("currency", "RUR") | + | self.currency = get_constant("currency", "RUR") |
- | self.convert = get_constant("convert", "yes") | + | self.convert = get_constant("convert", "yes") |
- | self.url_success = get_constant("url_success") | + | self.url_success = get_constant("url_success") |
- | self.private_code = get_constant("private_code") | + | self.private_code = get_constant("private_code") |
- | self.onpay_login = get_constant("onpay_login") | + | self.onpay_login = get_constant("onpay_login") |
- | self.set_f(get_constant("f")) | + | self.set_f(get_constant("f")) |
def iframe_url_params(self, operation_id, summ, email=None): | def iframe_url_params(self, operation_id, summ, email=None): | ||
Строка 170: | Строка 158: | ||
return u'<iframe %s></iframe>' % (u" ".join(options_gen)) | return u'<iframe %s></iframe>' % (u" ".join(options_gen)) | ||
- | def answer(type, code, pay_for, order_amount, order_currency, text): | + | def answer(type, code, pay_for, order_amount, order_currency, text): |
"функция выдает ответ для сервиса onpay в формате XML на чек запрос" | "функция выдает ответ для сервиса onpay в формате XML на чек запрос" | ||
array_for_md5 = (type, pay_for, order_amount, order_currency, str(code), | array_for_md5 = (type, pay_for, order_amount, order_currency, str(code), | ||
Строка 200: | Строка 188: | ||
- | def answer_dict(POST, code, text): | + | def answer_dict(POST, code, text): |
"Shortcut for call answer with POST or form dict as parameter" | "Shortcut for call answer with POST or form dict as parameter" | ||
return answer( | return answer( | ||
Строка 211: | Строка 199: | ||
) | ) | ||
- | def answerpay(type, code, pay_for, order_amount, order_currency, text, onpay_id): | + | def answerpay(type, code, pay_for, order_amount, order_currency, text, onpay_id): |
"функция выдает ответ для сервиса onpay в формате XML на pay запрос" | "функция выдает ответ для сервиса onpay в формате XML на pay запрос" | ||
Строка 244: | Строка 232: | ||
# xml_declaration=True, encoding='UTF-8') | # xml_declaration=True, encoding='UTF-8') | ||
- | def answerpay_dict(request_dict, code, text): | + | def answerpay_dict(request_dict, code, text): |
"Shortcut for call answerpay with POST or form dict as parameter" | "Shortcut for call answerpay with POST or form dict as parameter" | ||
return answerpay( | return answerpay( | ||
Строка 255: | Строка 243: | ||
request_dict.get('onpay_id'), | request_dict.get('onpay_id'), | ||
) | ) | ||
- | |||
- | To-Do | ||
- | |||
- | То, что хотелось бы сделать (но врядли у меня дойдут руки до этого, | ||
- | "и так работает"): | ||
- | |||
- | 1. Опция для английского языка фрейма | ||
- | 1. Более качественная поддержка fix платежей (я концентрировался на free) | ||
- | 1. Поддержка скинов для одной валюты | ||
- | 1. Добавить сигналы на все случаи жизни | ||
- | 1. Сделать `setup.py` и установку через `pip` | ||
- | 1. Автоматические тесты | ||
- | 1. Еще несколько фич, которые в данный момент не помню | ||
- | Автор: Денис Бурый | + | Автор: Денис Бурый\\ |
- | Лицензия: MIT | + | Лицензия: MIT\\ |