Django的SaferPay支付集成。
django-saferpa的Python项目详细描述
Django SaferPay
saferpay集成用于django
此软件包使用saferpay json api和saferpay支付页面接口。 这不是六个支付服务的官方套餐。
有关更多信息,请参见官方的saferpay json api。 再看看test.saferpay.com。
django设置
此django包用于与django oscar的cunconjunction。它可以和其他Django商店系统一起工作, 没有什么和奥斯卡有关。
它与dango 1.11一起使用,但应该/可以与django 2.0、2.1一起使用。
第一次更新settings.py
:
fromdjango.urlsimportreverse_lazyfromdjango.utils.translationimportugettext_lazyas_INSTALLED_APPS=[...'saferpay',]...SAFERPAY_APIURL='https://test.saferpay.com/api'SAFERPAY_USERNAME='API_XXX'SAFERPAY_PASSWORD='XXX'SAFERPAY_CUSTOMERID='xxxxxx'# a numberSAFERPAY_TERMINALID='xxxxxx'# a numberSAFERPAY_SUCCESS_CAPTURE_URL=reverse_lazy('yourshop:payment-capture')# your callback after getting the moneySAFERPAY_SUCCESS_URL=reverse_lazy('yourshop:thank-you')# your callback after a successfull orderSAFERPAY_FAIL_URL=reverse_lazy('yourshop:payment-failed')# your callback after a failed paymentSAFERPAY_ORDER_TEXT_NR=_('Payment for the company XXX, Order nr. %s.')SAFERPAY_FORCE_LIABILITYSHIFT_ACTIVE=False# default: FalseSAFERPAY_DO_NOTIFY=True# default: False...
你需要从你的商店应用程序中提供三个URL来为SaferPay网关提供回调。
SAFERPAY_SUCCESS_CAPTURE_URL
-成功捕获金额的saferpay回调 付款页初始化和付款页断言之后SAFERPAY_SUCCESS_URL
-一切顺利,saferpay回拨购物成功网址SAFERPAY_FAIL_URL
-出了问题,saferpay回调到商店失败url
在您的项目中urls.py
:
...url(r'',include('saferpay.urls')),...
创建数据库模型
./manage.pymigrate
Django Oscar设置
如果你用django奥斯卡就得django-oscar-saferpay 以处理安装过程并查看示例使用实现。
样本使用
您可以使用此代码作为示例。你需要把它整合到 你自己在商店系统中的看法。
- 初始化服务
fromsaferpay.gatewayimportSaferpayServicefromsaferpayimportexecptionsassp_execptionsdefbilling_address_for_saferpay(billing_address):"""Transform you shop billing address to a format that saferpay uses. Your billing_address object can be totaly differnt, adjust it to your needs. """data={}data['FirstName']=billing_address.first_namedata['LastName']=billing_address.last_namedata['Street']=billing_address.line1ifbilling_address.line2:data['Street2']=billing_address.line2data['Zip']=billing_address.postcodedata['City']=billing_address.cityreturndatadefpayment_init(request,order):""" Intizialize a new SaferpayService instance, with your order data. Adjust the the order calls for your shop. The init payload is created and after success you get redirected to the saferpay PayementPage. """saferpay_service=SaferpayService(order_id=order.number,amount=order.total.incl_tax,currency=order.total.currency,language_code=language_code)payload=saferpay_service.payload_init(billing_address=billing_address_data)try:token=saferpay_service.paymentpage_init(payload)request.session['saferpay_token']=tokenraiseRedirectRequired(saferpay_service.paymentpage_redirect().url)exceptsp_execptions.GatewayErrorase:# do your rollback in case of payment failure returnredirect(reverse_lazy('yourshop:payment-failed'))
- 断言并获取资金并下订单
fromsaferpay.gatewayimportSaferpayServicefromsaferpayimportexecptionsassp_execptionsdefpayment_capture(request):token=request.session['saferpay_token']saferpay_service=SaferpayService.init_from_transaction(token=token)try:status=saferpay_service.paymentpage_assert()except(sp_execptions.GatewayError,sp_execptions.TransactionDeclined,sp_execptions.UnableToTakePayment,sp_execptions.PaymentError)ase:# do your rollback in case of payment failure returnredirect(reverse_lazy('yourshop:payment-failed'))ifstatus=='CAPTURED':# register the payment in you shoplogger.info("Order #%s: payment successful, placing order",saferpay_service.order_id)try:# place the orderexceptUnableToPlaceOrderase:# go back to preview