00:00
是吧,好,那接下来我们再做一下优化啊。什么优化呢?首先。啊,第一个。就是说我们是对订单进行支付的,对不对,而且订单是有状态的啊。来找一找我们订单的状态。看啊订单是有这么几个状态的,我们只有什么情况下能去支付,只有是一的情况下能去支付。清楚了吧啊。二是支付完成了。好,所以这里我们要对这里做一个限制啊。也就是说啊,如果订单状态。不是一直接返回就不让你支付了。别看。
01:12
一个。啊。订单状态异常好,当然你也可以写细一些,比如说嗯。一个一个的状态去返回,比如说是过期了,还是说是,呃,已经支付过了,还是怎么回事啊。我们这里简单的判断一下。请重新下单。加一个限制啊,那我们接着来考虑一个问题,就是说我这边如果我支付成功之后。对吧,他的状态应该改成二。是不是?怎么改,我不可能是手动去改。知道吗?所以要干什么呢?嗯。
02:02
就是说配置。支付宝的这个异步回调的这个地址,也就是。看看配软件。也就这里啊,支付成功之后啊,这个异步通知地址,也就是我们在付完款之后啊,支付宝的这个。服务啊,会请求我们这个项目的一个地址。叫什么?请求我们这个项目的一个地址。然后告诉我们支付成功了,你支付的订单什么什么,这时候我们通过这个去修改订单的状态。所以我们要有一个。路由啊,这个不能是登录的啊,必须得是呃。放到外面,让支付宝能随便请求的。好,我们把这个分组写一下啊,支付相关的,回调相关的。
03:01
支付宝支付。支付成功。之后。毁掉,也就是我们在付款成功之后啊,支付宝呢,它会自动去请求我们一个地址来告诉我们支付成功了,所以我们要准备一个啊,不用登录的路由。兄弟们。写安利吧,支持任何方式。Notify啊,阿里云把这个这个区分写上,因为我们可能还有这个微信的一个支付的一个回调。好,把地址写上。
04:06
请求然方法。来在下面建一个方法。嗯。加上这个啊,为了和微信做区分。啊,Request,我们可以获取到请求的一个参数,也就是说给大家再捋一遍,我支付成功之后啊,支付宝呢,会请求我这个地址啊,会自动请求我这个地址,然后告诉我一些啊支付的信息,包括你支付订单,我们在这里可以去修改订单的这个状态就可以了。
05:06
好吧,来。那我们来写一下啊。来看一下怎么验证。直接去找。这个。我们用的这个组件的它的文档啊往下找。看一看有使用的一个说明啊。这里就是异步的一个验证,比较简单,直接使用他的这个。啊,方法进行验证就可以啊,使用这个进行验证就可以。我们直接把这个代码拿来啊。如果是的话,我们直接return。啊,不用加这个,直接return它就可以啊。好。这是我们要。验证的一些就是流程。Logo啊,我们写一下啊。引入一下这个命名空间。啊,现在呢,我们先简单的啊,把什么把它给。
06:04
写到日志里面来看一看。就是给我们返回的就是支付宝,他请求我们这个地址。给我们携带的什么数据,就给我们传了什么数据啊。你把它给写进去,那现在有个问题啊,这里。方法。这个不用传啊。你不用查那个配置。因为在看我们这个支付这里,当我们直接使用这个进行支付的时候啊,它会默认去用EV里面的那个配置。就是我们为配的这些,支付宝的配置会默认用这些。接下来想一个问题。因为我们这个项目是部署在我们这台电脑的,对吧,而且这个域名也是。啊,这个域名啊。也是我们自己在host里面去自己写的一个IP,解析到我们本机的这个虚拟机里面的这个IP是不是。
07:00
所以说我们现在这个地址就说外网无法访问。比如你用手机你输入这个,你试一试能不能访问,不能对吧?啊,外网无法访问,那如果外网无法访问,那你告诉我阿里云它怎么能请求过来呢,对吧。比如说阿里云,他请求我们这个地址,他怎么能请求过来呢?是不是这样的?所以这时候我们要用到一个东西叫内网穿透啊。就是把我们这个内部的这个项目给暴露到这个互联网中,让互联网就是公网能进行访问。嗯,因为我们使用的是home。所以比较简单啊,你看home的这个文档找到。啊,共享这一块啊,共享你的环境。呃,我们可以在就是Windows下用V,然后这个命令来实现共享,但是我们这里面如果配了多个项目的话,多个站点的话,就没法使用这个命令。我们来看一下啊。
08:01
打开C盘。用户,我们之前是把home放到了这个用户的这个加盟啊。编辑下。我这个应该是配了多站点的啊,有两个站点。啊,那就没有办法去使用啊,这个命令啊,这个命令是在我们。Windows的这个终端里面就是CMD里面去执行的啊。在这里面去执行的清楚吧。啊,是在这去执行的,而且要到我们的这个目录下。就是要进入到那个home的那个目录去执行这个命令,就会给我们分享,但是如果有多站点的话就不行了。你看如果就是说你在这里面配置多站点无法正常工作。听了吗?啊,这个命令你要执行的话,如果你只有个站点,你要执行的话,你要去你的home目录下CD到。C冒号三。
09:00
然后home sit,我们要在这个里面去运行这个命令啊,当然我们这个已经不行了,我们是多站点,那怎么办呢?还可以使用。啊,未比的S连接到ho姆斯的机器,我们现在这个。就是在这个亨姆特机器里面啊,这个虚拟机里面的,然后在这个里面执行什么命令呢。啊,执行。哎,这个。命令,他给我们包含了一个这个命令,这个命令,然后后面给给上我们的域名啊,跟上我们的站点域名,然后。就可以共享我们这个。域名了啊,他呢会给我们,呃,就是它底层就是用note去实现嘛,他会给我们出现一个note的一个界面,然后会给我们分配一个公网能访问的一个地址。我们来试一下啊。Share,然后我们的域名之后会进入到一个这样闹的一个页面。这是给我们。分配的公网的一个。IP是什么?也就是我们用这个地址。
10:02
啊,用这个地址就可以在公网上访问,也就是说你手机端也可以访问。知道吧,这样的话,公网能访问了阿里云,他就能请求过来,清楚吗?来,我们试一下啊。粘贴一下,把这个地址。可以看到。啊,访问是正常的,页面出来了。也就是说啊,这个地址是可以提供这个公网的一个访问的啊,比如我看看我们。API下面的index的是我们首页数据对不对。拿到首页这个数据了啊,这样的话,公网能访问的话,支付宝它就能请求我们。这个项目了,请求到我们这个地址,哎,在我们支付成功的时候,他就会请求这里啊,我们这里把信息写到了日志里面啊,那这个地址回调地址我们配在哪呢?找一下配置文件。这里是不是有一个。
11:00
啊,异步通知地址,我们把这个地址填到这里,然后连上。这里我们写的。这个UR啊。来注意要有个API,我们的这个是有一个API前缀的啊。这样就可以了,他就会请求我们这里,我们把日志删一下。看一看,就是当我们支付完成的时候。啊。这里给我们写入了什么样的一个内容?好吧,那我们现在来进行支付。因为支付的话,这里我们做了订单的状态的一个限制啊。所以先改一下数据库,把订单的状态给改回来。来改这个吧,把它改成一啊。来提交一下。好。接下来。我去请求这里重新拿一个二维码。
12:04
复制一下。再去生成一下二维码。生成二维码,然后我用手机扫码支付。支付失败了啊,他是告诉我这个交易已经存在啊,我们要去。改一下我们这个单号才行啊。就是改一下我们这个单号,我们随便去改个数字,把八换成七。要不然同单号的话,他认为你已经支付过了啊,不让支付。再来一次啊,重新发送。得到一个链接,把它生成二维码。再来一个。生成二维码,现在我再扫码进行支付。这时候就给我弹出了这个金额,然后立即付款。支付完成了啊,完成了之后我们看看回调地址,就是说支付完成之后,支付宝有没有请求我们这个地址,好吧,可以看到日志已经输出了,是不是你看多了一个日志文件,而且我们来刷新一下,看我订单的状态。
13:13
啊,订单状态还没有改,我们还没写座机代码,是不是先不用管这个,先看看这个啊。好。看看阿里的这个通知。然后这个是我们打印的这个印啊。在哪儿呢?在这里打印的这个info。是不是这是下面打印的这个第八个。其实看到这里大家应该也知道了,他肯定是请求过来的,对吧?我们日都写进来,我们看看音符里面都是什么。啊。时间字符集。然后这个账号。啊,卖家的这个你看就像,然后标题是吧。他的这个签名接着往后走。好。往后找啊,有这个购买者的这个ID。
14:02
还有交易的一个金额。通知了这个ID对吧。这些数据都有啊。接着往后看,有通知的类型。好,有这个啊,通知的状态啊,我们判断支付支没支付成功,主要是靠这个状态啊。好,接着往后看。找到什么?应用ID签名。我们主要要什么呢?要那个我们的单号啊,因为没有单号,我们怎么查订单。是不是看到单号了,通过这个单号我们查出来订单的数据,把它状态给修改了就可以了,是这样的吧。啊。嗯,那我们就不看了啊,这个注意啊,这个是我们系统内部的单号啊,这个是。支付宝的这个交易的单号。我们表里面也要存了,存一个他清楚吧,我们通过这个我们的这个订单号去查订单的数据,然后把这个他的这个单号给更新上啊。接下来去写我们的真正的业务逻辑。
15:03
把这个放前面,我等会还要用到这里面的一些字段。其实我们这里不用写这个也行啊,你看这里他已经去存了啊,也存了一下。而且存的数据和我们大致都是一样的啊。看到吗?哎,我们之前不用写这个也行。把这个删掉吧。啊,这个日志呢,是可以去写一份写一份,万一比如说有交易支付异常了,我们可以去看一下这个日志啊。查询订单。嗯,要先判断这个支付情况啊,支付状态。If判断支付状态呢?有两个他或者他。对吧。所以我们要从data里面。
16:04
对的啊,是一个数组。判断他。如果它等等于。这个。或者。他等等于。这个啊。哎,这时候才是支付成功的一个状态,我们在这里啊查询订单。然后更新订单。数据啊。Order。这个。是我们打好啊。
17:02
Where?啊,我们的是叫order number date里面的他。First取一条,所以一定要保证我们在生成订单的时候,这个单号就不能重复啊。要不然就出问题了。之后去更新订单的数据就可以了。主要更新什么呢?一个状态我得把它改成二,对吧,你看我们的一是就刚下单,二是支付了,所以把它改成二,接着还要改什么。嗯。支付的类型。啊是这里啊支付的类型。还有支付的时间。来支付的时间。
18:06
支付的时间可以从这里面去取啊。这个啊,维塔。找找还有没有其他的一个字段用。就是通知的时间。Payment啊,这个是支付的时间,第一个它是创建的,就是说下单的一个时间,我们用这个啊。支付的类型。这个是支付宝。
19:06
单号。刚好。找一下啊,看它的这个单号的变量名是什么,也是它啊。一定要存一个单号,单号就是在写退款的时候就会用到这个单号。其他的字段应该是没有了吧。类型支付时间。状态也改了。好,我们就简单的就是验证它成功就可以了,因为你要做的更细的一个验证的话,你还要验证这个订单的这个金额和我们这个数据库的,就是支付的金额和数据库的是否匹配,要呃按照他这个几部去写就可以了。来更新完成之后。嗯,就可以了。
20:01
那我们再来测试一下。首先要改一改数据库。再改一位啊。要不然单号你相同的话,他不让你发起支付,他会认为这个订单已经支付过了。好,改动它。嗯,接着去生成一个支付的链接。去生成这个二维码。接下来我扫码支付。然后这一次因为我们加入了我们的业务逻辑啊,所以我们就可以看一看这个订单的数据有没有发生改变,比如说他的状态呀,包括这些都没有,有没有填上。我现在扫码支付。已经支付过,交易终止。这个改的有问题啊,好像是改成以前的了啊,我们换多换几位啊。来再提交一下,重新生成一个。复制。
21:02
再见一个。生成,接下来我扫码支付。现在就呃,支付成功了,让我输入密码了已经。支付完成,我们来看看有没有请求我们的这个地址,把我们这个状态给改了啊。诶,可能是报错了,我们来看一下啊。往下找找。啊,语法错误。71行。来换一种写法吧,改成使用对象吧。啊,我们都使用对象吧。
22:03
包括这里也都改一下。这个位置。把这个也改了。接下来嗯,因为我们用这个update啊,所以把这些字段也给加到。这个允许批量赋值的这里面啊。Time。这个。接下来进行测试,先把日志删掉。
23:02
改一改订单号。生成二维码。扫码支付。支付完成了,我们来看一看回调的一个状态啊,首先啊,日志是有了。接着看一看数据库的我们状态,还有这些数据有没有填充上来刷新一下。是不是改成二了?诶是不是这个支付的时间,包括支付的类型单号都有了,这样我们就完成了支付,然后还有这个异步回调通知。去在一步里面去改他的订单的状态。诶,这样一个支付的功能就算完整的写完了啊,当然我们的这个验证逻辑稍微的简单了一些啊。
24:02
最后我们做一下总结,我们要想完成整个这个支付的流程,首先你要去。呃,注册这个支付宝对吧。注册他这个杀伤服。然后去上传我们的这个密钥,用密钥生成工具去生成就可以了,对吧,接下来去下载我们PP的这个组件。啊,这个组件,然后使用它组件方法完成支付就可以了,下载完之后呢,该配的配置去配置一下啊,这些从商箱里面都可以找到。好吧,找到之后,嗯,支付分两部分,一个是生成我们支付的一个信息。就是在这里上面那个啊,生成支付的一个信息,这里我们使用的扫码支付,所以生成的是一个二维码的一个链接,然后前端拿到这个链接呢。就是这个链接,它需要去使用一定的工具去转化成这个二维码。之后用户就可以扫码进行支付了,诶支付完成之后,我们还要提供一个啊,不需要验证的地址,也就是说不需要登录的一个地址,因为我们在支付成功的时候啊,支付宝它就会请求我们这个地址去告诉我们你支付这些信息对吧,然后通过他返回给我们的这个单号。
25:10
啊,我们就可以拿到我们的订单,然后对订单的数据进行一个修改。哎,这样就完成了一个支付。
我来说两句