00:00
那首先呢,第一件事情呢,我们就是创建一个user版的ctrler啊,在这个API这个包下面,所以呢,我们在SRB这面。我们直接打开这个controller,然后呢,我们找到user controller在这我们把它移植到API包里面去。好移过去,移过去之后呢,在这个user b的controller里面呢,我们先把必要的注解呢,给它添加上上面这一大堆。好,注解这块呢,我们对它进行了一个呃优化,就是原来是user办的,现在呢,我们给它改成API号user办的啊,然后接下来呢,啊,下面这款我们写一个接口public啊,这个接口呢,就是我们要绑定的账号的这么一个接口,那这个接口呢,就是我们在页面当中。上荣宝这个页面当中,点开户按钮要调用的这么一个接口,好,然后呢,我们就写上B啊,那既然是要调用这个接口,那这个接口呢,就要接收request body,我们刚才封装的这个user band的view对象,好它就可以把我们的后台的这个请求啊那个接收过来。
01:18
好,然后接下来呢,接收过来之后,第一件事情,我们要确保当前的这个用户啊,他在做账户绑定之前,他已经是登录的了,所以说我们怎么确保当前用户已登录呢?从token当中拿到,还拿从那个海当中拿到token,并对token进行校验,确保用户已登录好,然后因为后期呢,我们要做账户绑定。
02:02
我们要根据什么做账户绑定呢?根据user ID做账户绑定,因为你会发现刚才我们在数据库当中提到的这两个表,User band和user in for呢,它们是根据这个字段绑到一起的,就是user ID啊,他们两个表怎么做关联,根据user ID做关联,好,然后呢,那也就意味着我们这边呢,要根据UID呢去,呃,在我们的当前的这个数据库当中呢,创建一个user办的数据库记录啊,User b的数据库记录里面的user ID呢,要和这个保持一制,所以呢,在这个地方呢,我们就要根据user I做一个绑定,要从我们的。Ton当中获取到硫酸。好,因为我们这个token生成的时候呢,它是啊有UID的啊,所以我们再回顾一下我们生成token的那个过程,我们生成token呢,是在user in for controller里面,然后呢,我们在VI的时候,对吧,然后呢,在这个里面VI的最后啊。
03:16
Log in点进去log in的最后呢,我们是生成了这个token对吧?啊生成token在哪生成在这生成的,然后传了谁传了ID和内容好,然后所以token里面呢,它是带ID的,那这样的话呢,我们从这个token的载荷当中,我们其实是可以反向获取到这个ID的,那所以呢,我们就在这个地方。并从token中获取U此ID啊,所以这件事情怎么做呢?在这面呢,我们得放一个http server light request,然后request,然后接下来呢,从这个位置我们request.get had啊,然后里面拿到token,好,那这就是我们的token了,接下来呢,我们用JWTS之前我们引入的工具类,点get u ID,直接从图片当中拿到UID就可以了,好,这块呢就是UID,所以这块呢,是从hi中获取头款。
04:19
啊,然后整个这句话呢,是对token进行校验,并获取user ID啊,你看一下user ID这面呢,它实际上校验了这个get claims方法,而get claims这一块呢,实际上就是它,它整个其实就是对token进行一个校验的过程啊,如果校验不成功的话,他直接就好异常易登录了,好所以说呢,这边呢,我们就通过这两行代码完成这样的一件事情,拿到UID,那么拿到UID之后呢,接下来我们就根据UID做账户绑定,所以这个账户绑定的过程呢,我们会写到service里面,那这边呢,我们就写resource private user fund service user band service啊好,然后接下来呢,在这个地方我们user fund service.com。
05:12
It command band user,然后接下来呢,这面呢,我们写user band VO,就是把这个user b的VO先给他传进去,然后再再把user ID传进去,这两个我们都需要,一个呢是从前端啊取出来的用户填写的基本信息就这些,一个呢是通过登录用户判断出来的当前用户的UID,好,然后接下来呢,我们最终要得到什么注意,最终呢,生成一个动态表单的字符串,所以我们要最终要生成的是啥?就是要生成这个东西,明白吧,生成这个东西返回给前端,前端一展示表单就自动提交了啊,所以呢,我们要生成一个动态表单的字符串,那所以这块呢,我们就string啊,叫做form string。
06:11
这个是我们的这个方法要做的一个核心的内容,然后接下来呢,我们就尾寸2.ok,然后点data塔,然后呢点叫做form词中吧,然后接下来呢,我们把form针呢放到这,所以这块就是我们的接口的定义,那当然上面这块我们应该完善一下叫API。Operation然后这块呢,是账户绑定提交数据啊,然后下面这块呢,我们写at post at post对吧,那然后这边呢,我们写。就写奥奥,就是后面我们会有一个这个用户登录的校验啊,就是在网关那一层,我们还还需要到做到后期的时候,网关这一层啊,网关这一层呢,我们还需要一些知识点的补充,做这个用户合法性的校验,然后所以呢,但是现在我们讲不了,后面再讲,然后呢,这个是网关需要读取的一个路径片段啊,这个大家先知道,所以我们先给它写上o find,就是呢啊,所有的需要登录才能够执行的功能,我们都写到这个O这个路径下,然后呢B后期呢,我们会通过网关对这个路径进行校验好,然后接下来呢,在这面呢,我们就啊需要生成这个service out加enter great。
07:44
好,然后接下来呢,Out加an implement好,然后接下来呢,注意这块呢,我们要做的事情,其实核心就是什么呀,核心就是生成动态表单字符串,而这个动态表单的字符串,它的表单模板就是它啊,它的参数就是什么呀。
08:12
就是就是这个表格里面的所有的参数啊,然后他的提交地址就是什么呀,就是这个地址提交到我们LOCAL9999的这个地址,好,所以现在我们要做的就是这件事情,也就意味着现在呢,我们要动态组装这么一个表达了,所以你动态组装你是不是得整字符串啊,把它以字符串的形式呢,在我们的。这个里面写,那你可能就要定义一个字符串,比如说然后这里面把刚才那表单字符串都粘进来,对不对,粘进来之后呢,把这个里面的,比如说action啊,动态的换成刚才咱们这个。换成这个地址啊,然后把这个mobile啊,后面的value啊,动态的换成你搜集来的数据,因为你在表单当中,你不是搜集这个用户的手机号了吗?把这个手机号对吧,从这个U办的VIVO里面,然后给他拿出来这样写。
09:08
点第成本啊,然后这个也是这个,我们这个签名一会得自己算一下,根据什么算,根据刚才上面这个算法。根据这个算法,要生成这个就是这个签名,然后这个地址怎么写这个地址,写这个地址。写这个我们要提交的这个地址,当然前面这块改成后九九。然后这块呢。嗯,那它是个字符串是吧,那就直接写到这那字符串,然后这块呢,是个local host,这样写拼装表单太麻烦了,有的同学都已经看眼花缭乱了,所以那这个表单呢,我们有一个辅助方法来帮助我们辅助生成这样的一个表单字符串,通过一些面向对应的方法来生成这个字符串,不用我们像这样一点一点写,万一有一个字符哪块你写错了,你还看不出来对吧,回头这个表单就没有办法进行提交了啊,所以呢,接下来呢,其实我们的目的就是它了啊,目的就是它,但是过程呢,我们可以让它更优雅一点,那怎么去做呢?之前呢,我们引入过一个叫做helper的这么一个。
10:26
工具。这面哈。嗯,恢复宝里面我们引了一个叫做form helper的这么一个工具啊,我们把它打开,这个工具里面呢,你看是不是有一个build form方法呀,而这个build的放方法,它是不是最终也是帮助我们提交我们的这样的一个表单字符串啊,你看这不就是这个吗?只不过呢,这个表单字符串里面的这个input string,还有需要真正提交的这个action地址。啊,我们通过上面呢给它传过来,那么这个action哪来的呢?你调用这个build form呢,通过URL传过来就行了,然后这个表单字符串哪来的呢?表单字符串呢,我们是通过这个permeter map啊便利,然后动态的给它构建出来的这个代码片段大家有能看懂吧,我们首先去创建一个input string对吧?啊是一个分buffer型的,然后我们对这个perter map呢进行一个便利对吧?便利的过程当中呢,我们分别把键和值取出来,然后利用这个键和值呢,我们就构建这个input啊,最后呢,我们把所有的permeter里面的这个键值对全都给它啊判起来,连起来,连起来之后呢,组成最终的input string,然后呢,我们把它放在form里面,这样的话,这个工具其实就是我们构建表单字母串的一个工具了,那我们要做的是不是就是组装这个map集合就行了,然后最后调用这个beautiful form,然后把URL传递给他,把map传递给他,我们是不是就表达。
11:56
字串就构建出来了啊,所以这个呢,就是一个工具啊,那所以呢,接下来我们就用这个工具来构建我们这个表达。
12:04
好,那这样的话呢,刚才这个我们就。通过调用这个工具,工具叫做。嗯,From helper是吧,From helper,然后加form。好,需要俩参数,一会我们再传,然后呢,这俩参数最后呢,会给我们返回一个字符串,叫做form s tr form string,好,然后接下来呢,我们就把这个return form string把它回去就可以了,然后现在呢,我们来看这个两个参数,这两个参数呢,第一个参数是刚才我们看到的这个URL地址啊,也就是说我们要往哪提交,要往这提交对吧?啊URL地址哈,我们需要呢,把这个URL地址呢写过来。那当然了,你也不用硬编码到这个位置啊,正常情况下你应该把它硬编码到这个位置啊,我们呢,其实已经还是给大家提供了一个啊,Hbf h FB cost恢网cost这个也给大家提前写好了啊,都是一些常量的定义啊,就是所有的URL地址,你要提交的远程UR地址都给你定义在这儿了,所以我们调用起来还是比较方便的,那么用户绑定这块呢,就是这个了。
13:23
就是这个了啊,所以呢,它这个呢,就叫user b UR。啊,所以我们在这个地方呢,就在这个位置,把这个叫汇付保cost.user band URL作为它的第一个参数传递进来就行了,好,接下来呢,我们来看第二个参数,第二参数呢,我们说它应该是一个啊集合对不对啊,间值对的集合,所以呢,我们先把这第二个参数呢,给它创建出来,叫new。哈西map,然后object啊,然后接下来呢,我们就给它起个名字,就叫这个台湾名词麦。
14:06
啊,当然了,这块你也可以用面向接口的方式去编程啊,用map给它封装一下,这样的话呢,我们就一个一个参数来组装perter map.put那前面我们说到了,我们在组装这个参数的过程当中呢,实际上这个参数的来源是哪?就是文档当中的这些参数列表,那这些参数列表呢,我们要一个一个呢给它组装上去,所以我们一个一个来写AID。那这块啊是AID,那当然了,刚才通过看文档,通过看文档,文档当中有一句话非常重要,他说呢。这个也是之前给大家读过的啊,那我们现在回头再读的话,可能大家就知道是怎么回事了,嗯,这呢,他说所有的字段呢,都用驼峰形式,如agent ID改为agent ID,也就是说当前文档当中,它给你的字段呢,叫agent ID,但是你实际传的时候呢,你就要用这个。
15:08
你就要用agent ID来看啊,当然了,这个是专门针对恢复宝当中的这个啊,就是这个接口,它就是接口的这个编写人员啊,他我不知道他出于什么目的啊,反正他就是这么写的,但实际上如果要我写这个接口的话,我就直接写成这个了。然后用户这个后端一看,那就直接组装它就行了,就没有必要再补充这么一句话。明白吧,啊,就没有必要再补充,但是人家恢付宝这个原始的接口就是这样定义的,我们就尊重它,所以呢,大家也需要去,嗯,学会去看不同的开发人员,不同的接口编写人员写的这些接口,啊把这些细节呢给他掌握住了,所以呢,这个接口他就是这么写的,那我们就尊重他吧,我们就也这么写,所以呢,既然这边它是这样写的,那我们这边呢,我们就这样写明白吧,啊然后这A的ID了,哪来呢?A的ID呢,也是在刚才这个常量里面定义。
16:07
这个是什么?这个是恢付宝给你商户分配的一个唯一标识,比如说我现在是上荣宝和恢付宝做对接,那我上惠付宝给我们分配一个商户标识,就是999888,就类似于你去那个理发店对吧,你有那的会员这个东西就是你的会员卡号啊,每一个会员呢,都有一个唯一的会员卡号,它根据你一个会员卡号能识别出来你是谁啊,那我们和惠付宝做对接,还有一些其他的金融平台也可以和惠付宝做对接,因为惠付宝是一个三方的一个金资资金托管平台嘛,它不单单只为上升保服务,它还会为其他的一些这个资金这个这个借贷平台服务,对不对?所以每一个每一个这个金融机构啊,每一个就是这个资金,资金借贷的这个金融机构啊,类似于上荣宝那种啊,他都有一个汇付宝给他颁发的像会员账号这么一个东西啊,我们呢啊,那汇付宝需要你传给他的这个东西,所以那我们就传给他,传给他的话,我们是把他定在了。
17:07
是BF cost里面999888哈,所以h bm cost,然后这面呢,就是AID把这个999888取来,所以这个是我们的第一个参数,好,第一个参数有了之后呢,我们来看第二个参数。第二个参数是什么呢?第二个参数就是这个agent,呃,User ID啊,我们把它复制一下。所以这块你还要改U色IDUID,然后呢,这个A真的UID来源于哪?它实际上指的就是。商户的个人会员ID,也就是说在我们的商户系统当中,在我们的上荣宝系统当中注册的会员的那个会员的ID,那就是UID了,对吧?嗯,所以我们把这个UID呢,也给他传递进来。
18:02
这是相当于我们的第二个参数啊,第二个参数。嗯。然后接下来呢,就是我们的第三个参数。第三个参数呢,就是文档当中的这个ID card,这个呢就是你的身份证号,然后还有第四个参数,第四个参数呢是personal name,这个呢就是你的真实姓名,那这两个参数来源于哪呢?来源于用户的输入,你看这是身份证号,这是真实姓名对不对?还有第五个参数叫办个ta,第六个参数银行卡,第三个参数预留手机,好123都在这儿呢,银行。银行卡预留手机对不对,这个是银行类型银银行这银行类型就是哪个银行啊办他好,然后接下来邮箱是啊不是必填的,那我们就先不填它好,那所以12345这五个参数来源于哪儿啊,来源于我们刚才对这个的封装对象,也就是来源于。
19:09
我们的user band view对吧,所以呢,我们把这五个参数呢,直接给他拿过来啊,那这五个参数的编这个赋值呢,我就不这个一个一个写了,我12345好吧,我这样去写。所以呢,这就是刚才我们看到的这五个参数。好,12345到这,然后email呢,不是必填的,所以我们先不管它啊,然后接下来呢,是return URL notify ul,还记得上堂课我给大家强调的这两个词吧,啊,又出现了对不对,它是参数啊,你给他传过去,传过去有什么用,一会再说,反正先传过去,人家那边恢复往那边要用,那我们就给他传return ul是是什么是。是这款啊。
20:03
是这款就是恢付宝这面啊,用户点击返回结果页,好指向我们当前商务平台的结果页,这是委ul notify URL是什么?是恢付宝这面,它向我们的商户平台发送通知,我们这边呢,要写一个接口,所以这个是notify ul,那这两个URL都来源于我们的商户平台啊,所以呢,我们需要把这两个URL呢给他传过去,好,然后我们传一下。那这两个值呢,也是都定义死了,也是写在了h BF com里面,我们来看一下,一个呢,就是我们当前的个人中心页,这个叫return URL,所以什么意思,就是当这个用户他完成了用户绑定之后,他在恢复宝当中点击一个超链接,说返回商户页面啊,然后呢,就来到了商户的个人中心页。
21:07
所以呢,这是个人中心页的地址啊,然后这是第一个,第二个呢,就是我们看到的这个notify URL notify UR呢,是我们API下的一个路径,那很显然这个呢,是一会儿我们要在我们当前的这个恢复宝当中啊,那个当前的这个上容宝当中,对吧?八零端口啊,当前的上荣宝当中开发的一个什么呀接口,我们要在API下面的car下面的user band下面开发一个notify这么一个接口啊,所以这是两个,然后这个接口被谁调用呢?被我们的恢付宝。去调用啊,所以这就是这两个URL地址,一个是notify,一个是好吧。还是先定义上先写上啊,所以你现在已经刚才上一堂课,我们只知道有这俩词对吧,这一堂课呢,我们知道这两个词儿,它的地址是什么了啊,然后具体怎么用呢?我们下一堂课再说是不是啊,得先把这个一步一步给它弄出来,然后接下来呢,后面就是和我们这个签名相关的内容了,和签名相关的呢,有一个有一个参数啊,我们看这面。
22:15
就是他让你提交一个时间戳,这个时间戳呢,是他校验签名的时候呢,也啊需要配合校验的,这样的话呢,他防止就是你这个啊签名这个时间太长是吧?啊好,就是在一定的时间内,比如说昨天发的请求,今天他再验,那你肯定都过期了,好所以呢,一般情况下,我们远程调用的时候呢,都会配合一个时间戳发过去,然后呢,远程服务器那边呢,也会调验这个时间戳的,好所以呢,我们就传一个时间戳过去,叫time step。啊,然后时间戳呢,他让你算呢,从1970年1月1日起到现在的一个毫秒数,那这个比较好简单对吧?啊,我们呢,就直接把这个考虑过来就行了。
23:00
用笔记当中的这个方法,有一个叫request help her的这么一个类,就是它啊,也是刚才我们前面第一堂课引进来的这么一个类,这个里面呢,有个get time step这样一个方法,这个获取出来的呢,就是从1970年啊,那个1月1日起的这个到现在的一个时间,错,所以呢,我们就用它就好了,然后最后呢,有一个步骤看这个,最后这个参数就是验签参数了,就是刚才我们所说的生成签名啊,怎么生成签名,我们需要呢,通过这种方式去生成签名,当然了,前面我也说了,这个生成签名的方案呢,其实我们已经给大家写好了,把这个现成的工具方法都写好了,你就调用就行了,这个工具方法里面就是按照这个过程生成的签名,那这个工具方法在哪呢?啊,生成这个签名啊,我们来看一下笔记当中。有这个我们把它复制一下啊,这个呢,其实就是生成签名的过程,好我们来看一看。啊,也是这个request helper有个get sign,然后把这个所有的参数都传进去,所有的参数就是咱们前面这些参数啊好,然后传进去,传进去之后呢,首先他先把参数当中,假设说你已经组装了签名了,那么先不要把签名加进去,因为参与运算的是不包含签名的所有的其他的参数,明白吧?啊好,然后接下来呢,把所有的其他的参数呢,干嘛呢?是不是用用用用这个排序呀先啊你你把permit map放在map里面,因为map是排序的嘛,啊,它自动就对你的这个permit map里面的所有的字段进行按K值排序了,排完序之后是不是用竖线把所有的Y6连起来呀,是不是就是这个意思啊。
24:48
这面嘛,他说先干嘛,先按参数名排序啊,然后呢,再用竖线把所有的Y6连接,对吧,就是这个意思,好,所以呢,这面呢就是排序。
25:00
排序,然后连接啊,然后接下来下面这个步骤是不是MD5加密啊,你看这边不是写了吗?把你最终的这个结果啊,最终排序完的结果放在这个里面,然后用MD5的形式加密嘛,对吧?啊,所以这边呢,就MD5加密好,加密完了之后呢,我们就生成一个MD5串了,好这个MD5串呢,最后就以参数的形式,最终组装到我们所有的参数的后面,所以整个这个参数的组装的过程,实际上就是对什么呀,对整个这个文档的一个接口文档的一个解释说明和翻译了,好我们组装的是哪些参数啊,就是这些参数。明白这个意思吧,好,那这块呢,就是整个我们啊,表单字符串的一个自动生成的这么一个过程。好表单字符串自动生成了之后呢,它呢会作为一个结果返回给前端,那这个地方就就会作为一个结果就就返回给前端了啊前端呢,就会得到一个字符串,前端得到字符串之后,因为这个字符串里有什么。
26:01
因为这个字符串有提交啊,我看一下啊,真的,因为这个字符串里是不是有自动交啊。所以呢,前端得到这个字符化之后,直接就会提交到哪,咱在咱们这个信息提交到这个地址当中去啊,提交到这个地址当中去,好这个地址是哪,这个地址就是我们的user办U就会提交到我们的汇付宝里面的这个绑定用户的这个地址。明白吧,那所以我们呢,先把这个给它重新启动一下,然后下节课呢,我们对它进行测试啊。
我来说两句