下面就详细讲解一下“详解基于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_pay
API方法来创建一个支付订单。该方法需要传递订单号、订单金额、订单主题、返回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技术站