目录
一. 开发前的准备
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>