00:00
接下来下一个步骤呢,就是调用支付宝接口,好,那么支付宝接口呢,我们可以参考当时我们官方文档当中的这个请求示例,所以呢,接下来我们就可以把这个请求示例呢,直接以复制粘贴的形式呢,放到我们的应用程序当中,然后呢,我们再对它做一系列的修改。好,先粘进来啊,粘进来之后呢,我们先来看一下前面这个位置。首先呢,这个位置呢,是创建了一个阿里配client的对象,那我们之前呢,在我们的应用程序当中,其实呢,已经对阿里配client进行了一个初始化,我们是通过这个并节点的方式初始化的这个阿里pay client,所以呢,在这个位置业务层当中,我们就不需要去再去创建一次阿里pay client了,我们只需要把之前我们已经创建好的啊,这样的一个并对象呢,以依赖注入的方式注入到我们的这个阿里service m PL当中就可以了,所以呢,在我们的类上,我们先写一个依赖注入resource private。
01:20
阿里client。好,接下来呢,我们就有了这个阿里pay client了,那么在后续的操作的过程当中,我们就可以使用阿里pay client向远程的服务器发起一个支付请求了,那么我们继续来看我们的这段代码,那接下来呢,就是呃,要创建我们的支付宝的一个请求对象,那因为我们这个。接口的名字呢,我们看一下这个接口的名字啊,我们这个接口的名字呢,叫阿里配点trade.page点配,所以你会发现我们的这个请求对象的名字呢,就是阿里pay trade page置pay request,而我们的响应结果的名字呢,就是阿里pay trade page pay response,所以在文档当中,它给我们提供的这样的一个接口的名称是非常有用的,那我们在编写代码的时候,就要根据这个接口的名称啊,你看把接口名称当中的点去掉,然后呢,把每一个单词的首字母变成大写,最后呢,再加上response或者是request,那么就是这个接口当中的请求对象和响应对象了,好,所以接下来呢,我们用这种方式呢,就创建这个请求对象,然后接下来这两个呢,我们来看一下叫notify ul和。
02:52
UR在我们的接口的公共请求参数当中有一个return URL,它呢是非比天的,所以呢,在最开始我们所提到的这个。
03:05
阿里pay client的这个构造当中呢,就没有去构造这个URL,那这个是我们一个可选的操作哈,那么这个是做什么用的呢?后面我们再说,所以呢,临时的啊,我们先把这两个参数屏蔽掉,先简化一下应用程序当中service层的这个代码,好,那这个就是嗯,所有的公共参数部分。好。接下来呢,就是这个Jason object的一个创建,那么我们会发现这个名字呢叫base content,那么很显然它就是在组装最后这个数据,那这个数据呢,其实就是我们真正的当前这个接口方法的请求参数了。那么这个结果方法当中有12344个请求参数是一天的,所以呢,我们就需要把这四个请求参数呢,至少要给它组装起来,所以呢,我们先引入这个Jason object。
04:13
这个是组装当前业务方法的数学参数,好,然后接下来呢,我们依次的看一下这四个参数,那么我们看一下这第一个参数呢,就是out trade number,对应我们文档当中的这个out trade number就是商户订单号,那么这个里面呢,我们就可以从我们前面的订单对象当中,把商户的订单号呢给它获取出来,所以这个地方呢,我们就填写orderin for,第2GET order number,那这个就是我们的第一个参数哈,商户订单哈,那么我们来看第二个参数叫total amount。
05:01
那么total amount呢?就是我们的订单总金额,那单位为元,并且呢,精确到小数点的后两位,取值范围为。啊,这样的一个范围,然后金额呢,不能为零,好,那这个就是一个视力值,所以呢,我们来看一下我们怎么样去组装这个参数,那我们呢,需要从我们的订单当中去获取这个金额啊,我们订单当中的这个金额呢,叫做点get total to费啊,那我们来看一下我们的订单当中的这个total fe。微信支付当中啊,就是之前我们讲过的微信支付当中,他的微信端啊,需要的订单的金额呢,是以分为单位的,所以当时呢,我们的这个订单对象当中的这个total费呢,就建立成以分为单位的这样的一个数据了,但是现在呢,支付宝这面呢,它是需要以元为单位,所以呢,我们就需要把这个金额呢,再除以一个100,它才是以元为单位的一个数据,那这样的话呢,我们就。
06:07
在这个total费的这个基础上呢,对它进行一个除法操作,那这个怎么做呢?首先呢,我们先把这个数据拿出来吧,拿来之后呢,啊,因为涉及到金额嘛,所以呢,我们还必须得用这个big个DEC来做运算,所以我们先把它to一个string,然后呢,前面我们先用一个这个S。好把它传递进去哈,这样的话呢,我们以这个数据呢为模型,或者是说为原始数据创建了一个big格decal类型的对象,然后接下来呢,我们用它呢,进行一个除法操作,叫做divide,那么我们应该除以100,但是这个100呢,在这个big个DEC的这样的一个数据类型的前提下呢,不能这样直接去除,我们必须呢,也要创建一个big个decal类型的理财对象啊,来去存储这个100例值,所以这是贝格戴,那接下来呢,这面就是100,好,这样的话呢,我们就。
07:13
有了这样的一个数据哈,这个数据呢,就是我们最后的这个。然后接下来呢,我们要把这个total呢,存储到我们的这个base content当中,那么这个base content我们就这样存过去,好,那这是我们的叫做。订单总金额的创建的一个方式啊,然后接下来呢,我们再来看第三个参数叫subject,那么这subject的意思呢,就是订单的标题啊,所以呢,我们从我们的订单对象当中。直接可以拿到我们的订单标题。接下来我们来看第四个参数,叫product code,叫商品编码。
08:05
这个呢,其实就是销售产品码,与支付宝签约的产品码名称注,目前电脑支付场景下仅支持fast instant trade pay,所以我们就写这个值就可以了,我们把这个值呢复制一下,复制到我们的应用程序当中,好,那你会发现呢,在它的示例代码当中,给我们的这个示例值呢,也本身就是它啊,所以说我们其实无需在这个地方做修改了,那么在接下来的这个我们的业务层方法当中的参数呢,就是。可选的了啊,所以说呢,如果后期需要的话,我们呢,可以去添加这个可选参数,如果不需要的话,那我们就不需要添加了,那在这里面举个例子,比如说像这个故事机,现在我们的订单呢,就是一个订单里面只有一个商品,也就是我们当前的这一门课程。
09:00
那么大家平时在淘宝或者是京东上购物的时候,那个商城系统里面的订单呢,通常情况下,一个订单里面可以买好多商品,那么一个商品呢,也可以有好多个数,所以如果是这种订单的话,我们还需要填写这个goodose detail,就是商品详情,那在这个goods detail里面呢,你会发现呢,它其实呢是一个啊列表啊,然后这个列表里面的每一条记录呢,都会包含一个商品的ID,然后比如说商品的名称啊,商品的数量,商品的价格啊等等这样的一个情况,所以呢,这个是我们的boos啊,它是一个数组,这里面可以写好多商品的基本信息,当然我们当前的这个订单当中呢,不存在这么复杂的情况,所以呢,我们就不需要去填写了,那么在这个位置。我们就可以把其他的啊一些可选的参数呢,先暂时先删掉,后面呢,如果我们需要的话,我们再去添加哈,现在我们先写它的基本功能,好,那这个就是我们组装当前业务方法的请求参数了,那么这个请求参数我们组装完成之后呢,后面还会有一些其他的可选参数,如果我们不需要的话呢,我们就把它删掉就可以了,那么接下来呢,我们就把我们当前的这个业务参数呢。
10:25
放到我们最终的request请求对象里面,所以我们使用的是request.site business content这样的一个方法,然后呢,我们把这个业务参数,也就是business content to string,把它转换成Jason字符串,因为business content本身是一个Jason object的对象嘛,好,转换成Jason字符串之后呢,我们呢,就得到了一个完整的request对象了,然后接下来呢,我们通过配置Q的方法呢,去调用远程的支付宝接口,所以这个地方。
11:14
好,那很显然这个地方呢,有一个异常是需要处理的,所以呢,我们啊,可以在最外层啊去捕获这个异常。CTRL加T,我们选择try catch。好,那么在TRY开这个位置呢,我们可以through一个运行时一常through new runtime exception,然后呢,这块我们抛出一个异常信息,叫做创建支付交易失败,好,这是我们对异常的一个处理,那么在这个里面,一旦我们的请求发送成功了,并且我们也得到了一个成功的响应的时候呢,我们在后面这个位置就可以对这个response里面有一个叫success的一个属性进行判断,那么一旦这个success的值为true,我们就可以认为我们的这一次的调用是成功的哈,那接下来呢,我用日志的形式吧,把它反应一下那点O。
12:28
叫做调用成功。返回结果,我们可以把返回结果打印一下看看啊,是啥response点啊。Get包。好,这个就是我们应用程序的一个返回结果,那么else。就是调用失败。
13:01
那如果是调用失败的话,那我们可以啊,去打印一下返回码和返回描述,所以呢,这面我们可以写返回码。那返回码呢,是get cold。妈妈,返回描述,我们可以加一下。好,那这个呢,就是我们的返回描述啊,那如果是错误的话呢,在这个地方我们就不去继续向下执行了,我们依然呢,是在else这个位置呢,去抛出一个创建支付交易失败的这样的一个结果,那么如果是调用成功啊,那么我们就会正常的执行到这个流程当中,我们在这个地方呢,我们就可以写一个Miss bo.get哦,对了,当然了,我们也可以把这个语存语句呢前移啊,前移到这个位置了,好,到这为止呢,就是我们的业务层代码的一个初步的编写。
14:27
最后呢,我们在我们的业务层的代码上呢,添加一个事务注解。好避免我们在订单创建完成后,后续的过程当中呢,出现一些异常啊,这样的话,一旦后续的过程有异,我们这个订单的创建呢,就会发生回滚。
我来说两句