вторник, 7 июня 2011 г.

django-zpayment

django-zpayment - это модуль, написанный на python для интеграции платежной системы Z-Payment в проектах django.

0. Установка
Сначала скачиваем приложение:
Перейти по ссылке https://github.com/satels/django-zpayment/zipball/master
или выполнить команду
git clone git://github.com/satels/django-zpayment.git

Устанавливаем
cd django-zpayment
pip install -e .

1. В settings.py в INSTALL_APPS устанавливаем webmoney и zpayment
INSTALLED_APPS = (
...
'webmoney',
'zpayment',
)

2. В настройках переменные
В settings.py
# Настройка Z-Payment
ZPAYMENT_SHOP_ID = 'XXXX' # Номер магазина
ZPAYMENT_PASSWORD_INITIALIZATION = 'Your_Password' # Пароль инициализации магазина
ZPAYMENT_SECRET_KEY = 'Secret_Key' # Секретный ключ Merchant Key

Брать отсюда:
Z-Payment Номер магазина
Z-Payment параметры url секретные коды, пароли
3. Добавить кошелек (описано на сайте Z-Payment)
Кратко:
Добавить кошелек на сайте https://z-payment.ru/register.php, добавить магазин https://z-payment.ru/cabinet_shops.php, получить нормальный атестат

4. Генерить пароли с помощью утилиты с контрольной работы (или лучше с калькулятора)
Для генерирования паролей в кабинете рекомендую использовать Генератор паролей (Generate Passwords)

5. Для создания платежа для покупки используется форма PaymentRequestForm, пример использования формы создания платежа на сайте:
from webmoney.models import Invoice as WebmoneyInvoice
from zpayment.forms import get_zp_sign, PaymentRequestForm

def bay(request):
...
if payment_method == 'zpayment':
payment_no = 55 # Уникальный номер платежа на вашем сайте (например, номер выставленного счета)
total = 14.4 # Сумма покупки
payment_no = invoice.id
zp_sign = get_zp_sign(payment_no, total) # Формируется секретный hash (Исправить )
comment = u'Pokupka skidki %s' % translify(discount.name)
initial = {
'LMI_PAYMENT_AMOUNT': total,
'LMI_PAYMENT_NO': payment_no,
'LMI_PAYMENT_DESC': comment, #Комментарий в windows-1251
'CLIENT_MAIL': email,
'ZP_SIGN': zp_sign
}
form = PaymentRequestForm(initial=initial)
webmoney_invoice = WebmoneyInvoice.objects.create(user=user)
webmoney_invoice.payment_no = payment_no
webmoney_invoice.save()
template_name = 'zpayment/zpayment_form.html'
return render_to_response(template_name, {
'form': form
}, context_instance=RequestContext(request))

Где шаблон zpayment/zpayment_form.html:
{% extends "base.html" %}
{% block title %}Z-payment. Перенаправление...{% endblock %}
{% block head %}
<script type="text/javascript" src="{{ MEDIA_URL }}js/zpayment.js"></script>
{% endblock %}
{% block content %}
<h1>Перенаправление на страницу оплаты Z-Payment..</h1>
<form method="POST" action="https://z-payment.ru/merchant.php" id="zpayment-form">
<div style="display:none;">
  {{ form.as_p }}
</div>
<noscript>
<input type="submit" value="Перейти к оплате" />
</noscript>
</form>
{% endblock %}

использует автоматический POST submit формы с помощью jquery.
Содержание zpayment.js:
$(function() {
$("#zpayment-form").submit();
})


6. Ссылки для того, куда робот Z-Payment будет оповещать размещаем в urls.py
urlpatterns = patterns('',
...
url(r'^zpayment/', include('zpayment.urls')),
...
)


7. Про кодировку windows-1251
Комментарии к платежам нужно писать в кодировке windows-1251. Хотя я использую pytils.translit.translify(description)
8. Про POST при создании платежа.
Обязательно выставляем в настройках на сайте z-payment.ru обработку всех параметров через POST
9. Написать про success и fail
10. Про signals

Для обработки информации, пришедшей после покупки

from webmoney.signals import webmoney_payment_accepted

def webmoney_payment_accepted_processor(sender, payment, **kwargs):
print payment # Здесь как то используем webmoney_payment объект
# Например, сохраняем счета, выставляем статус оплачено

webmoney_payment_accepted.connect(webmoney_payment_accepted_processor)

P.S. К большой радости мне выдали аттестат разработчика z-payment!

Комментариев нет:

Отправить комментарий