# 华为云服务器+Nginx+Python3.7+Django2.2+支付宝支付接入部署
> 本次分享内容共分四个主要部署步骤
> 1.Django框架项目搭建部署
> 2.本地内网穿透测试
> 3.阿里支付宝支付接口部署
> 4.华为云服务器部署(弹性云服务器ECS)
## 一,搭建django项目基本结构
### 1.创建当前项目的虚拟环境
` python3 -m venv venv `
### 2.安装依赖环境
> ` pip install -r requirement.txt`
```
Django==2.2.6
Pillow==6.2.0
pkg-resources==0.0.0
pycrypto==2.6.1
pycryptodomex==3.7.2
python-alipay-sdk==1.10.1
pytz==2019.3
sqlparse==0.3.0
```
### 3.完成项目基本结构开发(略...)
> 按照基本模型和路由参考,完成以下基本项目功能:
> 1.商品列表页:需要完成数据的查询及模板中的数据展示
> 2.商品下单: 在商品列表页可以对商品进行下单购买,及对应的订单数据入库操作
> 3.订单列表: 可以查看到当前所有订单及订单的支付状态
> 4.完成发起支付请求,支付回调地址的视图函数定义(代码可以暂时不写)
模型 models.py
```python
from django.db import models
from django.utils.html import format_html
# Create your models here.
# 书籍模型
class Books(models.Model):
# 书名
name = models.CharField(max_length=30)
# 价格
price = models.FloatField()
# 数量
num = models.IntegerField(default=5)
# 封面
img_url = models.ImageField(upload_to="./static/uploads/",null=True)
def loadimg(self):
return format_html('<img src="%s" height="64" width="64" />' %(self.img_url,))
class Order(models.Model):
# 订单号
ordercode = models.IntegerField()
# 下单用户id
user = models.CharField(max_length=5,default='测试用户')
# 购买产品id
bookid = models.IntegerField()
# 产品名称
bookname = models.CharField(max_length=50)
# 应付金额
monery = models.FloatField()
# 支付方式 0 支付宝
paytype = models.IntegerField(default=0)
# 支付状态 0未支付 1 已支付
paystatus = models.IntegerField(default=0)
# 订单创建时间
ordertime = models.DateTimeField(auto_now_add=True)
# 订单支付时间
paytime = models.DateTimeField(null=True)
```
路由及对应视图函数 urls.py
```python
# 商品列表
path('',views.index),
# 创建订单
path('order/create', views.create_order,name="createOrder"),
# 发起支付请求
path('order/pay', views.order_pay_request,name="orderpay"),
# 支付宝回调地址
path('order/pay_result', views.order_pay_result,name="order_pay_result"),
# 订单列表,支付成功后的跳转页面
path('order/list', views.orderlist,name="orderlist"),
# 订单删除
path('order/delete', views.orderdel,name="orderdel"),
```
## 二,使用ngrok|花生壳内网穿透
> 推荐使用花生壳进行内网穿透测试
> http://service.oray.com/question/1664.html
## 三,支付宝接入
#### 1.登陆支付宝开放平台创建支付宝沙箱环境
> 支付宝开放平台 https://openhome.alipay.com/platform/appDaily.htm?tab=info
> 支付文档 https://docs.open.alipay.com/200/105311
#### 2.创建密钥
> 1.生成应用公钥和秘钥
> 2.把应用公钥赋值并配置到当前的沙箱环境中
> 3.配置完公钥后,沙箱环境配置会给一个支付宝公钥,复制并保存
> 4.在项目根目录中创建keys文件目录,存储应用私钥(rsa_private_key.txt)和支付宝公钥(rsa_public_key.txt)
ubuntu生成密钥和公钥
```shell
#打开终端输入 openssl
# 输入以下命令创建密钥
genrsa -out rsa_private_key.txt 2048
# 输入以下命令创建公钥
rsa -in rsa_private_key.txt -pubout -out rsa_public_key.txt
#输入 exit 推出 openssl
# ls 查看当前目录下创建的密钥和公钥
rsa_private_key.txt rsa_public_key.txt
```<