用于集成payfast.co.za支付系统的可插拔django应用程序。
django-payfast的Python项目详细描述
用于集成payfast.co.za支付系统的可插拔django应用程序。
Settings
在settings.py中指定您的凭据:
- PAYFAST_MERCHANT_ID
- PAYFAST_MERCHANT_KEY
- PAYFAST_URL_BASE:站点的面向公共的基url (用于限定传递给PayFast的通知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密钥 (默认为“远程地址”)。
有一个payfast服务器ip地址的选项(PAYFAST_IP_ADDRESSES)。 它是包含当前PayFast服务器的IP主机/网络地址的列表。 如果更改,则在settings.py中重写此选项。
您还必须在payfast.co.za上设置您的payfast帐户。登录到 管理面板,转到“我的帐户->;集成”,启用即时事务 通知(ITN)并提供通知URL。
当将用户传递到PayFastForm时,默认情况下表单将查找 用户的名字和姓氏字段。如果使用自定义用户 具有不同字段名的模型,您可以自定义字段的外观 通过设置这些可调用项:
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字段。
Usage
Payment form
payfast.forms.payfast form可用于构造HTML表单。它是 一个HTML输出的帮助表单,它不应该执行任何验证。
传递所有字段以形成“initial”参数。表单还有一个可选的 “user”参数:订单购买的用户实例。如果 指定了“user”、“name_first”、“name_last”和“email_address”字段 如果未传递“initial”,则将自动填充。
示例:
# 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) 更多选择。“商户ID”、“商户密钥”、“通知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}输出将是若干个<input type='hidden'>标记。
PayFastForm有一个带有PayFast服务器URL的“target”属性。
请注意,由您来实现订单处理逻辑。 订单处理应该在payfast.signals.data信号处理程序中执行。
^{tt1}$ signal
当payfast将数据发布到notify urlpayfast.signals.notify信号时 已发送。此信号不会针对可疑数据发送(当请求是 来自不受信任的IP,表单验证失败或付款重复)。
信号订阅者将获得一个带有PayFastOrderinstance的“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
要启动并运行notify url,请在url.py:
urlpatterns = patterns('', #... url(r'^payfast/', include('payfast.urls')), #... )