用于集成payfast.co.za支付系统的可插拔Django应用程序。
项目描述
用于集成payfast.co.za支付系统的可插拔Django应用程序。
安装
$ 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_name和last_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_first和name_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')), #... )
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定选择哪一个,请了解有关安装包的更多信息。