django-vkontakte-merchant 0.1
Vkontakte Merchant API django app
django-vkontakte-merchant - приложение для интеграции платежной системы ВКонтакте (Merchant API) в проекты на Django.
Для исползования следует ознакомиться с официальной документацией по Merchant API (http://vkontakte.ru/developers.php?id=-1_12904887&s=1).
Установка
$ pip install -U django-vkontakte-merchant vkontakte
Потом следует добавить 'merchant_api' в INSTALLED_APPS и выполнить
$ python manage.py syncdb
или, если используется South,
$ python manage.py migrate
Настройка
В settings.py нужно указать следующие настройки:
- MERCHANT_API_SHOP_ID - id магазина
- MERCHANT_API_SHOP_SECRET_KEY - секретный ключ магазина
- MERCHANT_API_ORDER_FORMS - (не обязательно) модуль с формой для обработки заказа
Использование
Написание логики обработки заказа
django-vkontakte-merchant не берет на себя ответственность за логику обработки заказа, т.к. эта логика может отличаться от сайта к сайту. Вместо этого можно реализовать любую логику, предоставив свою форму обработки уведомлений (унаследовав ее от базовой, в которой уже выполнена основная работа по проверке данных).
Для того, чтобы изменить логику обработки данных, следует указать модуль с формой обработки заказа в settings.py:
# settings.py MERCHANT_API_ORDER_FORMS = 'orders.forms'
В модуле orders.forms должна быть форма с названием OrderForm. Ее удобно унаследовать от merchant_api.forms.OrderForm. Пример:
# coding: utf-8
# my_project/orders/forms.py
from django import forms
from merchant_api.forms import OrderForm as MerchantOrderForm
from goods.models import Product, Purchase
class OrderForm(MerchantOrderForm):
def clean_currency(self):
# например, магазин поддерживает только рубли
currency = self.cleaned_data['currency']
if currency != '643':
raise forms.ValidationError('Currencies other than RUR are not supported')
return currency
def clean_notification_type(self):
# простой магазин, обрабатываем только уведомления
# типа "Изменение статуса заказа"
tp = self.cleaned_data['notification_type']
if not tp.startswith('order-state-change'):
raise forms.ValidationError('This notification type is not supported.')
return tp
def clean_item(self, item):
# переопределяйте этот метод, чтобы проверить, что заказаны
# правильные позиции по нужной цене
try:
product = Product.objects.get(pk = item['item_id'])
if product.price != int(item['price']):
raise forms.ValidationError("Price is invalid", 22)
if not product.have_enough(int(item['quantity'])):
raise forms.ValidationError("Can't buy so many", 24)
except Product.DoesNotExist:
raise forms.ValidationError("Invalid product id.")
def save(self, *args, **kwargs):
# тут можно выполнить любые доп. действия по обработке заказа
vk_order = super(OrderForm, self).save(*args, **kwargs)
for item in vk_order.items.all():
for x in range(0, item.quantity):
Purchase.objects.create(
product_id = item.item_id,
order = vk_order,
user = vk_order.django_user
)
return vk_order
urls.py
Для приема платежей следует подключить merchant_api.urls:
urlpatterns = patterns('',
#...
url(r'^merchant/', include('merchant_api.urls')),
#...
)
После этого следует указать адрес обратного вызова в настройках магазина (http://<домен>/merchant/callback в данном примере).
Клиентская часть
Инструкцию по написанию клиентской части можно найти в официальной документации по Merchant API ( http://vkontakte.ru/developers.php?id=-1_12904887&s=1 )
| File | Type | Py Version | Uploaded on | Size | # downloads |
|---|---|---|---|---|---|
| django-vkontakte-merchant-0.1.tar.gz (md5) | Source | 2010-10-31 | 12KB | 363 | |
- Author: Mikhail Korobov
- Home Page: http://bitbucket.org/kmike/django-vkontakte-merchant/
- Download URL: http://bitbucket.org/kmike/django-vkontakte-merchant/get/tip.gz
- License: MIT license
- Requires vkontakte(>=0.9.5)
- Categories
- Package Index Owner: kmike
- DOAP record: django-vkontakte-merchant-0.1.xml
