00:00
那前面我们已经能正确的完成订单的整个支付流程,那支付跳转回来以后呢,我们显示的状态也是已付款,当然呢,现在还有一些也有问题,比如来给大家说一个收单,那什么叫收单,我们先来想象这几个场景,首先呢,我们这个订单在支付页,我们假设呢,现在是这种场景,因为我们现在呢都知道我们订单呢是目前测试是一分钟呢过期不支付呢,就过期了,我们来到这个订单里边,我们在这儿去结算,好我们现在呢下了一个订单,那就是它我呢点了一个支付宝去支付,然后呢,我就在这个支付页,我不动。我们来稍等一下,好,这就是支付宝的支付页,那支付页我不动,然后呢顶等订单我们在这儿呢,进行过期,那一分钟以后呢,订单就会过期,那过期了以后订单都关了,然后呢,我们在这儿再来支付,因为支付宝的这一块支付呢没法控,我们只要支付成功,消息呢再返回来,返回来呢,发现我们这个订单都关了,库存都解锁了,这是不是就有问题呢?
01:02
我们可以来看一下我们的这个现象,我们就在这不支付,我们看关单了以后,我们能不能支付成功啊,稍等一下,我们可以一直刷新这个密页面是没任何问题的,这个页面呢随便刷新,然后什么时候刷新都可以,我们什么时候想支付也都可以,然后我们来看一下我们的关单,稍等一分钟,好,现在呢,发现收到过期订单,我们准备呢关闭订单,这个订单呢是4290,然后这个订单如果关了以后呢,它库存我们来看一下,那们这个库存,由于这个订单关了,我们库存呢,原来肯定是四,现在呢又减回正常的三,而且呢,我们这个工作单里边,我们也能看到4290,这个工作单是35号,35号的这个工作单,35号工作单,它的这个库存锁定状态为二,二是已解锁,那么这个库存呢,相当于就是已经给他释放,诶已解锁了,所以呢,我们现在库存都已经解锁了,我再在这儿来进行支付,好,我重新刷一下,确认呢,我们现在还能支付没问题,然后呢,我们来到这一。
02:02
块来使用我们的沙箱来进行支付,我点一个复制,然后我们在这儿来进行支付,123456,好,我们来支付,现在大家注意我们的这个订单,420,就是我们的这个尾号为420的订单,我们再来确认一下,打开我们这个库存工作单,就是4290,好,那这一块呢,只要支付成功,我来11111,我们把这个控制台我们来清空一下,我点一个确定付款。那相当于我们这个支付成功了,我们在这儿呢也验签成功了,一验签成功呢,相当于这个4290库存都解锁了,但是你回过头呢,又把这个订单状态改为已支付了,我们来看一下这个订单状态是不是现在的已支付,来重新刷新一下,只要我们这个4290没问题,以后我们就应该变为已支付,我们来看我们的这一块,4290这个订单好,确实呢变成已付款了,但是我们这个订单呢,库存都已经解锁了,你给我在这儿变已付款,这肯定呢就有问题,咱们此时呢,就需要一个功能就是收单,也就是如果我们这个用户在这儿一直保持订单呢,都已经过期了,他才支付,然后我们库存都解锁了,就会导致问题,怎么可以使用支付宝的自动收单功能,自动收单的功能就是告诉支付宝,如果我们指定的某一个订单多长时间没支付,你呢,就把这个支付窗口就关闭,倒不是关闭我们的这个浏览器窗口,而是把整个支付的这个窗口期。
03:32
这个窗口期呢,30分钟,你只在这个窗口期里边能进行支付,否则呢,过去了以后就不能支付了,包括我们呢,可以结合支付宝的官方文档,在文档里边呢,专门有API列表,我们呢之前有一个下单,下单呢我们是调用阿里派的进行支付的,我们来点一个这个下单来进行下单支付的时候除了能传一些公共请求参数外,来看一下我们这个阿里派的这个工具类,我们之前呢使用这个阿里派的工具类,我们来看一下我们的效果,我们在这如果想要支付的话,点进来,我们除了传一些常规参数,看我们在这儿呢,设置base content们这个业务的数据,除了autotra number total amount这几个常规参数外,Autotra number total amount,我们还能传一个这个叫time exp,就是我们的这个叫绝对超时时间,你可以给这个订单指定一个绝对时间,那只要到了这个时间,这个时间以后呢,订单都不。
04:32
不能支付成功,你要指定这个时间还要算的,我嫌太麻烦了,下边呢还有一个超时时间叫time out express,这个是相对超时时间,这就是订单的超时存活时间,我们可以来写一个90分钟,那就是90分钟以内,只要呢我们支付就有效,否则呢就无效,所以我们可以来再加一个它,那们来到我们的这一块,我们想要加呢,还可以再加一个,我们把这一块复制过来,好我们直接呢给这儿粘一个,现在呢,我们加的这个属性,这个属性呢就timeout express了,好我你来加一个它,然后呢,我们到底要多长时间,那么现在呢,是一个字符串,我们把这个字符串呢,我就固定来写死,也不用加成这个body了,这个body在我们的这个VO里边配VO里边。
05:18
好,那么现在呢,就来给他加一个这个超时时间,这个超时时间呢,我们就让他好把这一块去掉,现在呢是一分钟,我来写一个em,那就是只要我们这个一分钟,注意我们这个双引号的转移字符,那这一分钟呢,订单支付不支付,我们就给你超时了,你就不能付了,们加了这个功能以后来看一下重新启动订单服务,好,我们现在呢,这个订单服务启动,我们来重新再下一个单,看我们能不能出现以前的效果,那现在来到我们的鼓励商城来访问鼓励妙点。com,好,那现在来我们的购物车们去支付。现在去支付,我们来选中一个提交订单,好,我们来找到支付宝来进行支付。
06:02
然后我们在这个页面等待,等待我们一会儿呢去支付,然后我们来就等待订单过期,只要这一块呢显示订单过期,我们再在这来支付,看行不行,好我就把这个账户我们就来输制,直接输入上,我们现在呢是这个沙箱账号,我们在这儿呢进行支付,密码呢是1234566个一,然后我们来稍等,而且呢大家注意他说交易将在多少秒后关闭,这一块呢,其实都有,已经有倒计时了后我们来看,那么这一块如果我这一块呢,过期了以后,我们看是什么效果,好我们现在看到我们的订单消息过期了,但是呢,我们在这儿来进行支付,我点一个下一步,那现在想要支付我们这个订单,当然我们支付宝呢,就提示我们交易呢超时已经失败了,所以这个呢就不能支付了,所以我们现在呢,就可以来使用支付宝的自动收单功能,一段时间不支付,我们就不能支付,另外呢,比如第二种问题,由于食延等问题,我们订单呢解锁完成了。
07:02
一步通知才到,假设呢,我们在最后一刻进行支付,然后那最后一刻我们这个支付宝30分钟好,我现在呢支付了,那最后一刻我们支付成功了,然后呢,与此动同时,支付宝给我们返回的过程中,订单正好过期了,订单过期以后呢,他把库存也解锁了,然后我们这个异步通知呢才到了,所以这个问题我们该怎么解决呢?我们其实呢也可以这样,在我们这个订单解锁的时候,比如我们呢,现在有一个订单解锁的这个功能,来找到我们这个订单的服务,我们在订单解锁的时候,只要我来解锁订单,等订单一解锁,接下来就该解锁库存了,所以们接下来找一下我们订单解锁的代码,这个例子呢,我们在这儿订单的解锁,只要我们在这儿准备关闭订单,那我们还可以来手动手动调用我们这个支付宝收单,支付宝收单。所以如果我们是这一块比较快,我们的订单在这儿比较快,那块呢还没支付,或者正在进行支付流程,所以呢,我们就提前给他快速的调一下收单,那这样呢,保证我们这边单一收那边呢就不能支付,所以我们可以来调用我们这个支付宝的自动收单功能,当然这个怎么调用,我们就可以来参照支付宝的API,我们来到这个开放平台这个文档,然后呢,我们来看它呢,有一个收单接口,我们来找一下收单关闭接口,那就是它点进来,那相当于去来发请求,发请求呢公共参数传一些,然后包括我们这个请求参数要传哪些,这都有,还可以参照我们这个支付宝的这个官方DEMO,在这个DEMO里边呢,也有一个收单,那么这个就是交易关闭,这个交易关闭呢,就是来发送我们这个请求,用阿里派这个client,然后呢,把我们这个订单号和我们这个流水号,我们一传,传完了以后直接执行请求。
08:59
那这个单呢,就收了,所以们也可以在这儿来去来执行,那大家呢,就可以参照我们这个收单方法,参照我们这一块的代码,直接把这两个复制过来,然后呢,抽取到我们这个阿里派里边,专门来准备一个收单方法来去调用就行了,那么这一块呢,就不用调用这个手动收单了,我们就直接使用自动收单的功能,我们每一个订单呢,约定一个超时时间,而且呢,这个时间我们最好呢,应该是一个可配置的,我们来写一个private private我们的string类型,那就是time out,那这个订单的超时,超时呢,我们这个系统里边,那线上以后,我们应该是30分钟能使用它来进行支付,好把这个30分钟来改掉。
09:45
这是我们的这个超时来拼上,这是我们使用的这个timeout时间,包括呢以后的各种功能,特别是呢,我们可能会存在一些交易的争议,诶客户说呢,他这个已经支付了,但是我们系统呢,总是没有收到异步通知,或者各种原因,我们系统卡慢,把这个订单呢没有修改好,那怎么办呢?我们每天晚上其实都可以来调用一个定时任务,然后把我们支付宝去支付宝把我们当天的所有订单去来跟支付宝进行一一对照,相当于去来调用支付宝的这个接口,来看一下我们现在的电脑网站支付。
10:24
调用我们这个交易的查询接口,把我们这个订单号只要呢往这儿一放,他说订单号与支付宝交易号二选一,比如我们系统里边有一个有争议的订单,我们拿来这个订单来CTRLC复制过来,那这个订单号呢,给这一放,来点一个立即查询,那接下来就会返回我们这个整个查询出来的这个数据,当然我们现在呢,是这个内网穿透,我们重新改了地址了,所以他呢报404,那也没关系,所以呢,我们每天晚上。去来跟支付宝对账也是一个操作,那至此我们加了这个自动收单功能以后,我们整个订单系统的流程那就结束了。
我来说两句