支付宝现如今是付款刚需!今天我用Django开发一款支付宝出来!

PHP电商系统开发实战:从零部署到二次开发完整指南 最近在帮朋友做一个线上烘焙店的系统,从商品展示到订单管理,再到会员积分,功能点不少。朋友预算有限,希望找一个成熟、完整、能快速上线的方案。经过一番搜索和对比,我发现很多同学在做毕业设计或者个人项目时,也面临着类似的需求:需要一个功能齐全、代码规范、带完整数据库的电商类系统源码作为学习和开发的基础。 今天要分享的“沁心线上面包甜品系统”正是这样一个项目。它基于经典的PHP开发,涵盖了前端展示、后台管理、购物车、订单处理等核心电商模块,并且附带了完整的数据库SQL文件。对于想学习PHP全栈开发、准备毕业设计,或 阅读详情

目录

一. 开发前的准备

1. 必须了解的知识

  • SDK:软件开发工具包,可以为开发者提供快速开发的工具
  • 沙箱环境:也就是测试环境
  • 支付宝支付金额的精度:小数点后两位(面试)
  • 支付宝用的什么加密方式:RSA
  • 2. 沙箱环境的配置
  • ① 登录支付宝开放平台
  • https://auth.alipay.com/login/ant_sso_index.htm?goto=https%3A%2F%2Fopen.alipay.com%2Fplatform%2Fhome.htm

② 进入管理中心后选择研【研发服务】

 

 

 

 

 

 

 

 

③ 生成RSA密钥

  • 选择【查看应用公钥】

 

 

 

  •  
  • 选择【查看应用公钥生成方法】

 

 

 

  •  
  • 下载秘钥生成工具
  • 链接已经找好了,windows的用户直接下载:https://ideservice.alipay.com/ide/getPluginUrl.htm?clientType=assistant&platform=win&channelType=WEB
  • 安装后打开工具直接选择【生成秘钥】

 

 

 

  •  

④ 将生成的应用公钥输入表单中,选择【保存】,系统会根据输入的应用公钥自动生成支付宝公钥,可以选择【设置/查看】

 

 

 

 

 

 

 

 

⑤下载沙箱钱包APP,用于支付测试

 

 

 

 

注意: 生成秘钥工具生成的应用公钥是用来生成支付宝公钥,剩下一个应用私钥注意保存。

3. 开发环境介绍

  • 操作系统:Win10
  • 编辑器:PyCharm 2019.2
  • 调试:Chrome 77.0.3865.75
  • Python版本:Python 3.7.x
  • Django版本:Django 2.2.5
  • 4. 支付宝支付流程
  • 用户点击支付时,网站根据支付宝的 APPID / 网关 / 支付宝公钥私钥 / SDK生成地址,再根据生成的地址,让用户跳转到支付宝进行支付。用户支付完成后,支付宝会给网站发送两个请求,分别是get和post请求。get请求是从支付宝网站跳转到自己的网站,post请求是向自己的网站发送支付相关的信息,网站可以凭借这些信息去修改网站订单的状态。
  • 二. 开发实施流程
  • 1. 商品数据表的创建
  • model.py:
from django.db import models
# Create your models here.
class Goods(models.Model):
    goods_name = models.CharField(max_length=32)
    goods_price = models.FloatField()
class Order(models.Model):
    order_number = models.CharField(max_length=64)
    status_choices = ((0, '未支付'), (1, '已支付'))
    order_status = models.IntegerField(choices=status_choices, default=0)
    goods = models.ForeignKey(to='Goods', on_delete=models.CASCADE)

在Terminal中执行python manage.py makemigrations和python manage.py migrate,或者到工程目录下执行这两条指令,完成建表。

C:\Users\thanlon\PycharmProjects\alipay_django>python manage.py makemigrations
C:\Users\thanlon\PycharmProjects\alipay_django>python manage.py migrate

 

 

 

 

 

2. 购物车视图的构建

向商品表插入数据

 

 

 

 

构建商品信息页面

urls.py:

from django.contrib import admin
from django.urls import path
from app import views
urlpatterns = [
    path('admin/', admin.site.urls),
    path('goods/', views.goods),
]

views.py:

from django.shortcuts import render
from app import models
# Create your views here.
def goods(request):
    goods_list = models.Goods.objects.all()
    # print(goods_list)
    # <QuerySet [<Goods: Goods object (1)>, <Goods: Goods object (2)>, <Goods: Goods object (3)>, <Goods: Goods object (4)>]>
    return render(request, 'goods.html', {'goods_list': goods_list})

goods.html:

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>商品信息</title>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css"
          integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
</head>
<body>
<div class="container">
    <div class="row" style="margin-top: 10px">
        <h4 style="text-align: center;font-weight: bold">Django支付宝支付案例</h4>
    </div>
    <div class="row" style="margin-top: 10px">
        <div class="col-md-4 col-md-offset-4">
            <table class="table table-bordered">
                {% for row in goods_list %}
                    <tr style="text-align: center">
                        <td>{{ row.id }}</td>
                        <td>{{ row.goods_name }}</td>
                        <td>{{ row.goods_price }}</td>
                        <td><a href="/purchase/{{ row.id }}">购买</a></td>
                    </tr>
                {% endfor %}
            </table>
        </div>
    </div>
</div>
<div class="container-fluid" style="color: #b2bcc5;margin-top: 20px;margin-bottom: 2px">
    <div class="row">
        <div class="col-md-12  text-center" style="padding: 40px">
            Copyright © 2019-2020&nbsp;蓝色旗帜 版权所有&nbsp;
            <a target="_blank_" href="http://www.miit.gov.cn/" style="color:#b2bcc5;">豫ICP备19014367号-1</a>
        </div>
    </div>
</div>
</body>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js"
        integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa"
        crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js"
        integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa"
        crossorigin="anonymous"></script>
</html>

 

 

 

 

 

3. 订单支付

① 把生成好的应用私钥和支付宝公钥以及支付宝网站支付接口pay.py也放在项目根目录下,如下图所示:

 

 

 

 

② 安装pycryptodome模块

pip install pycryptodome,接口依赖于该加密模块。

③ 添加路由

urls.py:

from django.contrib import admin
from django.urls import path
from app import views
urlpatterns = [
    path('admin/', admin.site.urls),
    path('goods/', views.goods),
    path('purchase/<goods_id>/', views.purchase),
]

④ 编写订单支付逻辑

views.py:

from django.shortcuts import render, redirect
from app import models
import uuid
from utils.pay import AliPay
# Create your views here.
def goods(request):
    goods_list = models.Goods.objects.all()
    # print(goods_list)
    # <QuerySet [<Goods: Goods object (1)>, <Goods: Goods object (2)>, <Goods: Goods object (3)>, <Goods: Goods object (4)>]>
    return render(request, 'goods.html', {'goods_list': goods_list})
def purchase(request, goods_id):
    '''
    订单支付
    :param request:
    :param goods_id:传过来的商品id
    :return:跳转到支付宝支付页面
    '''
    # 获取商品信息,因为向支付宝接口发送请求的时候需要携带该商品相关信息
    obj_goods = models.Goods.objects.get(pk=goods_id)  # pk就是商品的标识,等价于使用id
    '''
    生成订单
    '''
    order_number = str(uuid.uuid4())
    # print(order_number)  # bd9ee7fe-aca5-449d-acd1-63bcd8e30cde
    models.Order.objects.create(
        order_number=order_number,
        goods=obj_goods,  # 或者goods_id=obj_goods.id
    )
    '''
    跳转到支付宝支付页面
    '''
    # 实例化对象
    alipay = AliPay(
        appid='2016101200668044',
        app_notify_url=' ',  # 支付宝发送支付状态信息的地址,支付宝会向这个地址发送post请求,可以先不写但是必须有内容(我这里用的是空格)
        return_url=' ',  # 将用户浏览器地址重定向回原来的地址,支付宝会向这个地址发送get请求,可以先不写但是必须有内容
        alipay_public_key_path='keys/alipay_public_2048.txt',  # 支付宝公钥
        app_private_key_path='keys/app_private_2048.txt',  # 应用私钥
        debug=True,  # 默认是True代表测试环境,False代表正式环境
    )
    # 定义请求地址传入的参数
    query_params = alipay.direct_pay(
        subject=obj_goods.goods_name,  # 商品的简单描述
        out_trade_no=order_number,  # 商品订单号
        total_amount=obj_goods.goods_price,  # 交易金额(单位是元,保留两位小数)
    )
    # 需要跳转到支付宝的支付页面,所以需要生成跳转的url
    pay_url = 'https://openapi.alipaydev.com/gateway.do?{0}'.format(query_params)
    return redirect(pay_url)

成功跳转到支付页面:

 

 

 

 

订单表生成数据:

 

 

 

 

4. 订单状态的更新

① 编写视图函数show_msg来接收支付宝的发送过来的get请求

支付成功后,支付宝向我们指定的地址发送get请求,也就从支付宝回到我们自己的网站。我们需要根据请求附带的信息,如:

http://106.12.115.136:5000/show_msg/?charset=utf-8&out_trade_no=fc4252b0-b0a4-480a-bd83-aaaca3745378&method=alipay.trade.page.pay.return&total_amount=369.00&sign=Is%2FhB%2FmO2c64JerilFTYTwk%2BlR%2FHoCE1E5EOdzZ0DIotykMBuXB0023z0XpmsNq3kKutAF%2FbVusrsrdqUwPeRX%2F4nYphZOWHdrQUYVkY%2BsOdAJl1hfuVRySRBwYVTnbNJpQpnHJb9uQtFRcaktvgrGZKdd3gZCETf90l12JEsG7ishPgvsYIJVvI1VtSKTNvUvk3XxZoiBoyv5h3Wu0wENoEHS3HaHnI0hloTZB9rccW%2Bq7eyVj8dSKcOw51rti%2FBBNfmN%2BpLBTtXn4nwyQDmh%2BnTBVKy%2BY8ifai8iedwhX5I0l7mLfFRZvXf1C8F%2BsxJf4fT2%2Ft7czkJKiOwXBsPg%3D%3D&trade_no=2019092122001473661000497724&auth_app_id=2016101200668044&version=1.0&app_id=2016101200668044&sign_type=RSA2&seller_id=2088102179220884&timestamp=2019-09-21+14%3A20%3A07

来进行验证,是否支付成功。下面是实现该功能的核心代码:

urls.py:(将路由添加到utls.py文件中)

path('show_msg/', views.show_msg),

views.py:

def show_msg(request):
    if request.method == 'GET':
        alipay = AliPay(
            appid="2016101200668044",  # APPID
            app_notify_url='http://127.0.0.1:8000/check_order/',
            return_url='http://127.0.0.1:8000/show_msg/',
            app_private_key_path='keys/app_private_2048.txt',  # 应用私钥
            alipay_public_key_path='keys/alipay_public_2048.txt',  # 支付宝公钥
            debug=True,  # 默认是False
        )
        params = request.GET.dict()  # 获取请求携带的参数并转换成字典类型
        print(
            request.GET)  # <QueryDict: {'charset': ['utf-8'], 'out_trade_no': ['04f09b6f-e792-4a1d-8dbc-c68f1d046622'], ……}
        print(params)  # {'charset': 'utf-8', 'out_trade_no': '04f09b6f-e792-4a1d-8dbc-c68f1d046622',……}
        sign = params.pop('sign', None)  # 获取sign的值
        # 对sign参数进行验证
        status = alipay.verify(params, sign)
        if status:
            return render(request, 'show_msg.html', {'msg': '支付成功'})
        else:
            return render(request, 'show_msg.html', {'msg': '支付失败'})
    else:
        return render(request, 'show_msg.html', {'msg': '只支持GET请求,不支持其它请求'})

show_msg.html:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>支付结果</title>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css"
          integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
</head>
<body>
<div class="container">
    <div class="row" style="margin-top: 30px">
        <div class="col-md-4 col-md-offset-4">
            <div class="panel panel-primary">
                <div class="panel-body text-center">{{ msg }}!</div>
            </div>
        </div>
    </div>
</div>
</body>
</html>

支付成功的截图:

 

 

 

 

① 编写视图函数check_order来接收支付宝的发送过来的POST请求,根据POST过来的请求体内容,判断是否支付成功,如果支付成功,把订单支付状态改为已支付。

注意:在本地测试app_notify_url参数必须通过公网接收请求,支付宝只能向外网发送POST请求,所以必须把项目运行在具有公网ip的服务器上,第三部分【三. 支付项目部署】会论述到。这里把视图函数逻辑完成。

因为需要支持POST请求,所以需要修改配置文件:

settings.py

…
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    # 'django.middleware.csrf.CsrfViewMiddleware', # 注释掉这一行,就不会报CSRF cookie not set.)的错误
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
…

views.py:(需要将所有的 app_notify_url 的值修改为公网地址)

def check_order(request):
    '''
    支付宝通知支付的结果信息,如果支付成功可以用来修改订单的状态
    :param request:
    :return:
    '''
    if request.method == 'POST':
        alipay = AliPay(
            appid="2016101200668044",  # APPID
            app_notify_url='http://106.12.115.136:8000/check_order/',  # 支付宝会向这个地址发送post请求
            return_url='http://127.0.0.1:8000/show_msg/',  # 支付宝会向这个地址发送get请求
            app_private_key_path='keys/app_private_2048.txt',  # 应用私钥
            alipay_public_key_path='keys/alipay_public_2048.txt',  # 支付宝公钥
            debug=True,
        )
        # print('request.body:', request.body)  # 是字节类型,b'gmt_create=2019-09-21+17%3A00%3A15&charset=utf-8&……
        body_str = request.body.decode('utf-8')  # 转成字符串
        # print('body_str:', body_str)
        from urllib.parse import parse_qs
        post_data = parse_qs(body_str)  # 根据&符号分割
        print(post_data)  # post_data是一个字符串
        post_dict = {}
        for k, v in post_data.items():
            post_dict[k] = v[0]
        sign = post_dict.pop('sign', None)
        status = alipay.verify(post_dict, sign)
        if status:  # 支付成功
            out_trade_no = post_data['out_trade_no']
            models.Order.objects.filter(order_number=out_trade_no).update(order_status=1)
            return HttpResponse('success')  # 向支付宝返回success,表示接收到请求
        else:
            return HttpResponse('支付失败')
    else:
        return HttpResponse('只支持POST请求')

5. 订单视图的生成

order_list.html:

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>订单信息</title>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css"
          integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
</head>
<body>
<div class="container">
    <div class="row" style="margin-top: 10px">
        <h4 style="text-align: center;font-weight: bold">Django支付宝支付案例</h4>
    </div>
    <div class="row" style="margin-top: 10px">
        <div class="col-md-8 col-md-offset-2">
            <table class="table table-bordered">
                <tr style="text-align: center">
                    <th style="text-align: center">订单ID</th>
                    <th style="text-align: center">订单号</th>
                    <th style="text-align: center">订单状态</th>
                    <th style="text-align: center">商品名称</th>
                    <th style="text-align: center">商品价格</th>
                </tr>
                {% for row in order_obj %}
                    <tr style="text-align: center">
                        <td>{{ row.id }}</td>
                        <td>{{ row.order_number }}</td>
                        <td>{{ row.get_order_status_display }}</td>
                        <td>{{ row.goods.goods_name }}</td>
                        <td>{{ row.goods.goods_price }}</td>
                    </tr>
                {% endfor %}
            </table>
        </div>
    </div>
</div>
<div class="container-fluid" style="color: #b2bcc5;margin-top: 20px;margin-bottom: 2px">
    <div class="row">
        <div class="col-md-12  text-center" style="padding: 40px">
            Copyright © 2019-2020&nbsp;蓝色旗帜 版权所有&nbsp;
            <a target="_blank_" href="http://www.miit.gov.cn/" style="color:#b2bcc5;">豫ICP备19014367号-1</a>
        </div>
    </div>
</div>
</body>
</html>

views.py:(订单列表部分逻辑代码)

def order_list(request):
    order_obj = models.Order.objects.all()
    return render(request, 'order_list.html', {'order_obj': order_obj})

截图:

 

 

 

 

三. 支付项目的部署

1. 项目部署环境

  • 系统:CentOS 7
  • Python版本:python 3.7.3
  • Django版本:Django 2.2.5
  • 2. 安装python3
  • ① 解决依赖关系

[root@instance-mtfsf05r ~]# yum update

[root@VM_39_157_centos ~]# yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel -y

② 下载python3的源代码

[root@VM_39_157_centos ~]# wget https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tgz,或

[root@instance-mtfsf05r ~]# wget https://www.python.org/ftp/python/3.7.4/Python-3.7.4.tar.xz

③ 解压缩源代码

[root@instance-mtfsf05r ~]# tar zxvf Python-3.7.3.tgz -C ./或

[root@instance-mtfsf05r ~]# xz -d Python-3.4.7.tar.xz

[root@instance-mtfsf05r ~]# tar -xf Python-3.4.7.tar

④ 切换进入python源代码目录

[root@instance-mtfsf05r ~]# cd Python-3.7.3/

⑤ 释放编译文件

[root@instance-mtfsf05r Python-3.7.3]# ./configure --prefix=/usr/local/python373

执行完这条语句后还不会生成/usr/local/python373这个文件夹。./configure是用来检测安装平题啊的目标特征。比如,它会检测你是不是有CC或GCC,它是一个sheel脚本。configure脚本执行后,会生成一个Makefile文件。

./configure:是当前文件夹下面的configure文件(绿色的文件表示可执行文件)./configure --prefix=/usr/local:释放脚本文件,指明安装路径。

执行后会检查依赖问题,如果依赖没解决好,就会有各种报错。

⑥ 编译与安装

[root@instance-mtfsf05r Python-3.7.3]# make

[root@instance-mtfsf05r Python-3.7.3]# make install

这两步完成后才会创建/usr/local/python373这个文件夹。make是用来编译的,它从Makefile中读取指令,然后编译。make install是用来安装的,它也会从Makefile中读取指令,安装到指定的位置。

这两句也可以一句执行:make && make install,表示make执行成功之后,才会执行make install命令。make命令执行的时候,就会调Makefile开始编译。

⑦ 配置软链接,快捷启动python3和pip3(如果选择配置软链接,请忽略⑧⑨ )

[root@instance-mtfsf05r bin]# ln -s /usr/local/python373/bin/python3 /usr/bin/python3

[root@instance-mtfsf05r bin]# ln -s /usr/local/python373/bin/pip3 /usr/bin/pip3

[root@instance-mtfsf05r ~]# pip3 install --upgrade pip

pip3 install --upgrade pip的意思是:通过pip3 install 这个命令去升级pip

如果想要直接执行python就使用python3可以执行下面的操作:[root@instance-mtfsf05r ~]# cd /usr/bin[root@instance-mtfsf05r bin]# mv python python.backup[root@instance-mtfsf05r bin]# ln -s /usr/local/bin/python3.7 /usr/bin/python

⑧ 配置系统环境变量,加入python3的目录(与⑦ 任选其一种方式)

  • 第一种方式:PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/python3/bin/
  • 第二种方式:PATH=$PATH:/usr/local/python3/bin/
配置环境变量需要谨慎,如果配错了,其它命令也会丢失。

⑨ 写入个人配置文件,永久生效

  • 编辑配置文件:[root@instance-mtfsf05r bin]# vim /etc/profile
  • 将PATH写入到配置文件中:PATH=$PATH:/usr/local/python3/bin/(可以放到最后一行)
  • 读取配置文件,生效配置:[root@instance-mtfsf05r bin]# source /etc/profile
  • 2. 安装django
  • [root@instance-mtfsf05r ~]# pip3 install django

注意:项目依赖的第三方库也都要安装到系统中。

3. 启动支付宝项目

启动项目之前需要修改django配置文件(settings.py)修改为所有主机都可以访问,这是为了防止项目不能被访问:

ALLOW_HOST = ['*']

[root@instance-mtfsf05r ~]# cd alipay_django/

[root@instance-mtfsf05r alipay_django]# python3 manage.py runserver 0.0.0.0:5000

网页访问不到的解决方案:1. iptables -F:清空规则;2. setenforce 0:把两个防火墙都关闭。

可能用到的linux命令:

  • 查找被占用的端口: netstat -tln | grep 8000
  • 查看被占用端口的PID: lsof -i:8000
  • kill掉该进程:kill -s -9 32290

 

 

 

 

 

 

四. 支付案例的总结

1. 案例的下载

github:https://github.com/ThanlonSmith/alipay_django

2. 服务器宕机问题(面试)

用户支付完成后,支付宝刚刚返回支付完成的信息时,但服务器却宕机了。要知道这个时候,我们系统的订单支付状态还没更新呢,该如何解决?其实不用过多担心的,实际上如果支付宝没有收到返回结果,会不时间隔一段时间在24小时之内不停地向我们的服务器发送请求。如果服务器在24小时之内运行起来了,还是可以更新我们的订单支付状态的。但是,如果超过24小时,就只能自己修改站内的订单状态信息了。还有,可以在程序代码中看到有这样一行代码 return HttpResponse('success') ,这其实再告诉支付宝,我们网站已经收到信息,不用再发请求了,这是支付宝的一种检测机制

Django双支付H5扫码集成包:微信+支付宝沙箱调试、动态二维码生成与订单退款全链路 基于Django开发的即插即用支付集成方案,完整支持微信和支付宝H5扫码支付全流程。包含前后端一体化实现:前端提供wx_pay.html和alipay_h5.html支付入口页,配套pay_callback.html回调处理页、error.html错误提示页及404页面;后端涵盖密钥生成、沙箱环境配置(含微信/支付宝平台账号绑定)、商品选择与确认逻辑、AES加密工具(aes_encryption.py)、动态二维码生成服务、订单状态实时查询接口、以及标准退款调用流程。部署层面提供Nginx配置文件(poly 阅读详情

相关推荐

基于Python与Django的智能停车场收费系统全栈开发实战

在物联网(IoT)与智慧城市建设的背景下,停车场管理系统正经历着从人工化到自动化的深刻变革。其核心原理在于通过计算机视觉技术(如车牌识别)与后端业务逻辑的协同,实现车辆信息的自动采集、处理与响应。这项技术的核心价值在于显著提升运营效率、降低人力成本,并优化用户体验,广泛应用于商场、写字楼、社区等场景。本文聚焦于利用Python和Django框架,构建一个模块化、可扩展的智能停车场收费系统。我们将深入探讨如何集成高效的车牌识别服务(如PaddleOCR),设计健壮的数据库模型来管理车辆与停车记录,并实现从车辆

weixin_33924312的博客 414

Django项目中使用第三方登录——支付宝登录

1. 首先在支付宝开放平台(https://open.alipay.com/platform/home.htm)扫码注册信息 选择开发者中心选择研发服务 配置沙盒应用密钥 使用密钥生成工具生成公钥与私钥。我使用的“支付宝开放平台开发助手”,如下图,点击生成密钥 将生成的公钥粘贴到如下图: 配置授权回调地址:(Django项目启动ip+自定义回调地址) 支付...

yixinluobo的博客 1792

python Django框架下开发的支付宝网页支付接口

开发环境:python3.6 、django2.1 需要导入模块:pip install alipay-sdk-python ;pip install pycrypto

45.Django大型电商项目之支付宝支付

支付宝支付

m0_63953077的博客 1017

python(django) 支付宝当面支付(二维码 扫码支付)

python(django) 支付宝当面支付(二维码 扫码支付) 代码中一个django 的例子 生成rsa key,在控制台中执行命令,在当前文件夹下生成文件: openssl genrsa -out app_private_key.pem 1024 #生成私钥 openssl rsa -in app_private_key.pem -pubout -out app_public_key.pem #生成公钥

django实现支付宝支付实例讲解

在本篇文章里小编给大家整理的是一篇关于django支付宝支付的代码实例内容,需要的朋友们可以学习下。

django

django对接支付宝

weixin_45731757的博客 787

渗透测试实战—云渗透(AK/SK泄露)

渗透测试实战思路分享:getshell方法及横向移动方法,云安全(AK/SK泄露)

网安日记本的博客 4052

django实用配置2:用户支付测试

现在我们在网站中选择支付时,较多使用的都是支付宝支付 / 微信支付 / 银行卡支付 / 各种钱包支付等,最多使用还是支付宝和微信,但是如果在测试中,我们可能还是会选择支付宝较多,这是由于微信需要200/年的认证,毕竟我们只是测试使用,所以这里是使用支付宝开放平台进行测试。

qq_62278240的博客 993

Git系列(一)、Git基础教程【建议收藏】

Git一、Git简介1.1、什么是Git? 一、Git简介 1.1、什么是Git? Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或大或小的项目。 Git是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源代码的版本控制软件。 Git与常用的版本控制工具CVS、Subversion等不同,它采用了分布式版本库的方式,不用服务器端软件支持。 .........

一宿君 5万+

新手必看:电路设计里的‘地’到底怎么接?单点、多点、混合接地保姆级图解

本文深入解析电路设计中的接地技术,涵盖单点、多点和混合接地的原理与应用。通过详细的图解和实战案例,帮助新手理解接地在提供参考电位、构成电流回路及抑制电磁干扰中的关键作用,避免常见设计误区,提升电路稳定性与抗干扰能力。

weixin_28455801的博客 301

Python 项目实战 —— 手把手教你使用 Django 框架实现支付宝付款

今天小编心血来潮,为大家带来一个很有趣的项目,那就是使用 Python web 框架 Django 来实现支付宝支付,废话不多说,一起来看看如何实现吧。

DEVELOPERAA的博客 2012

别再硬啃理论了!用Simulink双脉冲实验,5分钟搞懂MOSFET二极管反向恢复

本文通过Simulink双脉冲实验仿真,帮助电力电子学习者快速理解MOSFET二极管反向恢复特性。文章详细介绍了实验搭建步骤、关键参数配置及波形解析,将抽象理论转化为可视波形,大幅提升学习效率。特别适合需要直观理解反向恢复过程的工程师和学生。

weixin_30918633的博客 957

Python项目实战——手把手教你使用Django框架实现支付宝付款

点击上方“Python爬虫与数据挖掘”,进行关注回复“书籍”即可获赠Python从入门到进阶共10本电子书今日鸡汤近乡情更怯,不敢问来人。一、前言春节即将来临,大家肯定各种掏腰包花花花,小...

pdcfighting的博客 3296

Greenplum基础

CREATE DATABASE 是 SQL 命令,用于创建一个新的数据库。name 是你要创建的数据库的名称。这个名称是必须的,并且在同一个数据库服务器上必须是唯一的。可选项,OWNER 指定了新数据库的所有者,如果未指定,新数据库的所有者默认是执行该命令的用户。dbowner 是数据库所有者的用户名。可选项,TEMPLATE 指定了用于创建新数据库的模板。在 PostgreSQL 和 GreenPlum 中,通常有一个名为 template1 的默认模板。如果不指定,就会使用这个默认模板。

m0_57697768的博客 1207

南京邮电大学电工电子基础B实验六(组合逻辑电路)

南京邮电大学电工电子基础B实验五(组合逻辑电路);电工电子;南京邮电大学;计算机学院;实验报告;电路图;

亦是远方的小地方 1万+

python django框架如何导出_如何在Python项目中利用Django框架实现一个支付宝付款功能...

如何在Python项目中利用Django框架实现一个支付宝付款功能发布时间:2021-02-23 17:07:32来源:亿速云阅读:98作者:Leah今天就跟大家聊聊有关如何在Python项目中利用Django框架实现一个支付宝付款功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。建立一个Django项目然后在里面创建一个应用,如图:配置并...

weixin_30106425的博客 246

COMSOL仿真教程—激光烧蚀

本例使用二维模型,将来自激光的入射热通量模拟为金属表面上空间分布的热源,从而得到金属的烧蚀过程和瞬态温度分布。

qq_40977332的博客 2万+

Django之商城支付宝支付

2.然后封装一个名叫AliPay.py文件,这个文件主要是收到数据,并利用数据以及支付宝公钥和应用私钥,生成跳转到支付宝的链接。3.我们还需要到settings配置文件中配置一些信息。4.待支付成功后,需要跳转到页面。特次鸣谢:武沛齐老师。

weixin_43376497的博客 447

手把手教你用DevExpress Patch工具解决VS项目中的试用弹窗问题

本文详细指导开发者使用DevExpress Patch工具解决Visual Studio项目中恼人的试用弹窗问题。核心在于理解并分步处理:首先正确应用补丁工具以绕过运行时验证,然后重点清理或重置项目中的licenses.licx文件以消除编译时验证,从而彻底根治弹窗。

weixin_29234423的博客 590

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Django轻量级任务追踪管理平台开发:六

今天主要介绍项目的套餐购买系统,需要接入支付宝的api,使用官方提供的沙箱环境进行支付。点击“价格”进入套餐购买界面,输入数量,点击“立即购买”,进入订单确认界面。再点击“立即支付”,跳转到支付宝完成支付,支付完成之后再跳转回来。要想跳转到支付宝,就要调用支付宝的api接口。生成签名方(通常为商家)首先将所有参数和值放入一个字典 中,并按照 key 值升序排列(调用sorted)。然后将所有参数拼接起来,去掉 key 或 value 为空的参数,并用 & 连接,组成签名原文。...

qq_45829545的博客 585

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Django 从 0 到 1 打造完整电商平台:集成支付宝沙箱支付

电商支付系统集成支付宝沙箱环境指南 本文详细介绍了如何在电商系统中集成支付宝沙箱支付功能。主要内容包括: 沙箱环境申请:通过支付宝开放平台获取测试用的APPID、密钥和专属测试账号,所有操作不产生真实资金流动。 开发环境配置: 安装python-alipay-sdk库 配置Django项目的settings.py文件,包含APPID、网关地址、回调URL等关键参数 特别注意密钥格式要保持完整的PEM格式 支付流程实现: 创建支付模块和路由配置 编写支付视图处理支付请求 处理同步回跳和异步通知两种回调机制 注

IT策士的博客 608

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Django 从 0 到 1 打造完整电商平台:支付结果处理与订单状态更新

本文介绍了如何通过主动查询和被动接收双管齐下的方式,确保支付结果的可靠性。针对支付宝支付回调可能因网络波动失败的问题,作者提出在同步回跳和异步通知时主动查询支付宝订单状态,实现双重确认。文章详细讲解了支付宝订单查询接口的实现,并展示了如何改造同步回跳和异步通知视图,加入主动查询逻辑。此外,还强调了记录订单状态流转日志的重要性,为后续定时任务处理打下基础。通过这种机制,可以有效避免因回调失败导致的订单状态不一致问题,提升支付系统的健壮性。

IT策士的博客 450

django实现商城订单自动确认收货_O2O生鲜商城小程序 提高消费者线上体验 诚邀渠道加盟...

O2O营销模式又称离线商务模式,是指线上营销 线上购买带动线下经营和线下消费。O2O通过打折、提供信息、服务预订等方式,把线下商店的消息推送给互联网用户,从而将他们转换为自己的线下客户这个模式最大的好处在于:订单在线上产生,每笔交易可追踪,展开推广效果透明度高。让消费者在线上选择心仪的服务再到线下享受服务1 首页【搜索框】搜索框执行按标题关键字实现模糊搜索功能搜索范围为:平台商品【轮播图】最多5张...

weixin_42117622的博客 418

在线教育平台项目——需求分析

有一段时间没好好写文章了,可不是出去浪了,而是要做一个在线教育平台的项目,模仿着路飞学城,结果正好还赶上学校有一些课程要结课,忙里忙外的,今天也得交了,虽然不是很完善。

Alex 1万+

Django 从 0 到 1 打造完整电商平台:电商项目需求分析与数据库设计

本文介绍了电商平台需求分析与数据库设计的关键步骤。首先明确了用户角色(买家和管理员)和核心业务流程,包括用户注册、商品浏览、购物车管理、订单结算和支付等环节。然后详细梳理了9个核心数据实体及其关系,包括用户、地址、商品分类、SPU/SKU、购物车、订单和支付记录等。重点强调了自定义用户模型配置的重要性,并提供了各实体的Django模型代码实现,特别是用户模块扩展了手机号字段,商品模块支持无限级分类树结构。这些设计为后续电商系统开发奠定了坚实的数据基础。

IT策士的博客 1142
上一篇: 国庆马上就要来了,你抢好票了吗?利用Python监控余票!
下一篇: 用Python写了一个自动弹幕脚本!各大小主播纷纷找我!净赚三万!
普通网友
博客等级 码龄7年 438粉丝 263原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值