00:00
上节课呢,我们开发了这样的一个定时任务,那么它主要的任务呢,是每隔30秒执行一次查询创建超过五分钟,当然我们实际测试的呢,是查询创建超过一分钟哈,为了方便那并且未支付的订单,那这个未支付呢,指的是在我们本地的业务数据库当中的未支付订单,但是究竟在支付宝的数据库当中,这笔订单呢,到底是支付还是未支付,还是尚未创建,我们其实不得而知,所以呢,我们必须对查询出来的这个订单进行一个轮询,那么我们要去判断一下支付宝端这个订单到底是什么样的一个状态,所以呢,我们要调用上节课我们开发的查单接口对订单进行查询,以便呢,在我们的本地业务代码当中对订单进行进一步的处理,所以呢,接下来我们要开发的呢,就是核实。
01:00
订单状态,并调用支付宝查单接口好,所以呢,我们这边呢,要引入一个支付宝的service啊。阿里。嘿,Service我们把它注入进来,然后接下来呢,这个位置我们调用阿里pay service的check order status方法,并且传入我们的订单号这样的一个参数,接下来我们创建这个抽象方法。然后我们把方法实现呢,也创建去好,那么这个check order status的业务逻辑呢,其实和我们之前的微信支付里面的业务逻辑呢,很相似啊,所以说呢,我们可以参考一下之前我们微信支付里面的check order status这个方法,我们找到微信配service搜到这个方法,那么这个就是。
02:06
微信支付里面的这个业务逻辑,我们可以参考一下,他到这个地方根据订单号查询支付宝查单接口。或者是调用的,根据订单号调用支付宝查单接口核实订单状态,如果订单已支付,则更新商户订单状态并记录支付日志,如果订单未支付,则调用关单接口关闭订单,并更新商户端订单状态。那实际上在支付宝呢,还有一个特殊的情况就是如果我们没有进行扫码,或者是没有进行账号登录的话,那么支付宝端呢,实际上是没有订单的,也就是说订单是没有创建出来的,那么所以呢,我们还有一个条件就是如果订单未创建。
03:01
则直接呢更新商户端的订单状态就可以了,当然了,因为订单未创建,我们呢也没有进行支付,所以呢我们是不需要进入支付日志的,那正因为订单没有创建,所以呢我们也没有必要呢去调用支付宝的关单接口,所以呢我们只是做了一个更新商户端订单状态的这样的一个动作就可以了,那接下来呢,我们把这个过程呢给它完成一下,那首先呢,我们也是一样先。打印这样的一个警告日志啊,那之所以打印警告日志,就是一会我们查看的时候它更明显一点啊,然后我们可以方便的找到它,所以呢,我们来进行查单接口的调用,那么查单接口呢,上节课我们已经开发过了,就是query order,我们把我们的订单号呢传递进去,好,接下来呢,我们会得到一个结果,那么在查单接口当中,我们有一个结果呢,就是那也就是订单不存在,所以呢,我们首先先对这个订单是否存在呢进行一个判断。
04:18
那我们找到刚才我们的方法在这个位置呢,我们先来判断一下订单位创建的这个状态,好,我们判断如果你造成很那的话,那么就是订单未创建哈。叫做核实订单未创建,那我们依然是把订单号打印出来,然后接下来呢,我们就直接更新本地的订单状态,好,那更新本地订单状态呢,我们直接使用我们之前的order in for service,点2UPDATE by order number就可以了。
05:15
我们把order number传递进去,然后呢,传递一个订单状态,Order status closed。我们将订单呢,直接关闭掉就可以了。那么我们认为呢,这是一个超时订单,既然用户也没有进行支付,那我们就直接进行关单操作啊。接下来呢,我们先对这个步骤呢进行一个测试,所以呢,我们来启动一下我们的应用程序。好,我们的应用程序呢,已经启动了,接下来呢,我们在我们的代码当中呢,进行一个测试哈,那么你会发现呢,之前我们有一个订单呢,是未支付的状态,也就是支付宝的这个订单,然后刷新一下,那实际上你会发现刚才我们做的这个功能呢,其实已经好使了啊,这个是我们之前创建的一个订单,并且呢,我也没有进行扫码支付,那么经过我们的。
06:24
定时任务这个订单呢,已经被查询到了哈,我们网上找一找啊好查单接口调用,那么报告了这个错误信息,说交易不存在,那因为是交易不存在,所以呢,我们的业务代码呢,返回了一个那值,那返回那值的话呢,我们在我们的刚才核实订单的业务代码当中呢,就进行了一个。核实订单未创建的这样的一个操作。那么实际上这个业务代码呢,就是我们当前的这个阿里配service的第193行打印出来的,也就是说他查询到了这笔超时订单,然后接下来呢,在下面又更新了我们的订单状态,就是超时管理啊,所以这是我们对之前一直没有支付的这笔支付宝订单的一个测试。
我来说两句