00:01
下面呢,咱们来开发查询支付状态的接口,支付成功之后去更新订单的信息,那下面我们来写一下这个接口,我们在里边直线下。首先咱们找到这个微信controller,把这个我先打开。然后打开之后,在里边我们来编写这个接口,我写到下边这个接口,我们做的事情就是查询支付的状态,然后这个接口呢,咱们这里边要根据我们的订单ID去查询相关的状态,那我在里边给各位详细来写一下,首先咱们来一个get提交。在里边加上我们这个路径,这个路径我起个名字就叫这个query。配S。后面传入我们这个订单号,就是OID,然后写完之后我们加上一个public result,给它起个名字,就叫做query配S。
01:08
在方法里边的得到咱们这个订单ID,那在里边我们用这个pass这个注解,然后加上这个浪类型的OID,这样的话把这个我们就得到了,得到之后呢,在下面我们写一下这个具体内容,首先第一部分我们就来查询这个状态,而这个查询状态呢,其实咱要去调用微信那边的接口进行实现。我们写一下啊,就是调用微信的一个接口。实现。支付状态的一个查询。那这个部分呢,我们就写到这个service里边,比如咱们调用微信service里边一个方法,咱们给它加上一个叫que配CS,我们还是叫这个名字,然后在里边呢,传入咱们这个OID,然后这个调用之后呢,最后它返回到还是一个map集合,跟咱之前那个二维码是一样的,就是它返回是一个叉L,咱们把叉L转成mapb,然后从mapb中得到里边数据,那里边我就加上一个map。
02:21
Map中,比如它的泛型,我都写成这个词缀。然后给它起个名字,咱们叫这个result APP,这样的话咱就可以一会儿调用微信那边接口把数据得到,这个咱们一会来完成,然后这个得到之后呢,咱们下面继续往下做,下面怎么做呢?就要把它做个判断,如果说微信那边呢,咱调它的接口返回的ma集合等于空,那表示是不是就支付失败了,如果它不等于空,在这个ma机构中有一个值,这个值大家看我课件中就这个名字叫trade state,如果这个值是success,那就表示支付成功,如果它不是success,那就是支付中,所以咱给他来这个相关的判断,如果说成功的话,咱们再来更新这个订单的状态,所以我下面把这个给各位写一下啊,咱们做一个就是支付的一个判断。
03:22
那我判断一下啊,如果说它返回这个result外跑。我写一下它这个值等于空,那这里边呢,表示咱们查询这个就是微信接口里边没有查到内容,那我给他直接返回一个错误信息,我们来一个result啊return。然后加上一个result。点上这个叫file,然后点上一个message,大家给他提示说这个支付。不错了。这个是我们的第一个判断,然后判断之后咱们下面具体判断,我们第一个if,如果说map中那个值叫trade state值是success,那我写一下啊,就是里边这个叫success。
04:14
一会咱会输出它的结果,能看到点上equals,我们加一个result map,点上get,加上里面那个名字,我从课件中复制一下,叫trade state,如果这个值呢是success,那表示咱目前就是。支付成功了,支付成功之后,咱们可以更新我们订单的这个。或者说我们这个支付的相关这个状态等信息,然后这里边如果说它不是success,那就表示咱目前正在支付中,我就给它直接return一个result,点上这个OK,然后咱们点上一个message,我们就叫。
05:01
支付中其实咱们写支付中的目的是为了咱们前端里边的是不是这个判断,支付中咱就继续调用,如果是成功,那我们就重新加载做其他操作,所以现在咱们把这个结构给各位就写出来了,各位找这个特点,然后结构写完之后,咱先把这个更新状态部分先完善一下,然后最后写那个service里边的操作,那这里边怎么做呢?给大家强调啊。因为咱们现在生成订单的时候,订单中是不是有一个编码呀,就是订单那个唯一的一个编码,所以咱们通过result map能得到那个订单的编码,咱们这个编码去更新我们订单的一个状态,那我给它取一下啊,咱们加上一个get,然后订单的编码是这个值叫out trade no。我把它拿过来,然后返回我们这个值叫all的trade no是咱们订单那个。编码。
06:01
然后咱们拿着订单编码去更新我们这个状态,而更新状态呢,其实咱们可以调另外一个service维,就是那个payment service里边的方法进行实现,那给它写到那里边操作一下,我来一个凹把它注进来。就是这个payment。Service。Payment service,咱们调用这里边的方法,比如说咱们做一个更新,那这里边比如说起个名字啊,我随便起一个,我就要这个配access嘛,啊,就是支付成功之后,我们要调的方法,然后里边咱们传入第一个这个。订单编号,然后咱们再传入是咱这个result map,就是返回结果,通过它来进行咱们这个更新,如果更新之后,最后再给他一个值,说这个支付成功result.ok然后咱们点上这个message,我们叫支付成功。
07:04
所以咱们现在就把CTRL中的逻辑给各位就写出来了,这过程我们再看一遍啊,首先根据这个订单ID,咱一会去调用微信那边的接口,然后得到它的状态信息是一个map即可,如果map集合等于空,那表示这里边没有查到信息,我们就提示他支付出错,如果这个信息是success。表示成功,如果不是success,我们是支付中是success成功,那我们先得到这个订单编号,然后根据订单编号去更新我们的订单状态,最终反应数据叫支付成功,所以这样的话,CTRL部分我们就写出来了,就是里边的这么一个结构,然后写完之后,我们先写第一部分,先去调用微信里边接口,把这状态先查出来,那咱们在service里边。写一下这个方法,然后来到它的实现类中,把这方法我们做一个实现。
08:06
就是在这里边。去调用微信那边接口,然后得到它的状态,那这个怎么做呢?给各位写一下这个过程啊,比如说为了后面方便,咱给它放到一个拆开里面去,因为咱最后那调用过程中有一个拆开水处理啊,直接放到这里边。开中直接补合它的一个except,然后在里边我们做下它的过程啊,首先里边的第一步,咱们可以先根据我们的这个order ID获取到你的订单的信息,这是第一部分,然后第二部分呢,咱来封装我们提交的那些参数,跟之前二维码一样,咱们也是封装到一个map机构中去。然后第三步咱来设置我们的请求中的一些内容,比如设置我们的路径,这是咱的参数,用叉不L格式设置它的HTS是否支持,以及最终发送POS请求,这是第三步,然后第四步咱们发送请用之后,是不是要得到微信那个接口返回的这个数据,就是它返回的是一个叉L数据,咱把叉L转成map集合,然后最后把它返回的这个数据给它,最终返回到我们的那里边进行这个显示啊,就是把。
09:30
接口的数据最终给他返回,进行相关的操作。所以这个是我们写这个调用微信接口中一个基本过程,那下面我就按照流程给各位快速写一下啊,第一部分咱们先调用这个。Older service里面的方法,我们用这个get白地。然后里边传入O的ID,得到咱这个O的info,就是订单的信息,然后得到信息之后第二部分再来封装我们的参数,我们用的也是一个map集合,比如我们叫这个t map等于new上一个。
10:14
哈西麦。然后咱们像time map中来设置它的值,这个值跟咱们二维码的值类似,也是一些固定的名字,那我现在把这些值从我的课件中给大家复制过来,就是里边的。这几个值我把它拿过来,咱们来看一下啊,不需要各位去记,但是你要知道这些值都是什么,首先第一个纸就是微信支付那个ID,第二就是它的商户号,第三个就是order里边那个trade的no,就是它那个订单的那个编号,然后下一个是咱们随机生成一个字符串,用微信工具类中的方法进行生成,所以这个第二步我们就完成了,完成之后第三步设置咱们请求内容,咱们之前有个工具类就是htp client,所以咱们new一下这个里边设置它那个路径。
11:11
这个路径是由微信那边提供的一个查询状态路径,也就是里边的。这个路径给各位复制过来,里边的这个值大家看这路径啊,ht.AP m ch,微信点Q点com,然后它叫order query查询状态,然后这个做到之后,咱们向盘里边设置它的参数,之前写过我就直接写一下啊,Set tlo,然后这里边我们传入这么几个参数。首先第一部分呢,咱们用这个微信工具类,把咱这map集合呢,给它转成叉买,并且进行加密,那我们用里边的应该是。这个方法,然后里边传输它的参数,第一个参数是我们这个map集合就是P。
12:07
啊PA,然后第二个参数是咱们加密的那个就是。商户的key,我们用这个工具类中的方法加上这个key。这样的话把这参数做了设置,跟之前应该是一样的啊,咱检查一下啊,把它转成叉L,用商户key进行加密,然后做到之后我们再做下一个设置,因为现在用的是HTPS,所以咱把这个值设成处可以发送HTPS的这么一个支持,然后最后我们发送一个POS请求,进行这么一个发送,这样的话第三步完成了,完成之后我们就是到第四步,第四步呢,通过这个请求接口中的数据,咱们把返回数据给它得到点上get content得到咱的数据,而这个数据返回的是一个叉L格式,咱们把这插格式转成map集合,用微信工具类中这个方法叫叉to map。
13:09
转成一个外部集合。然后这个里边,比如说我们起个名字就叫result map,这样的话得到了,然后得到之后,最后咱就把这个result map给它做一个退。Result b,这样的话,咱就把这部分我们就最终完成了,就是里边的这么一个结构,所以大家按照过程能把代码给它写出来啊,当然这里边为了咱们测试方便,我把这个我给它做一个输出,发现咱们后面测试中能看到这个值到底是什么。Map,我给他。输出一下啊,然后里面加一下,这里边输入的是我们那个支付的状态的绿到卖。这是关于咱们这个就是第一个方法开发,调用微信那边的接口,得到我们的支付状态,这就完成了result map中返回的就是状态,然后状态里边咱们可以做到我们的这些判断,所以各位把这呢写出来啊,然后写完之后呢,我们再看下一个方法,下一个方法呢,就是这个方法,当我们支付成功之后,咱是不是要去调用方法去更新咱们这个订单的这个状态,所以咱们下面呢,把这个方法给各位来写一下,更新订单的状态,而这个方法呢,我是想这个payment space里边,那我现在在里边把这方法咱们先创建出来。
14:43
然后创建之后呢,来到它的实现类中,在实现类中把这个方法我们做一个最终的这么一个实现。那这方法怎么写给各位,还是先分析一下啊,首先第一部分呢,我们要做的话,咱们可以先根据我们这个订单编号,包括里边还有一个支付类型,因为咱都是微信嘛,先得到咱那个支付的信息,也就是先得到里边的这张表,我们看到这个payment info表中这个数据,先把它得到,然后得到之后呢,再来修改它相关的这个状态,状态中其实主要改的是里边的这个指。
15:25
你看啊一二,包括比如它是支付中还是已支付,把这值需要做改变,当然它的时间等信息我们也需要这个修改,然后这个修改之后呢,咱们下面再去修改我们的订单状态,也就是o info表中这个订单中这个C这个值我们看一下啊,就是里边的。这个值。它是支付中还是已经支付完成,把这修改,然后修改之后,最后咱再去调用微信那边的接口进行我们的操作,所以它里边就是这么一个基本过程,那这过程的步骤我在这里边给大家写一下啊,我写的详细点。
16:07
首先第一步我们先根据这个订单的这个编码或者编号。来得到我们那个支付的这个记录,然后得到支付记录之后,第二步咱来更新这个就是支付的记录的信息,主要是更新他的状态,然后这个做到之后,我们的第三步,咱的做法就是根据我们这个就是订单号。来得到咱们这个订单的这个信息,因为咱通过这个支付记录中应该能得到那个订单号,得到订单信息,然后得到订单信息之后,第四步咱就来更新我们这个。订单的信息,也就是我们的order info表中的那个订单的数据,然后做到之后最后一步咱就去调用医院那边的接口去更新。
17:01
订单的这个支付的信息,就是告诉医院,我这里边已经支付过了,然后你那边也同步经更新,所以咱们现在要完成的就是这么一个基本流程,各位把这个给它知道,那下面呢,把这过程给大家写一下啊,首先第一步咱根据这个订单编号,就是这个out trade no来得到那个支付那个记录,那我给他得到一下啊。那这个得到呢,我们就需要调方法,因为咱们在这个payment threat里边,那我们可以调这个base map里面这个方法咱加一个叫select,这个Y,因为它不能重复,然后里边传入我们那个条件,根据它做个查询,那这条件我们加上一个query rapper。里边传入这个payment。Info,然后咱们叫rapper,等于new上一个query rapper,像rapper中设置它的条件。
18:03
那这条件值我们看一下表里面的字段,第一个订单编号是不是这个,就是这个out trade no,咱把它拿回来,然后订单编号我们传入的是这个值。包括比如咱们再用一个字段,就用这个支付类型,其实类型呢,目前应该都是我们这个微信这个支付啊,咱们把它也加上啊,就是再加上这么一个,我们来一个rapper.eq然后加上这个就是支付类型,支付类型咱目前应该是这个叫。微信支付啊,应该都是这个值也是微信支付这个值是二,那这里边我就加上一个二这个值,或者说咱通过之前我们用那个枚举类把这个也能给他得到啊,就是都是可以的,那比如说我们就写下那个之前那个枚举类,然后通过这个枚举类把它那个类型得到啊,那我给你写一下啊,这个枚举类应该叫这个payment。
19:05
Type,然后里边这个方法,这个方法目前应该是这个微信就这个,然后里边叫他这个值啊,就是点上这个。相关的这个内容啊,点上这个内把它得到,包括咱们看一下啊,这个值应该就是里边这个名称。然后这个得到之后呢,咱们下面把这个rapper给它就传进去,传进去之后最终返回咱这个配音这个相关这个对象,也就是根据它的编号,然后得到我们这个支付记录信息,这是我们的第一步,咱们就快速完成了。然后完成之后,下面咱就来更新这个支付的技术信息。那咱们继续来写一下啊呃,B里边应该用那个应该不是name法啊,应该有一个get thes啊这个方法,它得到是咱这个值,其实值就是二,或者你直接写个二也可以啊,我用枚举类得到,然后下面咱来更新这个信息,那更新信息呢,我们在里边就是像这个payment info里边设置你更新的数据,然后咱们调用方法是不是进行更新就可以了,那下面我们给他就来弄一下啊,这个支付信息的这么一个更新,咱们来实现一下。
20:28
首先我们向里边先设置它的第一个值,那我们来set一下啊,它的第一个值呢,应该是里边那个支付状态,目前呢是已经支付了,那咱们来写一下啊,用这个payment type枚举点上里面这个。就是相关的这个值啊,应该不是pay type应该是里边那个payment。The,我们找一下啊,这个枚举。这个。然后里边已经支付应该是它这值其实就是二,然后咱们点上这个get CS,这是我们设置的第一个值,然后设置第一个值之后,我们再设置它的第二个值,第二个值呢,再来设置就是里边一些其他的数据,比如说这里边有一个时间,我们看这个啊,就是这个call back time,它这个支付的时间,那时间咱就变成我们当前这个new,一个date,当前时间。
21:26
然后除了这个之外,里边还有一些其他值啊,那其他值我就从课件中给各位就直接复制过来了啊,咱们来很多看一下啊,就是其他值都是往里边塞你的数据也就是里边的。这个部分啊,我先拿过来,然后再用它快速改一下啊。咱们看啊,就是里边这个值,首先这个支付这个状态咱已经改了,然后里边有这个就是我们设置里边这个trade的no啊,它这个相关这个业务编号,咱们通过里边这个result map取这个值,然后除了它之外有这个时间我们来做的设置,另外还有最后一个就是它这个相关一些其他的内容,咱们把这内容通过result map直接给他返回,也就说这个内容什么意思呢?大家看啊,在我表里边呢,就是这个payment表里边有这个数据,这个数据中呢,就是我这个map集合都给它整个存进去,里边存的就是一个整体内容啊,所以咱们现在把这些都给它存进去,就是存的更完整一点。
22:31
现在这些我们都做了设置,然后这些值都设置之后呢,咱们最后来调一下方法,做一下这个更新,我们调这个base map里边这个update。方法,然后这个方法可以注意啊,它的更新呢,就是我们可以根据ID更新,或者可以根据我里边的这个值更新都可以,咱们现在就用里边这个。Update白地把它做个更新就可以了,这样的话这个我们就完成了啊,这是我们写的一个过程,然后这个过程呢,各位看我的课件中啊,跟这写法稍微有一点点区别,但是过程一样的,我课件中是这么做的,这里边修改我单独写了一个update pay info这么一个方法,这一方法注意根据这个。
23:20
就是订单的编号进行修改,而我现在是根据订单ID,因为这个我已经查出来了,根据它进行修改,所以过程是一模一样的,没有什么区别啊,就看你怎么做了,总之功能都可以做到。现在这个咱就更新了,然后更新之后,下面我们进入到第三步,第三步做的事情是什么呢?根据订单号,咱们需要把这个订单信息得到,然后把它我们做一个修改,那我来得到一下啊,咱就调这个order。Service里边方法做到order service,我在里边先给它注入进来。我们加个O,然后叫order service。
24:04
Order service,咱们调用order service里面的方法,先把这个值得的,咱用这个get白地,而这个订单号呢,咱通过这个payment in for应该可以得到,那我来得到一下啊,Get这个OID啊,把这个我们得到,然后得到之后这里边会返回它的这么一个结果。咱们叫。O的info,然后返回结果之后,咱们把它做这么一个更新,更新的话呢,向里边先设它的值,这个值改的话,主要咱就改它那个状态就可以了,改成就是丙支付,然后咱们用这个就是O的这个枚举。里边有一个枚举值,就是已经支付了这个值。点get这个。Thes,然后最后我们做这么一个更新。就是older。
25:01
Service里边这个update by ID方法,咱们传入这个order info,这样的话,这个更新的我们就完成了,这是我们写的这个第三步。包括里边这个过程啊,就是第三步第四步,然后这个做到之后呢,最后咱们做的那就是去调用医院那边接口,然后通过医院的接口让他告诉他我已经支付成功了,然后这个接口咱们一块儿完成,目前我们先把里面这个基本过程应该已经给他做到了。
我来说两句