00:00
好,那么上午呢,我们做了这个用户充值啊这个功能啊,然后用户充值这一块呢,其实我们上午的时候呢,主要就是在恢付宝当中给这个用户呢,做了一个账户的充值,我们打开这个恢付宝,你会发现呢,因为上午我们对充值的这个功能测了三次,所以这个用户呢,就有30块钱了,对不对啊,他的ID呢,是啊,就是3283啊这个用户,然后呢,接下来呢,我们来看我们的上个网这面的账户,他的账户在这块叫user count user count的这个哪个是刚才那个用户呢,不知道,咱们得上user bank或者是user里面去找一下,那么user band里面呢,这个用户他的ban code呢,3283是这个对吧?啊,第一个用户,第一个用户他的user ID是什么,是一对吧?啊,那所以说UC办里面,我们的这个UCID是一的这个账户,他就应该有30块钱,但是没有现在那这个就。
01:00
我们要做的内容了,就是我们的这个上荣宝证,您的账户的这个账号里面的余额一定要和我们惠付宝里面这个账户的这个账号的余额进行同步,明白吧,啊好,那所以接下来呢,我们来看怎么去做,那怎么去做呢?那肯定是你得知道是给谁充值对吧,给谁充值,那么我们来看一下上我们的惠普吧。会有宝,我们做充值的时候,我们打开这个充值的那个页面啊,叫做user to controller,我们在充值的最后就是我看一下啊叫吧,这个方法在充值的最后是不是组装的参数给我们的上荣宝发回来了,发的是啥?发的就是它,所以呢,我们应该在上文稿里面写一个接口来接收这些参数,把这些参数接到之后,然后呢,比如说从里面拿到八扣的是谁,给他加了多少钱,明白吧啊,然后这样的话,就给咱们本地的用户把这个钱加上就可以了啊,这是整个的一个流程,所以接下来呢,我们来看一看,先把这接口写的,那这接口我就不浪费时间写了啊嗯,直接把它粘过来,就是这个notify,跟之前咱们的那个账户绑定的那个回调是一模一样的。
02:16
好,那我们把这个。先把这其他的都关掉,然后咱们打开就是上荣上荣宝的嗯,API,然后打开UC看看,然后在咱们之前做完充值之后呢,咱们就要定义这个回调了,好这个回调里面呢,有几个关键点,咱们先知道一下,首先这个URL地址。必须就组合起来,Ati call user account,然后notify这个URL地址必须和谁对应上了,必须和这个notify URL对应上,所以你要检查一下他们是不是一致的,如果不一致的话,需要改一下,明白吧,所以你对照一下API car user account'notify然后这边也是一样的。
03:03
API user account that好,那这样的话呢,我们这个方法的定义就写好了啊,然后这面我们惠付宝那面是POS过来的,所以这面我们也要POS过来,对吧,惠付宝那面怎么看的POS过来的,刚才前面说过哈,就是在我们的这个。嗯,应该是在notify right里面吧,我们是有一个三的request,好,3REQUEST里面呢,这个方法是发远程请求的,就是通过do post方法给我们啊上荣宝这边发了一个回调请求,所以这面是post,那我们这面呢,就必须也得是post,明白吧啊,这个post好,然后接下来呢,这面呢,就是把呃,汇付榜里面组织的参数也是通过这个Switch map同样的这个方式啊,通过这个工具类里面这个方式给我们封装到一个map的一个集合当中,这样的话,这里面封装的有什么?
04:07
恢复宝,恢复宝封装的是恢复宝里面对呃组装对差值,最后我们发远程回调之前组装的这些参数,对这些参数最后会被封装到哪会被封装到这个地方来是不是啊,而那些参数它在文档当中,我们是账户充值文档当中呢,是后面就会有叫做结果参数啊,弄一下发给弄一下URL的就的参数就是这些啊,所以组装惠付宝那边组装的时候,它其实也要按照这个文档来组装,那我们接的时候呢,也要按照这个文档来接,明白吧,好,那所以说呢。这是恢复宝组装的参数,然后接下来呢,这面是我们上周宝接收的参数,那所有的参数接收完了之后呢,我们可以在这个地方呢,就是调试一下哈,Log个in for,然后把这个参数用这打出来,回头你们看一下是不是我们要的参数,其实这块就是一个调试的过程啊,好,就是看一眼就行,也没有问题,然后咱们就下一步,下一步第一个步骤我们做什么,做验签,做验签这个过程你其实是可以参考上上这个恢复宝的恢复宝,你看它接收完请求,第一个步骤是把请求转换成那个吧,第二个步骤说什么是不是做验签啊啊,所以第二个步骤它string u is signal is science equal啊,然后把他map传进去做验签,那我们也要验签啊,只不过我们这个验签呢,我们要就是给他写的严谨一点哈,那边就是简单的处理一下,我们这边严谨一点,严谨一下的话呢,我们。
05:54
我们就嗯这样去判断一下,好,那判断怎么判断呢?首先我们呢,也有一个request helper request helper,这个前面咱们用过,里面呢有一个叫做is equals这么一个方法,这个方法呢,它接收parameter map这个参数,好,这个方法接收permeter map这参数,它做了什么呢?它就是把参数当中的签名部分取出来放到sin中,然后接下来呢,用这个参数去生成,先把S去掉,然后再用其他的剩余的参数生成一个新的签名,然后最后呢,用用它生成的这个新的签名和我们给他就是。
06:43
呃呃呃,这个是汇付宝给他发的签名,对吧,这个汇付宝里上荣宝呃,发送的请求参数当中携带的签名,这个是在上荣宝里面,他用相同的规则,用生成的签名,好对这两个签名进行比对,如果不一致的话,验签失败,如果一致的话验签成功,明白吧,好,那这个就是验签的过程,所以呢,如果这个验签啊,这个不一致的话,那么我们就直接return fail了,那实际上这块根据我们后台的文档,只要你不return success。
07:19
他就不成功,对吧,它的一个成功的关键词标识就是写success啊,就是写success,但是未来如果我们想对这个功能做扩展的话,你可以就是各种情况的,比如说呃,这个业务失败啊,比如说什么呃,就是不同场景的失败,你可以把它布成不同的关键字,这样的话呢,惠付宝那边呢,他也知道咱们为什么失败了,但是一般情况下啊,呃,三方的话,只接收咱们的成功失败,他可能管你为啥失败呢,对吧,你自己处理去,我只接收你成功的结果,明白吧,这是三方,因为人家话语权大,是不是人家不管你为啥人家不处理,但是一般情况下,三方给咱们响应的时候,可能就会详细的说为啥失败,是余额不足呀,还是密码错误呀等等等等,他会给咱们一个详细的一个一个响应啊,那咱们其实就告诉三方失败,然后呢,在这个地方呢,咱们就可以告诉他怎么样就是成功,对吧,就跟他说我们这。
08:19
这个过程呢是成功的啊,所以这块呢,我们就可以先临时现在这个地方呢,里添一个suss,这个你可千万不能随便写这块的SUS1定要和汇付宝那面所能够接收的一致,恢付宝这面能接收的那个代码在哪写在这个地方对吧,你必须是返回成功,它就不重试了,一旦你返回的不是成功,它就每一秒重试啊,它这个比较重试了,好,然后接下来呢,这面呢,就是我们的验签的过程了,那么如果一旦验签成功了,我们就可以进行充值了,同账步数据了。
09:08
对吧?嗯,同步账户数据这个过程当中呢,实际上我们还要进一步的去判断,因为大家都知道我们的恢复宝,它恢宝里面啊,他给我们组织参数的时候。他是不是还组织了一个0001充值成功啊,对吧,他有可能因为这个是模拟的嘛,所以他只返回了0001充值成功,那如果不是模拟的,是真实的话,就有可能返回,比如说负一充值失败,或者是负101余额不足,或者是负102密码不正确等等等等,他就会给咱们呃前端呃会上传保单,就会返馈其他的值了啊,那么我们就需要至少对这个成功的情况进行判断,然后其他就是失败情况对不对,如果你还想给用户展示其他失败情况的话,那你还是需要根据,就是如果有错误码的话,他根据错误嘛,去展示错误信息是不是啊,所以这面呢,因为他只是给我们返回的成功嘛,所以我们就只判断成功信息,那这样的话呢,我们就在判断业务是否成功啊好,那么怎么判断呢?If,然后这面呢,它的这个返回值呢,是啊。
10:21
0001啊,那同样的这个0001在文档当中,给咱们的文档当中呢,我们可以看到这边写0001是充值成功,这是结果码伪造扣的,所以说呢,我们在这个地方呢,就判断一下这个。点E。嗯,然后呢,把这个结果码,结果码在它的那个参数里面,它的meter.get在哪个参数里面呢?看文档。叫result code对吧,把这个从嗯汇付宝给我们发的参数里面取的,那同样根据我们之前说的这个得写C是这意思吧,嗯,判断一下,判断一下的话呢,如果他们两个一致的话,那么接下来我就可以做同步账户数据的这个工作了啊,如果他们两个不一致的话,如果他们两个不一致的话,不一致的话,那就是那面充值失败了,明白吧,就是远程恢付宝那边充值失败了,远程恢付宝充值失败了,那你就告诉用户充值失败了就行了,返回size还是返回。
11:36
这款注意返回的是什么size这块返回success还是返回false,取决于你想不想让惠付宝给你发起失败重试。发不发不发贵付宝那面都失败了,还重试啥呀,那面充值失败了,你再重试它也是失败,就不是000,你再重试它不也返回失败吗?重试五次,然后我们失败五次,然后都给他返几S,他又重试,没有必要对吧?所以说这块啊,那个我们就返回几S,你只要一返回几赛,他是不是就不重实了,他不重实了那就失败,那用户就看到失败的原因是不是余额不足,那你就得先给你银行账号充值了,对不对啊,然后你再自己去重新充值去,而不是让上城保汇付宝什么的,他们两个之间互相充值,这是没有意义的,所以咱们一定要知道哪个地方,比如说这个地方验签啊,就是这个验签失败了,我们就feel,那有可能是什么,有可能是那边的,就是这个发起远程请求的那个服务器有问题,或者是在这个过程当中超时了,什么叫超时了,就是啊,有的时候我们的那个验签做的比较严谨的话呢,它不是传过来。
12:54
一个那个时间戳嘛,我们会结合时间戳来判断的,比如说这个这个这个签名是就好几分钟之前发过来的,那一般情况下这是不可能的,因为这个几乎是实时的,那边发请求我这边就接受,对不对,你好几分钟之前的一个请求你过来,那很有可能是不是被这个请求被谁拦截了,然后他模拟了这个请求给你发过来了,对不对,所以一般情况下呢,我们就是有很多的判断,那么验签失败呢,也有可能是这个,呃,这个我们发的接收到这个请求是超时了,有可能失败,失败了的话,那就返回,返规话,那面如果是真正合法的服务器,它真的是由于网络的原因,他失败了,那他就重新生成签名,重新生成一个比较及时的签名,然后我们再验写就没成功,明白这个意思吧,嗯,好,那这块我们就返回success,还有一种情况不可能返回success是什么情况。
13:47
就是还有一种情况,那边会发起城是什么情况。现在我们说的是。汇付宝给上人宝发请求,然后上荣宝呢,它有两种,一种呢是返回size,返回size那边就不重试了,还有一种呢是返回费,返回费那边就重,还有一种是什么,还有一种就是啥也没法对。
14:09
恢复吧,像上荣宝正想返回数据呢,突然网赚没返回回去,这有可能吧,但是实际上充值成没成功,成功了,充值成功了,充值成功了,这一年我们做的账户同步。成没成功肯定是成功了,这面只要返回就成功了,我说一下这块肯定是账户数据同步完了之后我们才的,我们不可能账户数据图之前return吧,明白这意思吧,是吧,我再说一遍啊,就是汇付宝给我们上文宝发发回调请求,然后我们嗯上把什么时候呢,肯定是处理完了呀,处理完了RETURN1诶网断了。他没收着,没收着的话,他没收着他就会再发起出示,因为那边是只要没收着success他就出事。
15:08
你一段时间内你success没返回超时了,惠付宝那边也是没收到success,明白吧,只有他收着了,并且是size才叫收着,他超时了也叫没收着,他收着了,但是不是size也叫没收着,刚才我们说的是超时了,我这边其实发S,但是他没收到,他没说着怎么办?他是不是又重吃?又乘十怎么办?是不是又处于这样同步?又处理账户程度怎么办?我又加了十块钱,会付宝这面加十块,我加20,有这种可能吧。是不是有这种可能啊,然后我这正好就是他来的时候。来的时候我收着了,回去的时候往右断了,然后他是不是又重事,我又加驶往右,然后我就一直加,对不对,这样的话就是财富自由之路,你就踏上了财富自由之路了,好,那这个是不可能的,对不对?所以刚才我们说的这个问题叫什么呀?叫接口调用没有满足幂等性原则,没有满足幂等性原则,注意刚才我说的这种情况,在面试的过程当中,他经常会用到,他就说如果我这边远程调用回调就成功了,我我返回响应的时候失败怎么办?
16:30
对吧,你怎么处理这个问题,你不可能给用户一直充钱,对吧,那怎么办?那我们要保证接触调用的逆转性,明白吧?啊,那所以如何保证接口调用的密整性啊,我们一会再说,但是我们坐上账户数据同步这块,一定要做这个接口调用的密的。把密整做了,才真正的完成我们整个账户充值的一个完整的过程啊好,那所以接下来呢,我们就来结合刚才我们所讲的这个流程,第一是不是要做账号数据同步啊,第二是不是要保证密法,所以我再解释一下什么叫密,就是多次调用同一个接口,比如说这个能派接口被多次调用的时候,产生的结果是一致的,这个叫密啊,这个叫密。那么刚才我们所出现的问题,是不是我们在这个汇付宝向尚荣宝发起请求的时候,由于尚荣宝没有及时的反馈消息,那么汇付宝反反复复的对他发起调用,这不是重试吗?结果导致了我们的账户数据没有每一次调用结果之后都一致,就是你必须产生结果一致,你第一次调掉完了这个账户是充了十块钱,你第二次掉完了这个账户,还是在原有的最开始的基础上充了十块钱,而不是又加了十块钱,这个叫密等。
17:50
嗯,明白吧,啊,就是多次调用的结果,产生的最终结果都是一致的啊,产生最终结果是一致的,所以呢,就是我们做账户数据同步啊需要做的事情,那我们呢,就所以现在这个地方我们就用user account service。
18:10
那这个地方啊,然后呢,我们去点一个方法,这个方法呢,我们就也叫这个five好,然后呢,呃,这个方法里面呢,我们实际上嗯是需要也是需要这里面的若干参数的,所以那我们就只能把这些都传过去好,然后接下来呢,我们一会呢,就要就要写这个方法啊,就要写这个方法,然后这个方法呢,我们嗯。也要我看一下啊。嗯,先给它生成吧,先别管它返回成,先给它生成,然后这块呢,我先给它生成好,这块呢,就是我们要处理的问题了,就是嗯,这个账户处理对吧?嗯,然后密密等性判断啊,密等性判断好,我问一下大家是先做密等性判断还是先做账,对,因为你没密等性判断,你先账后处理,你再判断不赶趟了对不对,所以先做密等性判断,然后再做账后处理,做完账后处理之后,注意我们这边还有一个表,这个表呢叫穿表,叫做资金流水表,在这个资金流水表里面呢,它会详细的记录你的资金的出出金入金的所有的情况,比如说充值,比如说提现,比如说投资,比如说回款,比如说还款,他会每一笔都记录上,所以当我们的账户。
19:40
只要这个user的账户表发生变动,那么这边就有一个明细,有一个流水,明白吧,所以呢,我们这边呢,就还会有一个记录这个账户流水,对吧?啊记录账户流水好,那我们要做的就是这三件事。
20:00
嗯。
我来说两句