今天主要完成了用户下单和订单支付接口的实现
1.导入地址簿接口代码
2.实现用户下单接口
3.实现订单支付接口
1.分析:
用户点击购物车中的支付按钮时,即用户成功下单,那么下单的实现流程是什么样的 ==》前端传递参数 ==》后端接收参数 ==》创建订单实体类对象,并对其赋值 ==》数据库添加订单数据 ==》清空购物车 ==》封装前端所要数据,将其返回
2.细节
但是后端接收到参数时,是不是要考虑两个条件 1.订单地址是否为空,为空那么外卖是不是无法送达,直接抛出异常 2.购物车是否为空,为空那么外卖没有内容,直接抛出异常
3.思考如何实现:
购物车包含多个商品数据,多个商品数据形成一个订单,我们不可能将订单中的所有数据全部存入一个表(订单)中,那么我们该怎么办呢? ==》订单表可以存一些商品的id,而每个商品的具体数据存入订单明细表中
4.业务层具体实现
判断两个条件,为空抛异常,不为空执行下列操作 ==》创建订单表数据,将前端传过来的参数赋值进去 ==》添加订单数据(返回主键id) ==》遍历购物车(判断条件时会查询数据库,返回购物车集合) ==》创建订单明细对象,对其赋值(购物车数据中拿出),为其设置订单id ==》将所有订单明细对象封装到一个集合中 ==》SQL遍历集合,添加数据 疑问:为什么不直接到循环中添加订单明细对象,而是封装集合,用SQL语句来循环添加数据 解答:因为SQL语句中的循环效率高于循环调用数据库来添加数据
注意:使用多个对数据库进行操作的时候,必须记得要添加事务管理
1.由于我们使用的是微信小程序,所以具体的支付方式是微信支付
2.具体流程:
微信用户下单 ==》小程序发送请求 ==》后端接收进行用户下单实现(上面) ==》返回数据,小程序接收 ==》小程序核对数据,没有问题就申请微信支付的请求 ==》后端接收到请求,根据微信文档,访问特定接口(微信下单接口) ==》微信后台接收到请求,返回预支付交易标识 ==》后端接收并将标识进行加密 ==》后端返回支付参数 ==》小程序接收,用户确认支付
3.问题思考:
1.调用过程中如何保证数据安全? 2.微信后端如何调用商户系统(后端)
4.解决方法:
1.微信提供了加密和解密的实现,根据文档即可实现(就是准备文件(证书)),个人申请的小程序没有这个,了解一下 2.由于我们后端服务器(笔记本)是使用的局域网ip,而微信用户是无法直接访问一个局域网的,这时候我们需要获取公网ip(内网穿透)
注意:因为我没有企业,只能使用个人注册小程序,而个人是无法使用微信提供的支付这个功能的(老师实现了,我们必须将代码修改一下,不然无法支付成功,并不方便以后的学习)
1.在OrderServiceImpl中修改并添加代码(选择不调用微信接口)
2.在OrderMapper中添加一个方法(因为跳过了支付,而对应的订单数据我们是需要修改的)
3.将小程序的调用接口给注释掉