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

news2025/1/8 3:40:25

前言:

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

目录

前言:

今日完结任务:

今日收获:

学习订单支付的接口:

杂项知识点:

总结:


今日完结任务:

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

今日收获:

学习订单支付的接口:

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

调用接口的逻辑为:

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

由图可以看出,在我们后端向微信后台发送一个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.coloradmin.cn/o/1109635.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

正确选择数据库安全运维平台的几个原则

目前市面上数据库安全运维平台比较多,企业选择时候往往很纠结,这里我们小编就给大家总结了几个正确选择数据库安全运维平台的原则,希望对大家有用哦! 正确选择数据库安全运维平台的几个原则 1、明确自己的需求 不同数据库安全运…

Maven系列第7篇:聚合、继承、单继承问题详解,必备技能!

maven系列目标:从入门开始开始掌握一个高级开发所需要的maven技能。 这是maven系列第7篇。 整个maven系列的内容前后是有依赖的,如果之前没有接触过maven,建议从第一篇看起,本文尾部有maven完整系列的连接。 本篇内容 maven中聚…

数据结构与算法之图: Leetcode 65. 有效数字 (Typescript版)

有效数字 https://leetcode.cn/problems/valid-number/ 描述 有效数字(按顺序)可以分成以下几个部分: 一个 小数 或者 整数(可选)一个 ‘e’ 或 ‘E’ ,后面跟着一个 整数 小数(按顺序&#…

Talk | 阿里巴巴算法专家王潇斌:开箱即用的文本理解大模型

本期为TechBeat人工智能社区第538期线上Talk! 北京时间10月18日(周三)20:00阿里巴巴算法专家—王潇斌的Talk已准时在TechBeat人工智能社区开播! 他与大家分享的主题是: “开箱即用的文本理解大模型”,介绍了他们提出的SeqGPT以及EcomGPT两个文…

Mysql高级——锁(1)

锁 1. 概述 在数据库中,除传统的计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的资源。为保证数据的一致性,需要对并发操作进行控制,因此产生了锁。同时锁机制也为实现MySQL的各个隔…

软件定义存储不能打?这家成立刚三年的公司问鼎全球存储性能榜

软件定义存储(Software Defined Storage,简称SDS)在性能层面不能打?这恐怕是当前大多数人固有的认知。 如今,这种认知要被彻底打破了。日前,在存储性能委员会(Storage Performance Council&…

头歌平台——C文件操作

第1关:使用FILE结构操作文本文件 任务描述 本关要求编写函数ext\fractDigit,该函数从已有的当前目录下的文件a.txt中读取并解析出其中的数值,并将结果写到当前目录下的文件b.txt中。 其中:文件a.txt中包含各种字符,…

一篇文章解密如何轻松实现移动应用的电子和手绘PDF签名功能!

对PDF文件签名是移动设备上越来越普遍的使用需求,本文将描述自动生成/“手绘”签名与如何使用DevExpress Office File API组件来实现在.NET MAUI应用程序中快速合并签名/签名支持之间的区别。 DevExpress Office File API是一个专为C#, VB.NET 和 ASP.NET等开发人员…

C# Onnx Yolov8 Detect 戴口罩检测

效果 项目 代码 using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms;namespace Onnx…

如何通过命令行进入到mysql?

如何通过命令行进入到mysql? 首先进入到C盘mysql安装目录的bin文件夹,然后在这个文件夹下打开命令行窗口,如下图: 接着输入进入命令mysql -u root -p如下图: 可以发现输入连接命令之后需要让你输入mysql连接密码&am…

层序中序还原二叉树

题目: 样例: 输入 6 0 2 5 1 4 3 1 2 4 0 5 3 输出 0 2 1 4 5 3 思路: 这道题,核心思想就是 结合 层序遍历的性质,根据 中序来判断左右孩子是否存在。 前中后序的遍历实现,主要都是 递归的形式实现遍历…

如何使用Python给图片添加水印

目录 一、安装Pillow库 二、导入Pillow库和需要用到的模块 三、添加水印 四、调用函数并设置参数 五、需要注意的方面 总结 在Python中,我们可以使用Pillow库来处理图像,包括添加水印。Pillow是Python中最流行的图像处理库之一,它支持多…

Android中使用Glide加载圆形图像或给图片设置指定圆角

一、Glide加载圆形头像 效果 R.mipmap.head_icon是默认圆形头像 ImageView mImage findViewById(R.id.image);RequestOptions options new RequestOptions().placeholder(R.mipmap.head_icon).circleCropTransform(); Glide.with(this).load("图像Uri").apply(o…

canvas画布绘制线条样式:粗细,圆角,拐角等

线条的粗线 lineWidth是改变线条的粗线的,默认是一个像素: context.beginPath(); context.moveTo(20, 50); context.lineTo(280, 50); context.lineWidth1; context.stroke();// 如果这里没有beginPath 你猜猜这三条线的宽度分别是多少 context.beginP…

分享一下微信投票小游戏怎么做

微信投票小游戏是一种非常有趣和互动的社交体验,可以促进用户参与和互动,同时也可以为企业或个人带来很多好处。下面我们将探讨如何制作一个微信投票小游戏,以及如何为主题写作一篇文章。 一、确定游戏目的和主题 首先,我们需要确…

AWS Lambda – 函数版本,别名,API网关,CodeDeploy协同

Hello大家好,我们今天继续讨论AWS Lambda的内容。 Lambda函数的版本 Lambda函数的版本和别名是辅助资源,我们可以通过创建这些资源管理函数的部署和调用。 首先,让我们来看一下Lambda 函数版本的概念。您可以使用版本来管理函数的部署。例…

汽车屏类产品(三):抬头显示Head-Up Display(HUD)

前言 你的下一台车,一定要考虑加装一个HUD。 汽车抬头显示器或汽车抬头显示器(也称为汽车HUD)是任何透明的显示器,它可以在汽车中显示数据,而不需要用户将视线从平时的视角移开。这个名字的由来源于飞行员能够在头部“向上”并向前看的情况下查看信息,而不是向下倾斜查…

Unity3D 在做性能优化时怎么准确判断是内存、CPU、GPU瓶颈详解

Unity3D是一款广泛应用于游戏开发的跨平台游戏引擎,但在开发过程中,我们经常会遇到性能瓶颈问题,如内存、CPU和GPU瓶颈。本文将详细介绍在Unity3D中如何准确判断和解决这些瓶颈问题,并给出相应的技术详解和代码实现。 对惹&#…

干式电抗器的尺寸和重量对系统有什么影响?

干式电抗器的尺寸决定了它在系统中所占的空间大小,较大尺寸的电抗器需要更多的安装空间,可能会增加系统的体积和复杂性。干式电抗器的重量对系统的负荷和支撑结构有影响,较大重量的电抗器可能需要更强大的支撑结构和更稳固的安装方式&#xf…