跳转到主要内容

用于将支付系统ASSIST集成到Django项目的应用程序。

项目描述

django-assist-ru - 是一个用于将支付系统ASSIST集成到Django项目的应用程序。

在使用前,请阅读ASSIST的官方文档(《http://assist.ru/files/manual_new.pdf》)。该应用程序实现了文档中描述的交互协议。

安装

像往常一样

$ pip install django-assist-ru

或者

$ easy_install django-assist-ru

或者

$ hg clone http://bitbucket.org/kmike/django-assist-ru/
$ cd django-assist-ru
$ python setup.py install

然后需要在INSTALLED_APPS中添加‘assist’,并执行

$ python manage.py syncdb

如果使用South,则用syncdb代替

$ python manage.py migrate

配置

在settings.py中需要指定以下设置

  • ASSIST_SHOP_IDP - 商店标识符(数字)

  • ASSIST_LOGIN - 登录名

  • ASSIST_PASSWORD - 密码

可选参数

  • ASSIST_TEST_MODE - 是否启用测试模式。默认为False(即启用战斗模式)。

  • ASSIST_SERVER - Assist“战斗”服务器地址。默认为 - https://secure.assist.ru

使用

要接收付款的表单应显示在编码为1251的页面上。对于使用utf-8编码的人,在django-assist-ru中有一个cp1251装饰器,它可以转换页面为1251,修正http标题,并更改meta标签

from assist.decorators import cp1251

@cp1251
@login_required
def go_to_assist(request)
    ...

付款表单

为了简化将用户发送到ASSIST的html表单的构建,在django-assist-ru中有两个表单:AssistMode1Form和AssistMode2Form(用于ASSIST的两种工作模式)。这些表单不需要验证数据,而是简化模板中的信息输出。

示例

# views.py

from django.shortcuts import get_object_or_404
from django.views.generic.simple import direct_to_template
from django.contrib.auth.decorators import login_required

from assist.decorators import cp1251
from assist.forms import AssistMode2Form

@cp1251
@login_required
def go_to_assist(request, order_id)
    order = get_object_or_404(Order, pk = order_id)
    form = AssistMode2Form(initial={
               'Order_IDP': order.id,
               'Subtotal_P': order.total,
               'Comment': order.name,
               'LastName': request.user.last_name,
               'FirstName': request.user.first_name,
               'Email': request.user.email,
               'Phone': request.user.get_profile().phone,
           })
    return direct_to_template(request, 'go_to_assist.html', {'form': form})

有关initial字段中允许的完整列表,可以参考ASSIST文档或查看源代码,字段名称是相同的。

django-assist-ru 不包含“购买”模型,因为这个模型在每个网站之间可能会有所不同。开发者的任务是形成并传递 Order_IDP(订单号)和 Subtotal_P(订单总额)参数到表单中。其他字段是可选的。

相应的模板

{% extends 'base.html' %}

{% block content %}
    <form action="{{ form.target }}" method="POST">
        <p>{{ form.as_p }}</p>
        <p><input type="submit" name='SUBMIT' value="Купить"></p>
    </form>
{% endblock %}

表单将以一组隐藏的 input 标签的形式输出。

AssistMode1Form 和 AssistMode2Form 形式的 target 属性包含一个 URL,该 URL 用于提交表单。在测试模式下,这是一个测试 URL,在战斗模式下,这是一个战斗 URL。

获取支付结果

from assist.models import AssistAuthResult
AssistAuthResult.objects.update_auth_report()

此方法通过向 ASSIST 服务器请求数据来获取授权结果,并根据这些结果在数据库中创建/更新记录(每个 BillNumber 对应一个 AssistAuthResult 记录)。

根据 ASSIST 规则,这个操作不应频繁执行,每 10 分钟不应超过 1 次。

当用户从支付页面返回时,不应执行此操作,最好按计划执行。

获取订单的当前支付状态

最后交易的最后一个结果不一定是 Assist 中的支付状态,仅计算订单的最后交易可能导致某些支付丢失。

具有“处理中”状态的交易在用户每次进入 Assist 支付页面时都会创建。因此,可以创建多个“处理中”支付会话并支付较早的支付。最终,具有“处理中”状态的结果(无论是按日期还是按编号)将替代“已支付”状态。然后,“处理中”状态将因超时而变为“未成功”,这将导致有一个未支付的订单,尽管实际上订单已被支付。

为了避免这种情况,采用了以下方法

  • 如果有任何具有积极结果的交易(例如,“已授权”),则忽略具有相应负面结果的交易(对于“已授权”,“未授权”)。

  • “处理中”状态完全不计算。对于由用户触发的操作,此状态仅意味着用户已进入 ASSIST 页面。对于由程序触发的操作,“处理中”状态既不保证唯一性也不保证执行顺序。而不是检查操作是否已开始,可以重新启动操作,这对于取款操作是安全的:在最坏的情况下,只是从 ASSIST 获得错误。

在 django-assist-ru 中有一个模型管理器方法实现了此方法

from assist.models import AssistAuthResult
order_id = 145
bill = AssistAuthResult.objects.actual_for_order(order_id)

双阶段工作模式

在双阶段机制中,信用卡授权过程和金融交易过程是分开的。

要激活双阶段模式,应在创建表单时传递参数 Delay=1

@cp1251
@login_required
def go_to_assist(request, order_id)
    order = get_object_or_404(Order, pk = order_id)
    form = AssistMode1Form(initial={
               'Order_IDP': order.id,
               'Subtotal_P': order.total,
               'Delay': 1
           })
    return direct_to_template(request, 'go_to_assist.html', {'form': form})

资金将不会被扣除,而是被锁定。资金的扣除将单独启动(在锁定后的 14 天内)通过 charge 方法。

bill = AssistAuthResult.objects.get(id=123)
bill.charge()

可以通过 refund 方法在不等待 14 天的情况下解除资金锁定。

bill = AssistAuthResult.objects.get(id=123)
bill.refund()

退货订单的资金是通过同一命令执行的。

项目详细信息


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装软件包的更多信息。

源分布

django-assist-ru-0.6.0.tar.gz (14.9 kB 查看散列)

上传时间

由以下组织支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面