Vkontakte Merchant API django应用
项目描述
django-vkontakte-merchant - 用于将Vkontakte (Merchant API)支付系统集成到Django项目的应用。
使用前,请查阅Merchant API的官方文档(http://vkontakte.ru/developers.php?id=-1_12904887&s=1)。
安装
$ pip install -U django-vkontakte-merchant vkontakte
然后需要在INSTALLED_APPS中添加‘merchant_api’并执行
$ 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)。
客户端部分
客户端编写指南可以在商户API的官方文档中找到(http://vkontakte.ru/developers.php?id=-1_12904887&s=1)
项目详情
关闭
django-vkontakte-merchant-0.1.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 02f1045ce00d955a6f01c0fa3fde1163d32dba8b082db70b61c30602eec2f7f1 |
|
MD5 | 00acfd77b5b1bf6a25149bfcfcd51ab9 |
|
BLAKE2b-256 | a0b6f571b88eae9cccdcc7f11de5ae4e141bbcc4004da6ede40f2a06e26284ee |