00:00
那前面我们整合支付宝测试了我们这个支付功能,那接下来我们就将整个支付功能整合到我们这个订单系统里边,那现在呢,当我们这个创建完订单,提交了订单成功以后,们在下边呢,就可以来选择支付宝进行支付,所以如果我们来选择支付,那就应该像我们这个测试这儿一样,我们来点一个支付,那就应该来到我们的支付页,我们来看一下来刷新,应该像这一块,我点击付款,来到我们的一个支付宝的收银台支付页。那么来这个支付页该怎么做,我们先来参照我们支付宝的这一块代码,我们来过来看一下,在我们这个支付宝里边呢,我们这个是首页,目前呢访问的是首页,我们在首页上点击付款,就来到支付页来搜一下首页上的付款,它调用了什么逻辑,好来看一下这个付款按钮,那这个付款按钮呢,在这它呢是一个submit button,好,那这个submit呢,就会提交我们这个指定的表单,这个表单呢相当action地址来到了阿里trade派我们这个GSP,那就阿里trade派这个GSP,相当于我们这个一表单一提交来到这个GSP,诶这个GSP呢,相当于启动了一段代码,代码呢执行完了以后,接下来out print现当于输出了一个东西,所以们就接下来就来看这段GSP,这段JSP呢,这么来写的,说阿里这个client,阿里支付的这个客户端,这个客户端呢,然后将我们之前配置的阿里APP con,就是我们这个里边。
01:31
配置的这些网关等各种信息全部传过去,包括我们的这些签名数据格式杰森以及我们的编码UTF8等等,这全部呢整过去以后,然后他就利用这个客户端阿里pay看这个客户端,然后呢,他构造一个这个支付请求,这个支付请求里边呢,填了我们一些参数request getme,那就是从请求中获取一些请求参数,所以我们这个in对页面这个表单呢,就有一些名字叫这些的请求参数,那就这一块是可以随便变的,它呢值获取来这些请求参数的值,每个参数的值都代表什么意思,我们在这呢都能看到,第一个是商户的订单号,那相当于我们看我们要支付哪个请求,把商户的订单号要支付的这个金额,包括呢,我们这个订单的名称,以及我们订单的这个描述全部拿过来,然后呢,把这个请求点一个set,设置一个我们这个业务内容,把这个所有的属性相当于以一个接的方式。
02:31
这样呢,又设置进去,我们这个请求构造完了以后,使用我们这个阿里支付客户端,然后去执行这个请求,把请求执行完的这个内容,然它的这个body相当于把响应的这个body数据拿来,然后呢,输出这一块out print的输出,那就是直接写在页面,那让我们想起来应该就是这一段代码执行完以后就会写一个页面出来,那写一个页面那就应该是我们的这个支付页,就是当我们来点一个付款以后,我们来到的这个支付页,所以呢,我们现在要想要支付,就来调用我们这段逻辑,那这段逻辑我们想要用,我们还是参照官方文档,我们使用电脑网站支付,电脑网站支付呢,我们现在要想用我们的这个阿里支付,现在我们要使用这个平台开放的SDK,所以我们SDK呢,就得先来下载,来下载和使用,在这个SDK里边呢,我们Java版的SDK,相当于我们在这一块支付要调用的这些类阿里client之类的,那都在我们这个。
03:31
SDK里边可以使用me依赖的方式点进来。然后呢,我们可以选一个SDK的版本,比如4928,好,我们把这个复制过来,这就是我们要使用阿里支付,我们先来导入这个SDK,好,那现在呢,就直接在我们订单系统里边,我们也懒得给其他系统里边导了,直接放里边,然后呢,在这个里边来导入阿里支付的这个模块。我们把这个模块呢,写在这,我这个导入咱们这个支付宝的SDK,它的开发工具包,那把这个导进来以后呢,我们接下来就要像这一块一样支付这块支付呢,页面上的这些代码,我们完全可以封装一个工具类起来做就行了,包括我们这样阿里pad config这个配置呢,我们也可以直接复制过来,正好呢,我给大家直接将我们这个东西呢,抽取成了一个工具类。
04:24
然后复制粘贴代码的这个活我就帮大家做了,然后点进来,你在代码里边,支付里边呢,我们专门有一个叫阿里template,就是我们这个阿里支付的这个模板类,把这个支付的模板类我们就直接放到我们这个订单服务里边,现在只有订单,我们用到支付功能,那就来到这一块,这一块呢,我们现在把我们的这个我们就放到这个conflict里边,好我直接点一个OK,这是阿里派template,然后呢,接下来他要引入的一些东西,好我们把这个东西呢。我们还要引入一个支付的VO,因为要支付的话呢,页面要提交一些数据,我们刚才看到在这呢,页面要提交我们商户的订单号,订单的名字,订单的金额等等这些信息,我把这些信息呢,也专门给大家抽取成了一个VO,叫支付用的这个VO,这个VO点进来也非常简单,就是我们的这个商户订单号,订单的名字,还有我们这个订单的金额,以及他的订单描述。
05:25
我把这个VO呢,直接也给大家复制过来,那支付期间页面呢,就提交这个数据,我把这个VO复制过来,整个抽取过程呢,我们就不演示给大家了,就是复制粘贴,然后把这一块拿过来,把这个VO CR by删掉,然后它配VO点好,那现在呢,这些都准备好,准备好了以后呢,这有一个支付的响应,我们相当于。将我们阿里派config里边这些可配置项,以及我们的这个支付方法,我专门呢都抽取出来放在这儿了,那放在这儿以后呢,接下来我们要做的就是我们来配成我们自己的信息,因为我们之前呢都已经配好这个了,所以我们想要配置自己的信息,把我们之前配好的这一块所有内容复制过来,首先是AP pidp PID我们复制过来,还有他的这个商户的私钥,由于这一块太长了,我们就从下边直接给它删掉,好我们准备把这个私钥呢也复制过来。
06:25
这是商户的私钥,把我们配好的这个私钥,我们直接把这个拿过来,我们直接拖到下一行,好,我们把这个双引号呢,全部复制完,拖到下一行CTRLC,把这个私钥呢,我们复制过来也放在这。好,我们来CTRLV,这是我们这个私钥,这个私钥整好了以后呢,接下来是支付宝的公钥,同样的来到我们这一块,将这个双引号的所有内容已复制,然后呢,我们将支付宝的公钥复制到这CTRLV已粘贴,然后呢,接下来是我们的notify URL,相当于服务器的异步回调,就是我们支付成功以后呢,他悄悄的会回调我们一个地址,那这个异步通知呢,好,我们先把我们这一块的内容先复制过来。
07:08
当我们异步通知呢,一会儿再来写来回到这儿,然后呢,还有一个我们的这个叫同步跳转,同步跳转呢,好,我们也先配上我们这一块的内容。我把这个复制过来,CTRLC,然后呢CTRLV,剩下的我们签名方式,诶大家注意在这复制,如果有这个回车符,一定呢把这个删掉,然后呢,接下来是签名方式,签名方式呢我们使用r sato进行加密。然后呢,包括我们的字符编码都是UTF8网关,网关这一块呢,我们也复制过来,这一块所有的配置直接拿过来就行了,CTRLC好,然后呢,它的整个支付功能,这块的支付功能可以给大家看一下,我就是将这个配页面这块的代码原封不动的复制过来。好,原封不动复制过来,包括构造请求这块呢,全是一模一样的代码,所以我们接下来支付的这个template我们就准备好了,而且呢,大家注意,我在这个templ list上呢,还写了一个注解叫configuration properties,意思就是我们这个类里边所有属性的这个配置可以跟配置文件的阿里派进行绑定,所以呢,我们支付宝的所有配置我们也可以写到配置文件里边,等我们这个上线了以后呢,我们直接改支付宝的这个配置文件就行了,比如我们来写一个阿里派第二一个。
08:32
我们来绑了哪些内容,我们全部呢,都可以在这来写上,比如APPID是什么?我们来到配置文件里边,把APPID,我们在这呢复制一下CTRLC,我给这一粘,我呢现在就演示上一项,其他的呢,全部都可以在这配置咱们这个支付宝相关的设置。好,我们现在呢,把这一块整合完,整合完接下来我们要做的就是当我们这个订单submit order给我们显示订单的结算页,在结算页上我们来点支付宝以后,我们就要来支付这个订单。
09:10
当我们一点支付宝以后呢,要提交的数据是哪些,我们就算看以前,以前的我们这一块,我们想要付款呢,就得提交商户的订单号,还有订单的名字,以及我们付款的金额,还有订单的描述,所以我们现在呢,直接来到我们业务的订单确认页来找一下支付宝,好,我们现在来到我们业务的订单,业务的订单确认页,订单确认页,订单确认页就是我们支付的这个页,来找一下这个支付宝。好,那下来呢,也来点这个支付宝,就是来进行支付的,但我们来点它,我们要跳转到一个地方,我们现在呢点没有跳转,我们点它呢,现在就直接来跳到一个链接里边,我们就给这个支付宝呢,我来绑上一个超链接地址,好,我把这个关掉,我们来绑上一个超链接地址,这个地址呢就是来跳到一个支付请求,比如我们来超链接跳到我们HTTP,我们当前订单服务,订单服务鼓励mail.com下边的pay order,比如呢,我们支付订单请求,但是我们要支付哪个订单,我们还得带上订单号来带上一个order SN要支付多少钱,我们可以从系统里边查出来,则说好我们来准备一下这个订单号,订单号呢,我们以前既然能取出来,在这儿能取出来,那我们呢,就可以在下边呢,也取出来CTRLV看一下订单号呢,我们是这么来取出来的,因为我们只要能。
10:44
来到这个页面订单号呢,我们就是自己确认过的,好,我们就已经给页面里里边呢放好它,然后我们再来找到后边的支付宝支付宝好,那么现在这支付宝它的这个订单,订单地址呢,那就是这一串那双重括号呢,我就取掉了好。
11:04
然后我就在这儿来写一个TH。那么th ref,那这一块呢,都是动态取的,这块动态呢,前边这是一个字符串,好我们让它单引号,把我们这个后边呢拼上就行了,加一个它好现在我们这个字符串就写好了。那接下来只要我们调用支付,就会来到我们的pay order这个请求,那么现在来准备一个controller,那就直接在web这里边,那专门来支付呢,来写一个派支付的这个web controller,好,那么这个controller呢,我们先来写一个controller,然后呢我们来处理第一个请求,然后就是去支付public string,就叫pay order,诶我们这个呢,去支付一个订单,我们现在呢,发的是一个get请求,我们都能看到页面呢,是一个get请求。这个页面呢,我们只假设有一个请求叫配O,配O我们来到这来处理这个请求,然后呢,我们还会带上订单号,这个订单号呢是必须的,来让他带上一个订单号,告诉我们request。
12:13
请求参数里边我们就要一个订单号,然后呢,有了这个订单号以后,我们想要支付,那我们直接抽取了一个阿里pay templatet,这个templet呢,在我们之前讲的这个众筹项目里边,我们都抽取过,所以我就直接拿来用一下就行了,好,阿里派tempilet,然后点一个autowa。如果我们想要支付,我们只需要调它的这个方法,点一个支付,支付里边呢,要传一个配VO,那你有一个配VO,诶我们抽取的这个方法呢,我要传一个它,传一个它呢,我们就会进行支付,然后呢,支付就会给我们返回一个数据,当然这个支付呢,有异常抛异常,然后返回的这个数据是什么什么s out。先在控制台打印一下再说。
13:02
然后呢,我们先来return一个,我们先return一个hello,我们让它呢,比如以response body的方式写出去,我先来看一下我们支付完了以后返回的这个数据是什么,所以呢,接下来如果我们页面给我们发起了这个支付请求,传了订单号,我们要支付,支付呢就要构构造这个VO,那这个VO呢,那接下来又要很多的数据VO点一个,比如我们要set这几个,第一个是set body。我们相当于订单的备注,还有一个我们这个pay VO点一个set,有个叫auto number叫对外交易号,这个呢就是订单号,这个呢是订单的备注,然后呢,我们这个订单号,还有我们的这个派VO里边我们再来set一个我们叫订单的这个标题,这是订单的主题,主题呢那就是标题,标题就是在我们这个支付这一块。
14:01
来看一下在我们这个支付这一块显示的这个订单信息。就是在这,这是我们这个主题叫测试,诶因为我们这个订单的名称叫测试,所以呢,这是我们这个订单的主题,还有我们设置这个派VO点一个set,还有我们的订单的金额,所以接下来的所有的数据我们都要准备好,其实这个数据的准备们就希望订单的service呢,能根据订单给我们查出这些信息,好订单的service来写一个owa订单的service在这。我们就直接希望订单的service点一个get order pay获取订单的支付信息,我给一个订单号,能帮我们返回我们支付要用的这个VO,配一个VO好,我们这个VO呢准备好,然后呢,我们就希望有这么一个方法都创建出来,这个方法的作用呢,就是获取当前订单的支付信息,获取当前订单的支付信息,好,然后我们来添加上这个方法的实现走。
15:10
这个支付信息呢,要返回到这个配VO里边,就是我们之前说的这几个数据配VO,我们先构造出来,我们呢让他直接把这个订单查出来,我们直接用order service,我们当前this点一个,我们现在呢,想要查订单呢,按照订单号来查询,看有没有一个get order。把order SN,我们确实呢,有一个按照订单号来查订单的方法,好查出来以后呢,其实里边的所有信息都有,比如我们这个配VO配O里,里边的set total amount,那订单要支付的总额,那就在这个订单里边有order,点一个get,我们这个要支付的总额,我们直接有一个pay amount,就是我们用户需要支付的总额,但这个额度呢,大家看这是一个big decimma,包括呢,我们来看订单这个数据库里边,订单库里边,订单表里边,我们想要支付的这个数据,支付金额,支付金额呢,我们来看,诶,这是我们一个贝玛存的这个金额,而大家注意这个金额默认呢,现在是四位小数点,但是支付宝呢,现在要求支付的,比如我们在这儿写两个零零,我点一个付款来看,他会说订单信息无法识别,所以说呢,我们这个要求的付款金额只能精确。
16:32
调到两位数,所以我们从数据库里取出来四位数,在这呢要精确两位数,那我们就来到这一块,得把金额处理一下,这个金额呢是一个decimma,那么调用它的一个方法叫点一个setk,那就是我们这个小数点的这个位数,我们就是两位,包括呢,如果我们这个四位数,比如参与优惠了,然后还多了一个一,那这种情况下怎么办呢?我们可以将它让它向上进入,无论是多一分一厘的钱,我们都是向上多取一位,所以呢,我们可以让它向上进入,所以在这一块set scale的时候,能传一个叫我们这个模式,这个模式呢,我们现在有一个这个模式,我们来看往上还有一个模式叫向上取取值的这个模式,我们有一个叫round up,所以我们总是呢向上取值。
17:24
所以我们现在就来模式呢,就是被高decimma里边的round up,我们让它向上取值,如果有小数就向上取值,最终呢得到一个DEC,然后呢,我们把它传进去,但是呢,它要求是string,那么就把它变成string,好,现在这个string变过来配VO的数据准备好以后,接下来set还有一个对外交易号,对外交易号就是我们的订单号,那么就把这个订单点一个。点一个get,我们的order SN,我们把订单号拿过来,包括呢,我们这个配VO里边还有一个叫set,我们这个主题订单的标题。
18:04
那就是比如我们就叫鼓励商城,咱们这个收银这个应该是每一个订单跟每一个订单不一样,所以我们来看数据库里边,数据库里边呢,我们保存订单的时候呢,其实没有啥标题。当然我们可以默认的,为了给用户一个很好的提示,让用户知道他买的是哪些商品,我们可以把第一个商品的名字拿来做一个标题,让他来进行一个展示,所以呢,我们也可以来查到当前订单的这个所有订单项信息,随便拿一个订单项,那么现在呢,就注入al item的这个service,好这个service,把这个service拿来,我们去来查订单项。好,我们把这个service呢拿过来,Order item service这都有了,那就ctrl end,我们在下边来要进行支付的时候,来看一下们现在要进行支付的时候,支付订单get order pay获取这个支付的时候呢,我们现在用order item service点一个我们直接get buy ID,我们也不用把ID了,我们写一个list来查询,查询所有订单项,你有一个corry wrapper,此时我们返回的都是order item订单项的数据,订单项的数据呢,点一个E口,那必须查出来的是我们当前订单所有要买的这个订单项按照订单号来查的,所以order SN我们来按照order SN我们传过来的这个订单号,Order SN我们来查这个订单项的数据,这个数据呢有很多,我们只要一个把这一个的名字当成标题就行了,他点一个GET0。
19:44
好,GET0,然后呢,我们拿到第一个,拿到第一个以后呢,我们接下来把它的这个标题点一个SQ name,商品的名字给它一返回就行了,这就是我们这个订单的标题,包括订单的这个备注,点一个set body,我们有备注了,整备注,那没备注了呢,我们可以也在这儿不来设置,或者我们将这个标题再来设置一个备注也行,我们这个备注呢,比如我们设置成商品的销售属性好,那现在呢,这一块准备好了以后,我们给这个VO里边都已经从订单服务里边封装了好多数据了,然后我们接下来就可以返回这个VO来到我们的ctrler,然后呢,我们在这儿就会收到。
20:29
阿里支付给我们进行支付的时候,我们查询订单,把这些数据构造好,然后我们来调用阿里支付的支付功能,这个支付功能呢,就是拿到这个数据里边,我们看就是这一块来构造对外的订单号金额等等,这些数据全构造好以后呢,发一个请求,然后呢,支付宝会给我们一个响应,这个响应呢是一个什么,我们可以来看一下,那现在订单服务呢,我们来重新启动,走好,我们订单服务呢,现在启动起来,启动起来以后呢,我们接下来再来购买一些商品。
21:01
我们先来返回我们的商城,我们重新来访问果粒ma,古力ma,我们现在来我们的这个商城里边,我们先来登录,我们要下单干嘛都需要登录好,来到我们的这个登录里边。这登录呢,由于第一次访问可能会远程失败,我们就来刷新一次,重新来登录,现在呢,登录成功,我们来到我们的订单服务购物车里边,那还是来买这两个商品,来点一个去结算,我们来多买上两件,这个买两件,这个买两件,你要结算呢,是24000,我们来去结算,来到我们这个订单确认页,我们已经确认好了这些信息,而且也都有货,然后我们进行下订单,我点一个提交订单。只要订单提交成功,就会来到我们这个订单提交成功页,提交成功页呢,接下来这一会有一个订单号,如果我们来点支付宝右键检查元素,我会看到我们会呢调用我们的配欧的请求,就是我们刚写的这个配欧的。我们来看一下我们刚写的这个controller的pay order请求,它会调用这个请求传入订单号,然后呢,我们接下来根据这个订单号查出订单的一些金额信息,准备成一个需要支付用的这个数据,调用支付宝的这个支付方法,好我们接下来看订单的控制台,比如我们来点支付宝,好,我来点击支付宝点。
22:16
然后呢,我们响应hello,没问题,看我们控制台,诶我们看控制台呢,发现支付宝的响应是给我们这一串数据。这一串数据截止到这儿结束,因为我们现在打印两遍,我们自己在这一打印一遍,我封装的工具类支付宝的响应还打印一遍,所以我们随便来复制一串,你发现呢,这一串其实它是一个,这是一个什么呢?这是一一个表单,这个表单呢,里边有一个script documents forms,相信这个表单,只要我们的浏览器一收到这个表单内容,他立马会执行一段脚本,这个脚本呢,就是拿到当前这个表单直接提交,说明他给浏览器响应的是一个让浏览器自动提交的表单,表单里边呢,有我们所有要用的数据,而且提交到的地址就是支付宝的真正的支付网关,这块呢很复杂,还会加上后边的数据签名,所以如果我们把这个表单数据我们拿来CTRLC,我们给大家看一下。
23:15
如果我们把这个表单数据CTRLC我们拿来随便呢给它我们来建上一个文档,比如我们就叫配点一个HTM2那建上一个网页,然后呢,把这个表单放进去来看一下会是啥效果,走们来右键notepad加加我们来打开,把这个内容呢直接一放来双击这个页面,双击来看是什么效果。诶,发现呢,就来到支付宝的收银台了,所以呢,其实相当于只要我们的这个页面被浏览器一渲染,他表单一提交,就会自动来到支付宝的收银台,所以我们现在要的就是这个效果,所以我们的这个ctrler,既然呢,现在已经能拿到我们的这个数据了,所以我们应该把我们这一块的返回,因为我们调用支付宝的支付,支付宝呢给我们返回的是一个页面,然后我们应该将这个页面直接交给浏览器,将此页面,将此页面直接交给我们这个浏览器就行,所以呢,我们现在将我们支付宝返回的这个配页面,我们给他返回,而且呢,告诉他我们响应的这个数据,那响应的是什么数据,我们最好给人家说一下,我们响应的呢,不是杰森,我们在我们的get mapping这一块来说一下,Get mapping呢,说我们呢,这是一个VALUE6我们请求映射的路径。
24:40
并且呢,告诉这有一个produce,告诉你我产生哪个类型的数据,这个类型呢,我们就来写test htm。我呢,相当于产生这种类型,而不是我们的以前什么application杰森,如果是杰森的话,是这种那种类型,现在呢,我们是一个HTMMR,明确的告诉你我会产生一个HTMR内容,然后我们重新来测试一下订单服务,我来重启一下,只要我们来调用支付,那呢我们就会返回这个页面,好没问题,家人们现在进行访问,那现在来重新提交一个订单,这儿呢是要进行一个支付,或者我们把这个要支付的单,我来重新刷一次,让他呢给我们跳转。
25:21
一刷以后呢,我们就跳到这个支付宝的支付页了,我们再来重新走一遍流程,我们可以来看一下,现在重新访问我们的果利ma com走,走一遍流程,我的购物车,然后呢,这两个包括这三个是我要结结算的,我点一个去结算去来到我们这个确认页,然后呢,我们将要支付,现在是31004,我点一个提交订单,然后来到我们的支付选择页,诶他说我们这个商品没有库存了,那我们就重新来到我们的购物车里边,购物车鼓励妙把没有库存的这个商品我们就不要选了,就是这个好,然后呢,我们来提去结算,去结算呢,我们现在来点一个提交订单,那们现在呢是24202好,然后呢,我们接下来点一个支付宝走。
26:06
支付宝呢,先是那样要支付我们这个订单,然后呢,跳到订单支付页,如果我们使用我们的这个账号来进行支付,我们现在直接用我们的沙箱账号,好沙箱账号我们来支付,CTRLC来到我们这CTRLV来支付密码六个1.1个下一步好来到我们这一块,我们来输入六个一来进行支付,点个确认付款,那支付成功以后呢,就会跳回我们的这个成功回调页,来看一下我们的成功回调页,好那们成功回调页呢,跳到这这样呢是我们配置的是eclipse里边人家支付宝给我们演示项目的这个回调页,但实际上我们电商网站,我们一旦支付成功以后,应该跳到用户的订单列表页,所以我们现在呢,下节课来把这两个功能完善,就是支付成功,这是我们这个支付宝支付成功以后。我们这个支付宝呢,调用支付会先响应一个支付页,然后呢,支付成功以后,我们将这个支付页,将支付页让浏览器展示,让浏览器展示这是我们第一个要做的,所以我们直接给浏览器返回支付页,然后接下来是第二个要做的就是支付成功以后,支付成功以后我们要跳到跳要。
27:24
要跳到哪里呢?跳到咱们这个用户的订单列表页。所以我们将用户所有的功能,包括他的这个订单列表页的数据等等等等,下一节课呢,全部编写到用户服务里边,所以们就应该跳到用户的订单列表页,那下一刻呢,就应该对阿里拍的这一块整个的支付回调先来设置一下。
我来说两句