【苍穹外卖 | 项目日记】第七天

前言:

                昨天晚上巨难受,学完之后实在不想写项目日记了,所以就偷了一下懒,今天早上补上昨天的项目日记

【苍穹外卖 | 项目日记】第七天_第1张图片

目录

前言:

今日完结任务:

今日收获:

学习订单支付的接口:

杂项知识点:

总结:


今日完结任务:

  • 实现了对地址增删改查的接口
  • 实现了用户下单的接口
  • 学习了订单支付的接口

今日收获:

学习订单支付的接口:

这个接口的实现对于我来讲还比较难实现,因为我没有申请相关接口使用的权限,缺少营业执照等等证件,因此这个接口只能看课程实现,自己尽量加深理解

调用接口的逻辑为:

微信用户进入小程序下单之后,小程序返回订单号,微信小程序就可以申请微信支付,后端接收到请求之后调用微信后台的下单接口

【苍穹外卖 | 项目日记】第七天_第2张图片

由图可以看出,在我们后端向微信后台发送一个POST请求之后,微信后台会向我们返回一个预支付交易标识,在这里有一个问题:我们的整个项目都是在本地进行访问的,是私有的IP地址,我们要如何做才能够让微信后台接口访问到我们的地址呢?

在这里我们采用的方法是:内网穿透

内网穿透简单的讲,就是在我们的私有IP公有IP之间临时的建立起一个映射关系,使得我们的内网服务器暴漏到公网之中,使得公网的互联网用户可以访问我们的服务器

在这里我们使用的内网穿透工具是cpolar

而这里只是因为我们作为个人开发者无法申请各种资源,导致服务器无法上线,因此我们才采用内网穿透的方式,而我们在现实的公司开发中,这些东西公司都会为我们处理好的。

让我们回到订单支付的流程中

此时交易并没有完成,我们的后端在收到预支付交易标识之后,后端会对这个标识进行一系列的处理,进行签名。此后向小程序发送相应这些数据,小程序在收到相关的数据之后,小程序就会调起下图的这个方法

【苍穹外卖 | 项目日记】第七天_第3张图片

 调用该方法之后,微信小程序会弹出一个支付窗口,用户点击确定之后,就会发起一个请求,请求微信后台,然后微信后台就会进行真正的付款操作,并且把支付结果返回给小程序和后端,小程序显示支付结果,后端接收到来自微信后台的支付结果,此时后端更新订单状态。

这就是一次完整的支付过程,在这里我们再贴几张关键步骤的代码:

生成预支付交易单并进行签名返回给小程序:【苍穹外卖 | 项目日记】第七天_第4张图片

而因为我们开发者无法申请到商家相关凭证,因此我们要在这里做如下更改:
1.注释掉微信小程序中的wx.payment方法,使其绕过微信支付

【苍穹外卖 | 项目日记】第七天_第5张图片

并且进行重定向:
 【苍穹外卖 | 项目日记】第七天_第6张图片

简单的翻译一下这段逻辑:

当我们点击支付按钮之后,不会调用微信的方法,直接重定向到后端的支付成功页面。

后端的更改比较简单

整体的逻辑为:注释掉后端调用的微信支付接口,手动更新订单数据库

 注释接口【苍穹外卖 | 项目日记】第七天_第7张图片

 手动更新数据库【苍穹外卖 | 项目日记】第七天_第8张图片

这里的Order_Id也就是订单ID,我们需要在下单的时候获取,先要修改之前下单接口的mapper的XML文件的insert语句,使其可以返回插入数据时数据库自动生成的ID,因为支付接口和下单接口在一个包内,我们把 Order_Id设为全局变量,就可以在支付这里使用Order_Id了。

修改mapper的insert语句:【苍穹外卖 | 项目日记】第七天_第9张图片

建立一个全局变量接收:

 在插入订单的时候用这个变量进行接受

前端效果:

【苍穹外卖 | 项目日记】第七天_第10张图片
 

杂项知识点:

为什么很多验证我们的前端已经做过,但是我们的后端还要再做一遍?

【苍穹外卖 | 项目日记】第七天_第11张图片

例如在下单的时候,我们在前端就已经进行了判断地址和下单商品,但是我们在后端还要进行判断,这主要是为了维持程序的健壮性,我们举一个例子来帮助大家更好的理解

如果只是简单的把所有的判断都交给前端,如果有恶意用户通过postman这种接口测试工具,携带自己用户的Token就可以访问后端,这种方式绕过了前端的验证判断,也就是说如果后端不做这种验证的话,恶意用户可以用过接口测试工具来下达这种无地址以及商品数量为0的订单,狠狠的拷打外卖小哥以及外卖棋手。

总结:

        今天的项目主要还是工具类,这种微信支付的代码都是重复的,只需要更改商家数据就可以了,主要是了解整个微信支付的流程。并且今天对后端一定要对数据进行验证这种行为体验也更加深刻。

如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!

【苍穹外卖 | 项目日记】第七天_第12张图片

 

你可能感兴趣的:(【苍穹外卖】,学习,redis,数据库,开发语言,java)