首页 > 编程 > Python > 正文

django 实现电子支付功能的示例代码

2020-02-15 22:16:52
字体:
来源:转载
供稿:网友

思路:调用第三方支付 API 接口实现支付功能。本来想用支付宝来实现第三方网站的支付功能的,但是在实际操作中发现支付宝没有 Python 接口,网上虽然有他人二次封装的的 Python 接口,但是对我这个小白白来说上手还是有点难度,后来发现 PayPal 有现成的 Django 模块,想着以学习的目的来实现这一功能(其实还是自己辣鸡),就决定以 PayPal 的电子支付功能来练手。

首先,安装 PayPal 的 Django 模块:django-paypal,具体介绍可以参考 GitHub上说明: https://github.com/spookylukey/django-paypal

pip install django-paypal

然后在 settings.py 中的 INSTALLED_APPS 将 'paypal.standard.ipn' 加入。并在 settings.py 中添加下列语句。

# 此付款机制作为测试用PAYPAL_TEST = True# 设置收款的 PayPal 电子邮件账户PAYPAL_REVEIVER_EMAIL = 'your email'

执行同步数据库操作。

./manage.py migrate

urls.py 中加入下列样式。分别为付款完成通知,处理账务,显示完成付款,取消付款操作。

url(r'^paypal/', include('paypal.standard.ipn.urls')), # 付款完成通知url(r'^payment/(/d+)/$', views.payment),url(r'^done/$', views.payment_done),url(r'^canceled/$', views.payment_canceled),

PayPal 付款操作,建立含有正确数据的付款按钮。

@login_requireddef payment(request, order_id): all_categories = models.Category.objects.all() try:  order = models.Order.objects.get(id=order_id) except:  messages.add_message(request, messages.WARNING, "订单编号错误,无法处理付款。")  return redirect('/myorders/') all_order_items = models.OrderItem.objects.filter(order=order) items = list() total = 0 for order_item in all_order_items:  t = dict()  t['name'] = order_item.product.name  t['price'] = order_item.product.price  t['quantity'] = order_item.quantity  t['subtotal'] = order_item.product.price * order_item.quantity  total = total + order_item.product.price  items.append(t) host = request.get_host() paypal_dict = {  "business": settings.PAYPAL_REVEIVER_EMAIL,  "amount": total,  "item_name": "迷你小电商商品编号:{}".format(order_id),  "invoice": "invoice-{}".format(order_id),  "currency_code": 'CNY',  "notify_url": "http://{}{}".format(host, reverse('paypal-ipn')),  "return_url": "http://{}/done/".format(host),  "cancel_return": "http://{}/canceled/".format(host),  } paypal_form = PayPalPaymentsForm(initial=paypal_dict) template = get_template('payment.html') html = template.render(context=locals(), request=request) return HttpResponse(html)

由于用到了 django-paypal 提供的 PayPalPaymentForm 类。因此在 views.py 的前面也要导入这个类。另外,因为用到了 settings.py 中的常数,所以也要导入 settings,语句如下:

from django.conf import settingsfrom paypal.standard.forms import PayPalPaymentsFormfrom django.core.urlresolvers import reverse            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表