跳转到主要内容

用于集成payfast.co.za支付系统的可插拔Django应用程序。

项目描述

用于集成payfast.co.za支付系统的可插拔Django应用程序。

https://img.shields.io/pypi/v/django-payfast.svg https://img.shields.io/badge/source-GitHub-lightgrey.svg https://img.shields.io/github/issues/pjdelport/django-payfast.svg https://travis-ci.org/pjdelport/django-payfast.svg?branch=master https://codecov.io/github/pjdelport/django-payfast/coverage.svg?branch=master

安装

$ pip install django-payfast

然后添加‘payfast’到INSTALLED_APPS并执行

$ python manage.py migrate

设置

在settings.py中指定您的凭据

  • PAYFAST_MERCHANT_ID

  • PAYFAST_MERCHANT_KEY

  • PAYFAST_URL_BASE:您的站点公开面向的基础URL(用于对PayFast传递的notify URL进行资格鉴定)

PAYFAST_URL_BASE可以是字符串,也可以是返回字符串的可调用对象。例如,如果您使用Django的站点框架来配置您的域名

def PAYFAST_BASE_URL():
    from django.contrib.sites.models import Site
    site = Site.objects.get_current()
    return 'http://{}'.format(site.domain)

如果您的Web服务器位于反向代理后面,您还应该指定PAYFAST_IP_HEADER选项。它是具有客户端IP地址的request.META键(默认为‘REMOTE_ADDR’)。

存在一个使用PayFast服务器IP地址的选项(PAYFAST_IP_ADDRESSES)。这是一个包含当前PayFast服务器IP主机/网络地址的列表。如果它们会更改,请在settings.py中覆盖此选项。

您还必须在payfast.co.za上设置您的PayFast账户。登录到管理员面板,转到“我的账户 -> 集成”,启用即时交易通知(ITN)并提供通知URL。

当将用户传递给PayFastForm时,表单将默认在用户上查找first_namelast_name字段。如果您使用的是具有不同字段名的自定义用户模型,您可以自定义如何查找字段,通过设置这些可调用函数。

PAYFAST_GET_USER_FIRST_NAME = lambda user: user.my_first_name()
PAYFAST_GET_USER_LAST_NAME = lambda user: user.my_last_name()

或者,将这些设置为None以禁用从用户初始化PayFast name_firstname_last字段。

用法

支付表单

payfast.forms.PayFastForm可用于构建HTML表单。它是一个用于HTML输出的辅助表单,它不应执行任何验证。

将所有字段传递给表单的“initial”参数。表单还有一个可选的“user”参数:它是购买订单的用户实例。如果指定了“user”,则如果未通过“initial”传递,则自动填充“name_first”、“name_last”和“email_address”字段。

示例

# 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 payfast.forms import PayFastForm

@login_required
def pay_with_payfast(request, order_id):

    # Order model have to be defined by user, it is not a part
    # of django-payfast
    order = get_object_or_404(Order, pk = order_id)

    form = PayFastForm(initial={
        # required params:
        'amount': order.total,
        'item_name': 'the name of the item being charged for',

        # optional params:
        # 'return_url' : 'http://my-site.com/orders/payfast/return/',
        # 'cancel_url' : 'http://my-site.com/orders/payfast/cancel/'
        # ... etc.
    }, user=order.user)

    return direct_to_template(request, 'pay_with_payfast.html', {'form': form})

有关更多选项,请参阅PayFast文档(http://www.payfast.co.za/c/std/website-payments-variables)。‘merchant_id’、‘merchant_key’、‘notify_url’和‘signature’参数会自动处理。

模板

{% extends 'base.html' %}

{% block content %}
    <form action="{{ form.target }}" method="POST">
        <p>{{ form.as_p }}</p>
        <p><input type="submit" value="Buy Now"></p>
    </form>
{% endblock %}

{{ form.as_p }}的输出将是一系列<input type='hidden'>标签。

PayFastForm有一个带有PayFast服务器URL的‘target’属性。

请注意,实现订单处理逻辑取决于您。订单处理应在payfast.signals.data信号处理程序中执行。

payfast.signals.notify 信号

当PayFast向通知URL发送数据时,将发送payfast.signals.notify信号。对于可疑数据(当请求来自不受信任的IP、表单验证失败或付款重复时),不会发送此信号。

信号订阅者将获得一个带有PayFastOrder实例的“order”参数。

示例

import payfast.signals

def notify_handler(sender, **kwargs):
    payfast_order = kwargs['order']

    if payfast_order.payment_status == 'COMPLETE':

        # The order is paid (merchant_id check and check for duplicate
        # payments is already handled by django-payfast)

        amount = payfast_order.amount
        # your business logic
        # ...
    else: # the order is not paid
        # your business logic
        # ...

payfast.signals.notify.connect(notify_handler)

urls.py

为了使通知URL生效,请将payfast.urls包含在您的urls.py中

urlpatterns = patterns('',
    #...
    url(r'^payfast/', include('payfast.urls')),
    #...
)

项目详情


下载文件

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

源分发

django-payfast-0.3.tar.gz (26.8 kB 查看哈希)

上传时间

构建分发

django_payfast-0.3-py3-none-any.whl (19.4 kB 查看哈希)

上传于 Python 3

django_payfast-0.3-py2-none-any.whl (19.4 kB 查看哈希)

上传于 Python 2

由以下支持