00:00
好,刚才我们说了啊,说到前面的这个接口啊,还有前面的这个方法,那么现在呢,我们来看这面,这面是不是贵妇宝这面又组装了一大堆参数呀,啊,它组装这大堆参数干嘛?我们看文档,文档这面我们来看这个用户充值,用户充值这块,前面这些参数大家都知道是干嘛的,因为我们前面那节课一直在组装,他们是上荣宝向恢复宝发行的请求,再往后看叫做结果参数含义,呃,结果参数含义是是谁的参数呢?叫异步通知的参数,异步通知的参数呢,就是会租房。恢复榜,它向上容榜发起远程回调通知请求的时候,要携带的参数就是这些参数了,明白吧,包括后面这一页的所有的表格当中的讲么都是,那么知道括什么呢?包括result code result message agent Bill number find code charge AMT,什么什么什么这一大堆啊,你看一下是不是就这些就是他的,明白吧,所以他在干嘛,他在组装有钥匙参数。
01:18
组装回调成求参数哈,然后它通过这个组装,组装的过程,当然我们因为我们这个恢复包只是做了一个模拟的恢复包,没有真正去行对接,所以这边就应编码了0001,然后充值成功,明白吧,正常情况下他应该干嘛呀,就是肯定是先干嘛,先去对接银行嘛,对吧,现在银行对接对接完那边,银行那边都成功了之后,然后这边才能返回成功,银行那边如果失败了,他可能银行那边也会返回相应的错误码,然后我们这边就要法律相应的错误对吧,比说什么余额不足啊,什么就这这一类的东西啊,好,然后呢这块呢,就是我们在组装比调参数,组装完了最后是不是也要生成签名啊啊,因为你给惠付宝发请求,惠普宝要验签,惠付宝给咱发请求,咱也要验签对不对,就是双向的嘛,你不信任我,我还不信任你呢,所以要双向延行啊,然后接下来呢,这块注意叫异步通知啊,这个异步通知呢,它是用这个啊定时任务做的叫。
02:18
呃,Shadow task,所以说你可以在咱们的恢复宝这块就看到这个定时任务在不断的执行,它在不断的执行,这个就是shadow task啊,它执行的这样的一个结果,那么这shadow task呢里面我们定义了一个叫Q叫队列,对吧,这队列呢,实际上是一个另一个list啊,然后呢,我们往这个队列里面放什么呢?放not five啊对,放这个东西,然后呢,具体它怎么做的呢?我们看一下这里面它就是new了一个not five view啊,New的这个not five呢,我们先看一下five view这个对象,这个对象里面呢有两个属性,一个属性呢就能U,就是当时我们在组装请求参数的时候,看我们的上层棒,我们是不是组装了一个not啊,就告诉就是你一会回调的时候往哪调就是它啊,所以呢,它这个noteify view里面的第一个参数就是我回调地址是什么,上荣宝。
03:18
哪个地址可以提供给我们样,那就是从前面的那个look ul里面取出来的啊,然后接下来呢,这个就是拍ma,就是刚才他组装的这些参数,所以他把这些参数,以及从你看这个帕卖为什么从商容宝里获取的这个not ul是不是就拿到了,拿到了之后和它组装的这些参数合起来,然后封装到notify view这个对象里啊,所以这个notify VO就是做这件事情的,所以它封装的是什么?封装的是贵付宝向上荣宝发起的请求的具体的地址和参数。明白吧啊,所以这面我写一下吧,就是封装封装哈,封装上荣宝贵付宝向上荣宝发起的具体的请求和参数集合,请求地址和参数集合,所以这个not做的是这件事情,然后接下来呢,他把这个notify view给它封装好了之后,就作为队列的一个,呃,就是成员吧,呃,就把它添加进去了,当然这offer呢,就是像这个添加成员了啊好,那么这个Q里面呢,就就有就就有这个新的成员了,那么这个Q里面有新的成员了之后呢,他就会等着怎么样,那就去定时执行了,所以这面呢,就是我们的定时任务,我们定时任务呢,首先有两个必要的条件,第一就是以那的山西为。
04:58
它呢,就作为一个定时任务类,第二个schedule,这个是current表达式,就Linux操作系统当中那个定时任务的表达式,这个是一秒一执行,那这样的话呢,只要这个类可以被整个子路容器扫描到,那么这个注解所在的类下面的这个注解所在的方法就会定时执行,明白吧?啊,所以呢,这个TEST1呢,它就定时执行了,所以你会在控制台上看到每隔一秒就有一个TEST1打印出来是吧,它就是一打印出来了啊,它是一秒一执行的,32333435363738对吧,一秒一执行好,然后接下来它执行什么执行,就像刚才我们Q那个队列当中,把刚才那个note下Bo给它拿出来,对吧?拿出来之后我们做什么?这这是队列吧,队列应该是先先进先出是吧,啊就先进先出下po好,然后把最前面的那个。
05:58
Not five view给它拿出来,把最前面那个note five view拿出来之后,先做一个建程性的校验,如果不等于空的话,是不是就用线程叫线程池execor去执行啊,怎么执行,就你有一个notify thread,注意了这个notify thread它是不是一个异步程序了,异步编程嘛,因为它实现了run宝嘛,对不对啊,然后具体的内容你先不用管,你先看这面它执行了几次,对五次,这就是我们所说的,如果第一次就就当然这就已经刷过去了,如果第一次调运不成功,他会执行五次什么呀,一共加上第一次会执行一次对吧,那也就说明先调用一次,然后再执行四次重试啊,所以说我们来看一下,我们再给他冲一下去,先返回平台,因为他肯定调流不成功了,妈还没写,所以呢,这边就是幺零,然后再充值再前码,然后呢,输入1234有数。
06:58
密码再确定好,然后大家看这个杀人暴这面二第三次,第四次第五次好就是就是彻底失败了,所以他会每隔一秒发起重试,这就是其实所谓的失败重试机制,明白吧,嗯,每隔一秒发起重试,然后接下来呢,我们在这面你就看吧,它具体是怎么每个它重事的,那你就要看这个啊notify thad里面去怎么做的了,那所以现在呢,我们就来看一下这个notify thad,他呢,就是也是把我们要远程回调的地址呢,和远程的这个参数呢,封装了一下,封装了一下呢,他就呃封装就是给他的成员赋值嘛,然后封装成一个能的对象,然后这个里面呢,它的run方法主要执行的是下面的这个task,这个task呢,很明显是一个异步的,对吧,那异步的话呢,它是做了什么,他是不是把这个ter map和这个not cari啊放到了sign YouTube的sign。
07:58
此方法当中,注意这个方法是核心方法,这个方法就是发起远程调用好,那么怎么发掘远程调用呢?往里看这块呢,就是我们的HTTPU9,它用到了htp u9,还记得我们之前就是在上容包里面啊,在上升包里面,咱们去整合功能的时候,曾经引了一个依赖,这个依赖呢叫做我看一下我在哪引他这个依赖呢叫做。
08:36
我找一找啊,啊在哪里,在这里,嗯,我想想我看一下哪。嗯,叫做HTTP以赖啊,好像是在space,不是space,就是common门里面,嗯,Open阿里巴巴还是靠我们英语最开始找应该没问题吧,哎,没事,那哪上哪去了,嗯,账户绑定啊,然后调用恢复榜,我添加了一个依赖,我添加的这个依赖在鼓励康中引入HTP工具类啊,这是一个工具类啊,这个这个依赖是DDK代,所以不用引,但是这个工具类叫HTP,这个就是在咱之前,咱们在上网里面,咱们演过一个htk u。
09:50
这个实际上是另一种远程调用的方式,我们现在说了一种远程调用方式,就是咱们今天上午讲的通过表单远程调用,调用了另一台服务器上面的一个接口,对吧?还有一种更为底层的远程调用,就不是通过表单进行远程调用,是通过Java代码进行远程调用,还有一种是也是不是通过表单,也不是通过Java,是通过阿贾克斯远程调用,就这几种远程调用,咱们接触了两个,我给大家说一下,第一个是什么?阿贾克斯远程调用,这是咱们比较熟悉的,一直在用的这个阿贾克斯远程调用它有什么?它有一个局限性,就是远程服务器必须开放跨域访问权限,这个必须得远程服务器给你配合,你才能进行远程交,远程服务器不配合你通过阿贾特斯调不了,一般情况下银行给咱们提供的机会,他一定不会开放这的,所以说呢,我们就会用另外的远程调用方式,那就是。
10:51
Form表单远程调用,这个它不受限制,就是刚才我们前面说的组装一个home表单,把参数都拼进去,然后在封表单的action当中写远程地址,然后他提交过去,这样一面要用明白吧,啊,这个是不受会计控制的,但是这个有一个缺点,它缺点是什么呢?就是在组装表单得需要需要组装表单,那表单的组装就是感觉就不是特别优雅,看起来好像就是很low的感觉,你要做一个齐脚的组装一个字符串,然后再S一下,就是感觉不是特别高大上啊,那还有一个这么高大上的方式呢,就是用Java代码远程调用,好用Java代码进行远程调用呢,那就是会有一些工具,这个工具呢,我们现在用到的呢,就是这个叫做。
11:51
java.ne htprl connection就是这样的一个Java最底层的一个远程方法调用的一个工具了,叫做http URL connection,这已经够明确的了,通过HTTPUR,通过URL的形式,以HTTP协议协议的形式去对远程服务器发起连接请求,这意思吧?啊,所以呢,这也是一种远程调用的方式啊,好,那其实我们的就是那个啊,你们学的那个。
12:22
嗯,那个open phone啊,就是那个远程连接呀,啊,就是cloud当中的远程连接呀,它的最底层,最底层其实就是这么个东西,明白吧,为什么我们通可以通过Java代码去做远程连接,微服务和微服务之间连接,所以这其实就是它的最底层的东西了啊然后呢,这块呢,我们就封装了一个底层的一些方法,比如说do posts呀,Do get呀,然后这块呢,就是啊底层的一些代码,比如说这块是建立连接对象,然后设置什么输出对吧,设置输入流,然后应用缓存等等等等,设置超时时间,设置读取时间,设置请求方式,这些就是一些底层的了,就HTTP请求必须得设置,因为这个东西比较麻烦,还得还有缓冲流什么的,对吧,你得有网络引流啊,前能写的这个代码,所以一般情况下,这种代码我们就很少自己写,全都是直接拿过来这样的一些工具,然后在工具当中直接调用就可以了啊,所以这个呢,其实就是咱们汇付宝,像我们的。
13:23
上荣宝发起远程接口回调的时候所使用的这么一个HT,明白吧,啊好,那当然了,这个是一个统一的工具嘛,因为这个HTPU求呢,是被谁调用了,是被我们的啊,就是这个service call啊,被service call里面的这个,呃,叫做贵付宝里面的这个request help里面使用了,被哪个方法使用了呢?被。被这个方法使用了,所以呢,在我们的这个上容宝里面,目前为止我们才引入了这个工具啊,在上容宝里面我们才引入了这个这个HTP手机,但是实际上到目前为止,上游稿里面还没有用过它呢,还没有用过它,只不过这个工具是被是被这个工具依赖的,所以我们就必须得把它引进来,那么谁用它呢?是惠普包里面用,所以你会发现在我们的惠普包里面,它是不是也有htku,然后就调用了这个do POS,这个do POS呢,传了两个参数,一个呢,就是刚才咱们接收过来的回调地址URL,一个呢就是啊,我们通过这个。
14:37
Parameter,然后呢,通过进行转换,像这个这个像这个底层代码大家自己去看啊,课堂上就不讲好,然后他通过转换就转换成了什么呀。转换成了我们的这个呃,Response,也就是说实际上就是相当于我们呃这个从我看一下啊,从这个参数当中拿到的一个呃集合,然后我们把它转换成了,转换成了这个posts,转换成posts data之后通过这个方法。
15:13
Httk u to.do post方法,通过这个方法把我们的参数和URL地址就提交上去了啊,那么它具体就是什么呀?其实就是把刚从恢复包里面,把刚才组装的那一大堆参数,还有刚才我们指定的那个notify ul,通过do post做了一个远程提交,提交到哪,提交到我们的商保里。啊,因为这个URL指向的是上人宝的地址,提交到上人宝之后,上人宝会给他一个响应,这有个响应,这是从上人宝得到的响应,然后呢,就拿他就拿到了这个响应,然后他拿到这个响铃之后呢,他把这个响樱这一款,他把这个响应相当于转换成小银珠串啊然后呢,这样的话呢,就是相当于这块就有个小珠串。
16:08
然后他把小金串给大加去,当然这块他这个是会宝这边的这个,呃,就是这个代码啊,其实本来不打算给大家详细分析的,就有一个功能给大家看一看就知道什么功能就行了,那我今天给大家详细分析了一下,那就这里面还有一些小小的就是呃不严谨的地方,比如说这个地方应该是发送请求到商户对吧,不是数据宝了,他自己就是对付宝,他现在应该从会付宝发请求到商户平台,而这个商户平台对我们当前来说就是上荣榜,嗯,明白吧?啊,所以他这个日志写的点问题啊,这是上荣榜商铺平台啊,或者说是上荣宝,上上荣宝啊的是个大结果,这个大家知道吧?啊,所以这面这面不是贵族宝吗?贵族宝你发请求肯定是往上宝发啊,然后这面上宝,这面上宝,这面你要是发请。
17:08
我看一下啊,上宝这边他的这个方法在这呢,上宝这发请求,他肯定是往恢宝发,然后恢宝,所以这个他写这个代码的时候,肯定是直接把这个就拷过来是吧?啊那拷过来之后注释改一下就好,那这样的话其实不影响咱们程序的运行啊,就是一个日志,刚刚说的说是好,那这样的话呢,你看我们是不是整个这个流程咱们再捋一下啊,就是刚才咱们把啊是汇付宝,汇付宝这个流程呢,咱们再重新记录一下。从这从这是教练支付密码,然后汇报账户充值,然后是不是组装回调请求参数啊,准备给这个上头上头宝发发这个回交请求,然后说我这边充值成功了,然后把这个参数都组装出来,组装出来之后是不是往这个呃任务队列里面添加一个新的任务呀,啊然后添加的这个新的任务不是not VO吗?诺,VO里面我们组装的什么呀,要发送的回调请求的地址,以及刚刚刚刚刚才刚刚组装的这个参数,对吧?好,然后接下来呢,在这个no地在VO里面我们知道啊,它就是对刚才我们所说的这两个内容的一个封装,封装了之后呢,我们就来到了这个这个队列当中,这个队列呢,是建立在这个shadow task当中的,所以在shadow task当中呢,我们会发现他是不是做了一个五次重试的这样的一个操作的,那么他五次重试具体是怎么做的呢?具体是通过这个,呃,这样的一个异步任务做的,那这个异。
18:43
做任务呢,我们是怎么执行的呢?是通过thad to叫submit来执行这个里面的这样的一个一步方法,那这个一步方法,它的里面的具体的方法的内容是什么呢?就把我们封装的VO里面的刚才的这个东西U以及他们个传进去,传进去之后呢,我们具体看一下它的这个T,它这个里面呢,做的什么事情,就是看一下。
19:08
我们的这个,呃,先看这啊,就是拿着这个参数和URL发起远程交易,而发起远程调用,就是刚才我重点给大家分析半天的这么一个三个判写方法,然后呢,它是不是调用了刚才我们所说的这个啊,把这个参数传进去,然后得到结果,而这个传参的这个过程。就是它这个里面对参数进行了一系列的组装啊好组装完了之后呢。嗯,到哪了,等一下啊。这是不是啊,然后呢,在这个地方呢,对这个参数进行了一系列的组装,组装完了之后呢,我是不是就用刚才说的底层的那个HTTP秀do po,就把这个就发送到远程的上游保服器了,就从惠普宝发送到上个报把这个参数对吧,把哪些参数,这个参数实际上是什么,是不是就是刚才刚组装的这个参数啊啊然后呢,他就给我们嗯发送过来了。
20:16
嗯,到到到到这了是吧,然后我们是不是就得到了响应,这个响应是哪来的,是上荣宝给惠付宝发的,注意是上宝给惠宝发的,现在我们能不能得到。注意得不到,为什么?因为这个URL我们还没有去写呢,这个叫回调,这个回调我们什么时候写,我们下午写就写这个。充值哈,充值回调接口,我们要定义一个什么呀,要定义一个这个UUL所指向的这个所指向的这个用户,快明白这意思吧,所以如果这个URL你还没写,那这个这个结果会得到什么,就肯定是失败呀,反正他不是成功。
21:06
明白吧,反正不是成功,就各种各样,有可能是就连不上,目前为止是连不上啊,那如果要是以后我们写了的话,写错了,那就调用失败,或者是里面有500异常什么的,反正就都失败,对吧,反正就不是成功啊,然后呢,不是成功的话,这个伪造的大家想一想是不是就不可能是成功的结果了,明白吧,这个result如果不是成功的结果的话,我们看这个调用3REQUEST这个方法的地方啊,这地方不是调用了3REQUEST,是不是拿到了这个结果,好,如果这个结果不是success,是不是就再一次休息一秒发起重试,明白吧?啊,所以真正的这个重试在这个地方呢,又调用了task,又调用了TASK1变,然后呢就休息重试,休息重试休息重,所以说这块是我们最后的这样的一个重试的一个流程,所以说你会发现定时任务它是一秒一执行的,然后但是重试呢,它也是一秒一执行的,这边有个福力对吧?啊,所以这是。
22:07
城市这面是定时任务秒一执行,这边是重市秒一执行,还有两两个这个设计好,然后接下来呢,呃,就是说明我们在写回调的时候,如果是响应成功,我们是不是必须得给汇付宝法律四个size这个字符串啊,这个是人家贵付宝明确要求的,就是你如果要是处理成功,你必须给我返回,如果你处理失败,你就给我返回,非所以我们大家可以预览一下我们下午将要组的这个回调接口,是不是我们在这面会返回回size,然后失败的时候我们会返回其他的金串,明白这个意思吧?啊所以这面呢,就是会付宝这面他做的具体的内容了,然后再回到这面啊,如果我们整个的这个异步的这个这个流程执行,也就是说这个异步我们就准备好了,准备好了之后呢,接下来我们就来到哪一页啊,成功业就来到成功业,来到功业是哪。
23:07
百页呢,就是user看success这个页面,然后呢,也就意味着。在resources下面的templ下面,在user account下面的success当中,咱们就看到了充值成功返回平台,然后返回平台这块是不是把ul就放在这了,所以你点击这个返回平台的时候,它是不是就回到我们平台的用户页面了,所以这个就是整个完整的流程,所以这啊,所以这个页面就是之前我们在啊这个需求。这个地方看到的。最后的这个页面明白吧,啊,所以这块呢,就是汇付宝这面做了什么,汇付宝这面的内容呢,大家可选择性的听啊,就是你感觉呃,接受起来比较失利的话,那你就不用管它了,嗯,先了解上周宝这就可以了,然后有经力的同学,谁有余力的同学,你可以把贵付宝这边研究研究,还是对你整个对项目流程的理解是有一定帮助的。
我来说两句