跳转到主要内容

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 (13.1 kB 查看哈希值)

上传时间 源码

由以下提供支持