详解基于python-django框架的支付宝支付案例

下面就详细讲解一下“详解基于python-django框架的支付宝支付案例”的完整攻略。

案例简介

本案例旨在使用Python Django框架实现支付宝支付功能。在本案例中,我们将使用Python Django创建并管理Web应用程序,同时使用支付宝API进行支付处理。整个案例将由两部分组成:创建并设置Python Django框架Web应用程序,以及使用Python alipay-sdk-python库进行支付处理。下面将逐步介绍这两部分内容。

第一部分:创建并设置Python Django框架Web应用程序

在本部分中,我们将创建并设置Python Django框架Web应用程序。我们假设您已经安装好了Python(版本3.x以上)和Django(版本2.x以上)。如果没有,您可以根据您的平台安装它们。

步骤1:创建Django项目和应用

在命令行中以管理员身份运行以下命令:

django-admin startproject myproject

“myproject”将是您的Web应用程序的名称,您可以把它改成您喜欢的名称。然后进入项目文件夹并创建应用:

cd myproject
python manage.py startapp myapp

“myapp”将是您的应用程序的名称,您可以把它改成您喜欢的名称。

步骤2:创建模型和数据库

我们需要创建一个模型,来存储订单和支付记录。在“myapp”应用程序的models.py中,添加以下代码:

from django.db import models

class Order(models.Model):
    sn = models.CharField(max_length=50, unique=True)
    amount = models.DecimalField(max_digits=10, decimal_places=2)
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.sn

class Payment(models.Model):
    sn = models.CharField(max_length=50, unique=True)
    amount = models.DecimalField(max_digits=10, decimal_places=2)
    created_at = models.DateTimeField(auto_now_add=True)
    order = models.ForeignKey(Order, on_delete=models.CASCADE)

    def __str__(self):
        return self.sn

models.py文件中,我们创建了两个模型:订单(Order)和支付(Payment)。每个订单都有一个唯一的序列号(sn),一个金额(amount)以及一个创建时间(created_at)。每个支付都有一个唯一的序列号、一个金额、一个创建时间,以及一个订单(使用外键order)。这些信息将保存在数据库中。接下来运行如下命令,生成迁移文件和升级数据库:

python manage.py makemigrations
python manage.py migrate

该命令会在您的应用程序中生成迁移文件,并将更改应用到数据库。

步骤3:创建URL和视图

我们需要创建一个URL来处理支付请求,并编写相应的视图。在“myapp”应用程序的urls.py文件中,添加以下代码:

from django.urls import path
from .views import pay

urlpatterns = [
    path('pay/', pay, name='pay'),
]

urls.py文件中,我们为/pay/路径指定了一个视图函数“pay”。接下来,在views.py文件中添加以下代码:

from django.shortcuts import render
from django.http import HttpResponse
from .models import Order, Payment
from alipay import AliPay
import time

APPID = 'xxx'  # 您的appid
APP_PRIVATE_KEY_PATH = 'xxx'  # 您的应用私钥文件路径
ALIPAY_PUBLIC_KEY_PATH = 'xxx'  # 支付宝公钥文件路径
ALIPAY_GATEWAY_URL = 'https://openapi.alipaydev.com/gateway.do'  # 支付宝开发环境网关地址

def pay(request):
    if request.method == 'POST':
        sn = request.POST.get('sn')
        amount = request.POST.get('amount')
        order = Order.objects.get(sn=sn)
        payment = Payment.objects.create(sn=f'{sn}-{int(time.time())}', amount=amount, order=order)
        alipay = AliPay(
            appid=APPID,
            app_notify_url=None,  # 默认支付宝通知url
            app_private_key_string=open(APP_PRIVATE_KEY_PATH).read(),
            alipay_public_key_string=open(ALIPAY_PUBLIC_KEY_PATH).read(),
            sign_type='RSA2',  # RSA 或者 RSA2
            debug=True,  # 默认False
        )
        # 手机网站支付,需要跳转到https://openapi.alipay.com/gateway.do? + order_string
        order_string = alipay.api_alipay_trade_wap_pay(
            out_trade_no=payment.sn,
            total_amount=str(payment.amount),
            subject='订单%s' % order.sn,
            return_url='http://127.0.0.1:8000/pay/success/',
            notify_url='http://127.0.0.1:8000/pay/notify/',
        )
        return HttpResponse(order_string)
    return render(request, 'pay.html')

views.py文件中,我们实现了pay函数来处理支付请求。该函数从请求中获取订单号和订单金额,并根据它们创建一个新的支付记录。然后使用支付宝SDK创建一个对象,并调用API请求创建支付订单。最后,将API返回的URL作为HTTP响应返回。

步骤4:创建模板

最后,我们需要为我们的应用程序创建一个模板,显示付款按钮。创建一个名为pay.html的文件并添加以下代码:

{% extends 'base.html' %}

{% block content %}
  <form method="POST" action="{% url 'pay' %}">
    {% csrf_token %}
    <label for="sn">订单号:</label>
    <input id="sn" type="text" name="sn" required>
    <br>
    <label for="amount">金额:</label>
    <input id="amount" type="number" name="amount" min="0.01" step="0.01" required>
    <br>
    <button type="submit">支付</button>
  </form>
{% endblock %}

在模板中,我们使用POST方法向/pay/路径发出请求,并传递订单号和订单金额。用户在填写完订单号和金额后,点击“支付”按钮即可。

第二部分:使用Python alipay-sdk-python库进行支付处理

下面我们来讲解如何使用Python alipay-sdk-python库进行支付处理。

步骤1:下载并安装alipay-sdk-python库

使用以下命令来安装alipay-sdk-python:

pip install -U alipay-sdk-python

步骤2:导入所需的库和配置信息

from alipay import AliPay
import time

APPID = 'xxx'  # 您的appid
APP_PRIVATE_KEY_PATH = 'xxx'  # 您的应用私钥文件路径
ALIPAY_PUBLIC_KEY_PATH = 'xxx'  # 支付宝公钥文件路径
ALIPAY_GATEWAY_URL = 'https://openapi.alipaydev.com/gateway.do'  # 支付宝开发环境网关地址

步骤3:创建AliPay对象和调用API

在Python中,我们可以使用alipay-sdk-python库来轻松地使用支付宝API。首先,我们需要创建一个AliPay对象,以便可以使用它来调用API。构造函数中的参数分别为您的应用程序的APPID、应用私钥、支付宝公钥、签名类型和调试标志。

alipay = AliPay(
    appid=APPID,
    app_notify_url=None,  # 默认支付宝通知url
    app_private_key_string=open(APP_PRIVATE_KEY_PATH).read(),
    alipay_public_key_string=open(ALIPAY_PUBLIC_KEY_PATH).read(),
    sign_type='RSA2',  # RSA 或者 RSA2
    debug=True,  # 默认False
)

使用创建的AliPay对象,即可调用api_alipay_trade_wap_payAPI方法来创建一个支付订单。该方法需要传递订单号、订单金额、订单主题、返回URL和通知URL等参数。

order_string = alipay.api_alipay_trade_wap_pay(
    out_trade_no='order_sn',  # 订单号
    total_amount='0.01',  # 订单金额
    subject='test',  # 订单主题
    return_url='http://yourdomain.com/return.html',  # 订单支付后返回的URL
    notify_url='http://yourdomain.com/notify.html'  # 支付宝服务器后台通知URL
)

注意,out_trade_no必须是您的应用程序中唯一的订单号,在支付宝中也必须是唯一的,notify_url用于支付后回调。

至此,我们已经完成了基于Python Django框架的支付宝支付案例。

两个示例都基于支付宝开发环境,仅用于测试目的。在实际生产环境中,请使用真实的支付宝账户和支付渠道。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解基于python-django框架的支付宝支付案例 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • Django中的用户身份验证示例详解

    下面我就为您详细讲解 “Django中的用户身份验证示例详解”。这篇文章主要探讨 Django web开发框架中的用户身份验证,包括两个示例,分别涉及当用户已登录和当用户未登录时的两种情况。 示例1:用户已登录 在Django中,可以使用 @login_required 装饰器来限制只有已经登录的用户才能访问某些视图函数。下面是一个示例: from djan…

    Django 2023年5月16日
    00
  • Linux下面如何安装Django

    首先你需要肯定你的机子上装了Python 现在ubuntu已经自带,所以不必操心 当然你可以在你的机子下测试一下,只需在 terminal 下输入 python 如果出现下面的界面就说明你机子已经装了python [plain] view plaincopy Python 2.7.3 (default, Aug  1 2012, 05:14:39)    […

    Django 2023年4月9日
    00
  • 【Python web 开发】django rest framwork 的token 登录和原理

      背景: 有些接口比如提交订单,获取用户列表是要用到用户信息的,是要用户登录后才能进行的 用户登录在前后端分离系统中与我们之前基于模板template进行开发是有区别的 思考一个问题:为什么我们的django  rest framwork 会有登录和退出功能呢? 因为,这里有配置哦 这里有 login 和loginout,里面的 login 调用了logi…

    Django 2023年4月12日
    00
  • Django – 权限(2)- 动态显示单级权限菜单

    一、权限组件 1、上篇随笔中,我们只是设计好了权限控制的表结构,有三个模型,五张表,两个多对多关系,并且简单实现了对用户的权限控制,我们会发现那样写有一个问题,就是权限控制写死在了项目中,并且没有实现与我们的业务逻辑解耦,当其他项目要使用权限控制时,要再重复写一遍权限控制的代码,因此我们很有必要将权限控制的功能开发成一个组件(可插拔)。   组件其实就是一个…

    Django 2023年4月10日
    00
  • django之登陆验证,cookie,session

    一:会话技术:       1:什么是会话跟踪技术:     首先我们应该知道,什么是会话。当浏览器(客户端)第一次访问某个网站的时候(服务器)。该浏览器便和服务器建立了单独的会话。直到浏览器关闭或服务器断开。但是一个网站有许多请求,如/login/,/index/等,而http协议是一种无状态的协议,一次请求一次链接,并不会保存状态信息。而我们一些信息,常…

    Django 2023年4月12日
    00
  • Django——XSS攻击及处理

    XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。 这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。 攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内…

    Django 2023年4月15日
    00
  • django 类视图的使用

    使用django框架也有挺长时间了,但是一直都没有用过django的类视图,因为之前跟着网上教程学习时,觉得类视图是进阶的知识,可能目前还达不到吧 但今天在做项目的时候用到了,感觉真的太方便了吧,而且也没有想象中的那么难或者深奥呀,可能这就是对新知识的恐惧吧,呵呵~也就那样罢了 使用django的类视图首先要在app应用中的views.py文件中导入djan…

    Django 2023年4月9日
    00
  • PyCharm创建Django项目的简单步骤记录

    下面是详细讲解“PyCharm创建Django项目的简单步骤记录”的完整攻略。 1.环境准备 在开始创建Django项目之前,需要准备好以下环境: Python环境,可以到https://www.python.org/downloads/下载Python的安装包进行安装。 PyCharm IDE,可以到https://www.jetbrains.com/py…

    Django 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部