Django之爱鲜蜂项目开发 day06(一)

1支付流程

当购物车商品筛选完毕点击结算按键时,跳转到支付宝支付流程

1.1支付宝支付时序流程图

在这里插入图片描述

1.2 沙箱模拟

这里支付并不是支付宝真正的交易,而是使用沙箱模拟交易,一般开发的时候,都是可以先去沙箱测试一下,可以去蚂蚁金服开放平台注册一下.使用这个功能首先要登陆,这个功能是免费的
在这里插入图片描述

1.2.1查看一下沙箱的基本功能

这里会用到一个知识点 公钥非对称加密
在这里插入图片描述
商家与用户的模拟测试
在这里插入图片描述

相关知识
公钥非对称加密
这里举个例子,方便理解.
张三和张三朋友,除了平时的交流,还有一种加密的交流方式.
有一天,张三朋友发现张三老婆出轨了,他要把这个信息告诉张三,让张三早做准备,转移财产,抓住相关证据等一系列事情.
于是他就使用张三给他的公钥把要告诉张三的事情进行加密,加密成一串16进制的代码,而这串代码,传输给张三的途中,也可能被其他人截取,但这串代码只有张三用私钥解密,才能知道里面的内容是什么,其他人没有私钥,就算获取了这串代码,也没有办法知道内容

在这里插入图片描述
支付宝订单支付相关文章:
https://github.com/fzlee/alipay/blob/master/README.zh-hans.md

与支付宝接口对接

#进入虚拟环境
 workon env3
 #安装 alipay
 pip install python-alipay-sdk --upgrade
1.2.2公私钥的生成

这里生成的公私钥是属于爱鲜蜂这个app的
私钥是爱鲜蜂app自己独有,公钥交给支付宝,
这样相当于起到搭建了一个私密的信息交流的通道的作用

密钥是RSA算法加密,具体可百度一下 RSA
openssl,这是一个开源组织,http通信时加密的协议是由此组织开发的

生成密钥文件
2048是位数

OpenSSL
OpenSSL > genrsa -out app_private_key.pem   2048      #生成私钥 
OpenSSL > rsa -in app_private_key.pem -pubout -out app_public_key.pem       #导出公钥
OpenSSL >  exit

在这里插入图片描述
查看一下私钥,私钥以MII开头

-----BEGIN RSA PRIVATE KEY-----    #标识开头

-----END RSA PRIVATE KEY-----        #标识结尾

在这里插入图片描述

导出公钥,
在这里插入图片描述
然后把这串公钥配置到支付宝
在这里插入图片描述
在这里插入图片描述
查看一下支付宝的公钥
在这里插入图片描述
把它保存下来
在这里插入图片描述

1.2.3 建立单例模型

新建一个文件夹,将保存的支付宝的公钥和爱鲜蜂的私钥,公钥放进去,然后新建一个myalipay.py文件
在这里插入图片描述
导入密钥
在这里插入图片描述
建立一个alipay的单例对象
在这里插入图片描述
这里用的是手机网站支付,因为这个app是手机app.
支付也可以用电脑网页支付,可能会多一些步骤,但都类似,只需要填沙箱账号和密码就行

先打印一下支付链接
在这里插入图片描述

1.2.4 测试

运行一下这个myalipay.py文件,先打印一下支付要跳转的链接,测试一下,点击这个链接,
在这里插入图片描述
有可能虚拟机内部的火狐浏览器会弹出浏览器版本过低的页面,解决的方法有两个,
升级火狐浏览器,这个有点麻烦,可以自己去操作一下
还有就是把这个链接复制一下,在windows下的浏览器打开,
在这里插入图片描述
然后会弹出支付页面,当然这个并不是我们平常使用的支付宝的支付页面,这个只是沙箱的测试而已
在这里插入图片描述
这里我们选择支付宝账号密码登陆,使用沙箱的测试的买家账号
在这里插入图片描述
去登陆这个账号
在这里插入图片描述
选择支付
在这里插入图片描述
支付成功,可以查看一下沙箱的测试的两个账户的金额的变动
在这里插入图片描述

当支付成功后,会有一个验证通知,参考一下这个github文章
在这里插入图片描述
要把这一串data取出来, signature = data.pop(“ sign ”) 是要把签名取出来,用这个签名signature去验证这个data是否是正确的
成功的话会返回success=True,说明能验证这个是支付宝发过来的订单成功的验证通知

这里是同步回调,支付成功后支付宝会发送一个get请求,异步的话是发送post请求,
先去加一个视图函数
如果是异步请求的话,会有一个csrf_token验证,但是现在获取不到,加一个装饰器,去免除csrf_token的上传
在这里插入图片描述
在这里插入图片描述
支付成功后,支付宝会返回一些参数,data,要把它转成一个字典的形式
然后拿到signature签名
可以用print打印一下data和签名,查看是否正确
然后去验证alipay
导入alipay,用这个签名signature去验证这个data是否是正确的
在这里插入图片描述
添加一下url
在这里插入图片描述
改一下回调的接口
先查看下ip地址(也可用127.0.0.1)
在这里插入图片描述
改一下回调的接口,如果支付不成功,可能出现的原因是订单号重复,可以修改一下,金额可改可不改
,也有可能appid变了,查看一下沙箱
在这里插入图片描述
重新运行一下这个文件
把这一串复制到浏览器(我虚拟机的火狐浏览器不能用,用的是外部的浏览器)
在这里插入图片描述
输入沙箱账号密码,支付成功后会跳转,
在这里插入图片描述
如果不能跳转,可能是测试的协议不支持https协议,
在这里插入图片描述
把url改为http协议,

在这里插入图片描述浏览器中把前缀https改为http就行了,可以弹出支付成功四个字

查看一下打印的内容
在这里插入图片描述

1.2.5

简单介绍一下 data是一个字典

"trade_no": "2019060122001481341000018029",   #支付宝生成的订单号
"out_trade_no": "2012316141645",              #自己定义的订单号
"charset": "utf-8",                           #字符集
"seller_id": "2088102177900470",              #卖家id
"version": "1.0",                             #版本号
"app_id": "2016093000628824",  "auth_app_id": "2016093000628824",    #沙箱应用的appid
"total_amount": "80.00",                      #订单总价
"method": "alipay.trade.wap.pay.return",      #支付方法
"sign_type": "RSA2",                          #签名的类型
"timestamp": "2019-06-01 11:43:07",           #时间戳

支付宝的签名,
这串签名是根据支付宝私钥加密了data这串字符后生成的,而我们这里有支付宝的公钥,使用公钥验证后,确认这是由支付宝发来的讯息,验证成功,页面返回支付成功,反之,页面返回支付失败

ANDzeIP8hd9XLOMqrKr/O4GtyE6kIPQZmoabAJxnKNB0KRr7QGNXbIYyUfcle0c0/6Kat08G506fIc4joR9tVR9d2i1TEIKrt1GPi/cZSD9p09EI4JFEPqP1hGiycGvTyk3DML88GzSWmxtL345bhwhNq2mvSg3zL4sZxBcNzLwo7RAmViIH/XI5rNH7tq87j7ta3JMEkPpGU3lODxn90teRYV8WVOkFpW+3EjlW3i5onPJEPkEUDyn1vYMK7zCQF6l7U46UiIwPD2fPuaxm8ee/5n1dt2uly7/jR1XmpspxB2lDuX3Ck9WWfFS7QeILKKHwv61jZbbbQhRlVOK7sw==

支付的流程大概是这样,接下来去写一下订单,把订单传到后台

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
设计思路 (1)设计底部标签导航,准备好底部标签导航的图标和建立相应的四个页面; (2)设计首页的幻灯片轮播效果,需要准备好要轮播的图片,同时借助于swiper滑块视图容器组件完成幻灯片轮播效果; (3)设计首页商品内容,需要准备好商品图片以及商品的内容,例如商品的图片、商品的名称、价格等等信息; (4)首页商品信息动态添加到购物车里,需要借助于wx.setStorageSync这个API将商品数据信息保存到本地; (5)闪送超市纵向导航设计需要借助于swiper滑块视图容器组件,动态切换不同导航菜单对应的内容; (6)购物车订单信息,需要使用wx.getStorageSync这个API从本地获取商品信息; (7)地址列表界面布局设计,需要使用view、image等组件,新增地址按钮固定在底部设计需要使用position:fixed属性; 相关知识点 (1)app.json配置,决定页面文件的路径、窗口表现、设置网络超时时间、设置底部标签导航、开启debug开发模式; (2)swiper滑块视图容器组件,可以实现海报轮播效果动态展示以及页签内容切换效果; (3)button按钮组件的使用,可以将form表单数据提交给后台; (4)form表单组件,用来将表单输入的内容提交给后台,比如提交<switch/> <input/> <checkbox/> <slider/> <radio/> <picker/> 这些组件的数据; (5)picker从底部弹起的滚动选择器,现支持三种选择器,通过mode来区分,分别是普通选择器,时间选择器,日期选择器,默认是普通选择器; (6)wx.setStorageSync(KEY,DATA),将 data 存储在本地缓存中指定 key 中; (7)wx.getStorageSync(KEY),从本地缓存中同步获取指定 key 对应的内容;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值