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

news/2025/2/22 4:21:54/

前言:

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

目录

前言:

今日完结任务:

今日收获:

学习订单支付的接口:

杂项知识点:

总结:


今日完结任务:

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

今日收获:

学习订单支付的接口:

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

调用接口的逻辑为:

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

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

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

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

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

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

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

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

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

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

生成预支付交易单并进行签名返回给小程序:

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

并且进行重定向:
 

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

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

后端的更改比较简单

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

 注释接口

 手动更新数据库

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

修改mapper的insert语句:

建立一个全局变量接收:

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

前端效果:


 

杂项知识点:

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

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

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

总结:

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

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

 


http://www.ppmy.cn/news/1163816.html

相关文章

Minio 文件上传(后端处理同文件判断,同一文件秒传)

记录minio 文件上传 MinIO提供多个语言版本SDK的支持&#xff0c;下边找到java版本的文档&#xff1a; 地址&#xff1a;https://docs.min.io/docs/java-client-quickstart-guide.html maven依赖如下&#xff1a; XML <dependency><groupId>io.minio</groupId…

【C++】C++智能指针

​ ​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;C学习 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 上一篇博客&#xff1a;【C】C异…

【数据库】通配符进行过滤

通配符进行过滤 通配符 do what&#xff1f;通配符 is which?百分号 % 通配符下划线 _ 通配符方括号 [] 通配符 使用通配符的技巧 How? 通配符 do what&#xff1f; 假设我有一组数据&#xff0c;我需要过滤出 prod_name 中所有包含 “银行” 的字段&#xff1b; SELECT * …

一天吃透Java集合面试八股文

内容摘自我的学习网站&#xff1a;topjavaer.cn 常见的集合有哪些&#xff1f; Java集合类主要由两个接口Collection和Map派生出来的&#xff0c;Collection有三个子接口&#xff1a;List、Set、Queue。 Java集合框架图如下&#xff1a; List代表了有序可重复集合&#xff0c…

十六章:Java8的其它新特性

16.1&#xff1a;Lambda表达式 package com.jiayifeng.java;import org.junit.Test;import java.util.Comparator; import java.util.function.Consumer;/*** author 爱编程的小贾* create 2023-10-19 12:29** 一&#xff1a;Lambda表达式的使用* 1.举例&#xff1a;(o1,…

SIPp使用经验

xml文件&#xff0c;建议<?xml version"1.0" encoding"UTF-8" ?>&#xff0c;不建议ISO-8859-1命令行传key参数 sipp -key contact_port 9999 ...<send retrans"500"><![CDATA[REGISTER sip:[field1]:[remote_port] SIP/2.0Vi…

企业如何搭建自己的知识库?

在信息快速发展的时代&#xff0c;企业可以通过建立自己的知识库来存储和管理海量的知识和信息。如果需要让知识库能够被搜索引擎良好地索引和展示&#xff0c;就需要搭建一个SEO友好的知识库。本文将为您详细介绍企业如何搭建自己的知识库&#xff0c;并确保它具备良好的SEO效…

存储数据保护技术——HyperClone克隆与HyperMirror卷镜像技术介绍

目录 HyperClone克隆 基本概念 克隆的特点 工作原理 注意事项 HyperMirror卷镜像 HyperClone克隆 基本概念 克隆是快照技术的一种&#xff1b;在不中断主机业务的情况下&#xff0c;对源数据在某个时间点的一致性数据副本&#xff0c;数据同完成后成为完整的数据副本 …