00:00
接下来呢,我们来看一下统一收单交易退款接口,那么我们看一下我们的应用程序,因为这个退款功能呢,和前面的查单呀,取消订单呀,整个的一个API调用的流程呢,都是类似的,所以这面的代码呢已经为大家写好了,我们直接来看一下我们应用程序的执行流程,那么我们申请退款的。URL地址呢是trade we found,我们传一个order number,在传递一个退款的原因,接下来呢,我们在我们的应用程序当中呢,去调用service层的方法,叫做维放方法,好,我们来看一下这个service,那么在service层当中呢,我们首先创建了退款单,那么在创建退款单的过程当中呢,我们传入了订单号以及退款的原因,那么我们来看一下创建退款单的这个方法,好在这个方法当中呢,我们先根据订单号获取了订单对象,然后接下来呢,创建了一个退款单对象,接下来呢为退款单对象呢设置各种基本的属性,那么其中有一个呢是order number,也就是订单编号,还有一个呢是退款单编号,那么我们使用order number u求系统去生成的一个。
01:28
退款单编号这个get number方法呢,就是通过一个时间日期加随机数的方式生成,接下来呢,我们在退款单当中设置原订单金额,以及退款金额,还有退款原因,退款金额和原订单金额呢是可以不一致的,那么退款金额呢是可以小于原订单金额的,而且呢,我们针对一笔订单其实是可以发起多笔退款的,也就是说如果你一笔订单呢是十块钱,那么你可以分别发起两笔退款,那每笔退款呢是五块钱,那只要两笔退款相加的金额不超过原订单金额呢,在支付宝当中都是允许的,那么我们的这个项目当中呢,我们就让退款金额和原订单金额保持一致,也就是全额退款,全额退款之后呢,我们的订单状态会变成订单已关闭的。
02:28
这样的一个状态。那么在统一收单线下交易查询结果当中,我们可以发现有一个响应参数呢,是trade status,那么之前我们说过trade closed啊这样的一个值呢,它表示的是交易超时关闭,那但是呢,其实它还有一种情况就是支付完成后全额退款,所以说呢,我们的订单如果完成了全额退款,我们在进行查单操作的时候呢,也会发现它的状态呢,就变成了trade的,好所以我们这个里面呢,是做的全额退款,接下来呢,我们把退款原因呢,设置在我们的放的info里面啊最后呢,我们将放的info呢,保存在我们的数据库当中,然后呢返回好在业务代码当中呢,我们拿到了刚刚创建的这个与方的应付之后呢,我们就可以调用统一收单交易退款接口了,那么这个统一收单交易退款接口了。
03:30
在我们的文档当中的这个位置,它的名字呢,叫阿里pay trade found,所以我们在创建request对象的时候呢,就是阿里pay trade的und的request,那么我们还是按照之前的方式组装我们的业务参数,那么这个业务参数我们来看一下哈。在这面呢,有两个特殊可选,一个是out trade number,一个是trade number,那么out trade number呢,就是我们支付的订单号,Trade number呢,就是我们支付的过程当中,支付宝给我们返回的那笔唯一的交易号。也就是说在我们的。
04:12
数据库当中in info当中,这个呢就是out trade number,这个呢就是trade number,那么二选一就可以了,所以呢,我们在我们的业务当中呢。选择我们的订单号啊好,接下来呢,我们就设置一下我们的退款金额,那我们的退款金额呢,可以从刚刚我们创建的这个。退款单对象里面去获取,然后呢,我们对它进行一个除以100的操作,因为接口当中需要的单位名称呢是元,而我们的数据库当中存的数据呢是分,所以说我们就做一个数据类型的转换,然后呢,我们把这个乳放的传递给refund amount,接下来呢,我们设置这个refund reason,那么。
05:04
我们来看一下这个请求参数啊,Refund呢是必选的,但是refund reason呢是可选的,所以说呢,其实我们也可以。不设置这个选项哈,好,那么接下来呢,我们就需要去将我们的业务参数呢,设置到我们的request的对象当中,接下来呢,我们来执行我们的请求,得到我们的响应,那么我们在响应判断的过程当中呢,有两种情况,第一种呢是退款成功,那么我们就直接更新订单状态,第二种呢是退款失败,那么我们也直接更新我们的订单状态,如果退款成功了的话,我们更新的订单状态呢,就是已退款,如果退款失败了的话,我们将订单状态呢更新为退款异常,那么这个里面呢,它和微信支付的退款稍微有一些不同,默认情况下呢,常规的退款在我们的支付宝支付当中呢,它是一个同步返回结果,那微信支付呢,它是一个异步返回结果,所以呢,我们要通过退款的异步通知来获取退款的状态,而支付宝当中呢,啊,如果。
06:15
是。非银行卡类的退款的话,那么我们是直接可以得到退款是否成功的结果的,所以呢,我们可以通过response is success呢来进行判断,如果is success为true,那么我们的退款就成功了,如果is success为false,那么我们的退款呢就失败了,那么如果退款成功的话呢,在这个位置呢,我们就可以更新我们的退款单的一个状态了,那么我们把退款单的编号以及响应的结果,以及退款成功的这样的一个状态传递给我们的。Update refund for阿里pay这个方法,那么在这个方法当中呢,首先根据退款单的编号设置一个查询条件,那么接下来呢,我们设置要更新的字段,那么我们根据查询条件和要更新的字段呢,去更新对应的数据就可以了啊,我们呢会把我们的退款状态以及退款响应结果都更新到我们的退款记录里面去,那么这个地方大家要注意啊,我们在这个地方设置的退款状态呢,是这样的两个值,一个呢是有放的success,一个呢是有放的I,那么之前我们数据库当中设计的这个refund status呢,它是what差十哈,它的长度不太够,所以呢,需要大家把数据库当中的refund status呢改造成V差50啊,这样的话呢就能存储了,好,那现在呢,这个就是我们整个的退款代码的一个。
07:54
实现的流程,那接下来呢,我们来进行一个测试。
08:00
我们先来进行一个退款失败的测试,所以呢,我们先来对我们已有的这个退款的功能呢,做一个简单的修改啊,那么我们制造一个退款失败,比如说我们退款的金额在这个地方,那原金额呢是一分钱,但是呢,我们退的款呢,多余了支付金额,那是两分钱,那这样的话呢。我们就可以测试一个失败的退款了,所以呢,我们重新启动这个服务器。好,启动成功之后呢,我们直接对这笔订单的发起退款。请点击退款。选择原因,点击确定。好,那么这个地方呢,就会显示退款异常,我们来看一下我们的控制台上的执行结果。
09:05
那么在控制台上呢,我们找到。日志行叫调用退款API的地址。好,那么在这个申请退款的位置呢,我们调用了退款API啊,那首先呢,查询到我们要退款的这笔订单,就是这个钱包课程,接下来呢,我们提交了请求,请求的结果呢,就是一个错误的一个状态,具体的内容呢,就是撤销或退款金额与订单金额不一致,我们在这个地方呢,就返回了调用失败,它的返回码呢,依然是40004BUSINESS build,然后呢,我们就更新了订单状态,订单状态呢就是退款异常,接下来呢,我们记录了支付日志,那么支付日志呢,把我们所有的响应的内容呢,就记录在我们的数据库当中了哈,我们来看一下数据库,数据库当中呢,首先。最后一笔前端课程呢,2968的这个订单号的前端课程呢,就是我们的这笔订单,那么他呢,记录了退款异常,然后在我们的refundo当中呢,针对2968这个订单呢,我们会有一个。
10:17
退款错误的这样的一个结果哈,好,那么这个是测试的退款失败的这样的一个情况,那接下来呢,我们把代码呢,再还原回来。好,我们重新启动服务器,我们测试一下退款成功的情况。啊,我们呢,重新发起一笔支付请求。好,这回呢,我们来购买一个UI课程,支付宝新人支付。接下来呢,我们来进行一个扫码。好,那我这边呢,已经。
11:03
扫码成功了,那接下来呢,我发起付款。输入支付密码。好,我们等待他的结果。返回。那之前我们测试的过程当中呢,我们曾经停掉了我们的。NG这个服务啊,大家不要忘了再把它开启起来,好,现在呢,我们的。支付呢已经成功了,那我们呢,发起一笔退款,我们选择一个退款原因好点击确定。好,那我们的这笔退款呢,已经成功的执行了,好,那这就是我们的退款成功的这样的一个状态,接下来呢,我们来看一下,在我们的日志当中,我们还是搜索一下调用退款API这块,我们成功的查找到了这门UI课程,并且插入了一条退款记录,然后呢,发起了一个退款请求,并且得到了一个成功的响应结果,那么在响应结果成功之后呢,我们更新了订单的状态,并且更新了退款日志。
12:22
Update,好,那这就是完整的一个退款的流程。
我来说两句