00:00
上节课呢,我们从微信支付结果通知当中得到了解密的报文,那么这节课呢,我们利用解密的报文呢对订单进行处理,那么处理订单呢,有这样的几个工作要做,第一个呢,是将铭文转换成。Map,因为我们的铭文呢,还是一个Jason字符串的形式,那我们需要从铭文当中呢,把Jason字符串当中封装的一些数据呢,给它获取出来,所以第一个步骤呢,是转换铭文。第二个步骤是更新订单状态,那我们支付完成之后呢,用户的手机端其实已经接受到了支付成功的通知,但是我们的数据库当中的订单状态呢,还是未支付的状态,所以呢,我们要对数据库当中的订单状态做一个更新。最后一个步骤是记录支付日志,那么我们需要在我们的系统当中呢,记录一个支付日志,好,所以接下来呢,我们先来做铭文的转换。
01:03
那么我们用Jason。好,我们拿到这个Jason工具之后呢,使用Jason的Jason方法。将我们的plan转换成map,那我们得到一个map,好,那接下来呢,我们从这个map当中呢,先拿到订单号啊,我们来看一下我们的。支付通知的API文档。从解密之后呢,得到的数据呢,就是这个了,好,这个数据里面呢,有一个叫做。订单号的,我们来看一下它的具体的这个表格啊,更清晰一些,那么有一个字段呢,叫做商户订单号,就是当时我们在支付下单的时候传过去的那个订单号,那么我们可以通过这个订单号呢,将我们的订单记录获取出来,从而更新我们的订单状态。
02:13
好,我们希望拿到的订单号呢,是一个字符串。Order number,接下来呢,我们来完成订单状态的更新,那我们使用order info service来更新订单状态。那么我们将会在这里面呢,创建一个updates by order number的一个方法,我们传一个order number进去,然后为了让这个方法更灵活呢,们传一个枚举啊作为参数。给它改成支付成功的一个状态,好,然后再接下来呢,我们来记录支付日志,支付日志呢,我们。
03:00
找到我们的service层,要在我们的payment这个呢,我们的支付日志具体的这样的一个业务类,那么它对应我们数据库当中的payment info这个表哈。我们呢,创建一个方法叫create。Payment。好,我们根据我们的来创建我们的支付日志,因为所有支付日志当中需要的信息呢,其实都在这个已解密的报文当中。所以接下来呢,我们来生成这个具体的业务方法。好,那么这个呢,是更新订单状态。根据订单号更新订单状态。
04:03
那我们在这里面呢,写落点info更新订单状态,好,我们呢,写一下我们的订单状态呢,更新成了。Order。Status。点get。就是这个啊,Status的好一些。那同样的父亲这一面。我们也给它改成order status。那么啊,日志打印完了之后呢,我们就来更新,更新的话呢,我们也是根据一个条件来更新,所以是query,那我们要更新的表呢,是order info表,好,我们拿到这个query rapper之后呢,写一个查询条件order number,根据订单号来更新order number查询条件写完了之后呢,我们来创建。
05:20
订单对象,然后呢,在订单对象当中呢,我们设置我们要更新的字段叫order status,那么我们要更新的具体的值呢是。好,那根据传进来的参数啊进行更新,那么接下来呢,我们将这个数据呢,存储到数据库里面去调用update方法。那order info根据我们的查询条件来做数据的更新,好这样的话呢,我们的订单状态更新这个方法就写好了。那接下来呢,我们来完善记录支付日志这个方法。
06:03
嗯。把抽象方法和具体的。方法都给它创建出来,那么在create payment info这个里面呢,我们来创建我们的支付日志对象,所以呢是new payment。那么在这个payment info里面呢,我们要依次设置它这里面的值。那么包括。Site啊,这里面呢有订单号,而订单号呢,是通过我们创建支付日志方法当中的啊获取出来的,所以呢,我们先获取一下这个订单号,那么我们在这面呢,先记录一个日志log.info记录支付日志。接下来呢,我们还是创建一个这使用这个这呢。
07:01
呢,把我们的做一个数据类型的换点class,我们得到一个。Plan map,然后接下来我们从plan map里面去获取我们具体的需要的值,那比如说我们第一个需要的值呢,就是这个订单号,那么我们。还是查看一下这个文档啊,商户的订单号。好,然后我们把它转成字符串类型。然后我们接收一下。好,这个呢,就是我们商户的订单号了。接下来呢,我们再来设置下一个值,叫做site payment type,那么payment type呢,就是支付类型,目前为止呢,我们这边就是。
08:06
微信的支付类型,所以呢是pay,我们曾经写过一个枚举啊,叫微信。嘿。好,这是支付类型,再接下来呢,我们来。设置payment transaction ID,那这个数据也比较重要,就是我们向微信发起支付的时候,微信那边记录的一个支付业务的啊,一个唯一的业务编号,我们这笔支付如果出现什么问题了的话,那么如果想和微信那边对账的话,那么我们需要提供这个transaction ID,所以呢,我们要把它明确的记录下来,那么这个transaction ID呢,我们。从这个字段当中获取。
09:00
业务编号。好,接下来呢,我们在设置payment info里面。一个叫做tree type的这么一个值业务类型啊,业务类型呢,我们看一下我们的文档。这面呢,有一个叫做type,也就是我们业务交易的一个具体的类型,那我们这边其实固定就是native啊,但是呢,他会在支付通知里面把这个交易类型呢,明确的给咱们返回回来,那咱们呢,把这个交易类型呢也记录一下,因为在实际开发的过程当中,有可能我们用户支付的渠道它不是特别一样,有的人呢,是通过啊我们网站端的扫码native支付,那么很有可能有些同学呢,是通过小程序端支付,或者是APP端支付,因为通常情况下,我们一个比较大型的完整的一个业务呢,它会包含很多这样的一个前端的不同的组成啊,好,所以我们要把我们具体的支付渠道呢,给它记录一下,那么这面呢,我们的tree type。
10:11
从这面获取。叫支付类型。好,接下来呢,我们在payment ino.set还有什么值要设置呢?比如说这里面有个叫state。这个也非常重要,这个就是我们所说的交易状态了。那么交易状态呢,在这面它分为这样不同的一个交易状态,那我们这面呢,返回的啊,这一次他的支付成功通知当中,返回的应该就是支付成功,那未来如果我们做关单呀,或者是取消订单的操作的时候呢,那它有可能是这些状态。
11:09
这是我们的交易状态。好,这边我们设置一下,再接下来payment in for。那么还有什么呢?还有一个叫pair total。这个呢,是我们实际支付的金额。我们来上文档当中找一下。实际支付的金额呢,在订单金额就是这个里面。里面呢,有一个叫用户支付金额叫。那目前为止呢,我们没有去做什么红包呀,代金券呀这样的功能,如果有了的话,那么用户支付的金额和总金额就有可能会不一样了,所以说呢,现在我们要记录的是用户他从他的这个钱包当中哈拿了多少钱,所以呢,我们记录这个用户支付的金额。
12:09
那么根据实际业务的需要呢,有可能未来你的业务复杂的话啊,就会把这个更多的数据都记录下来啊,这样的话便于以后我们查单操作。好,这个PI呢,它实际上拿出来之后呢,它并不是直接能拿出来的,它是放在了amount里面的,所以我们要先把取出来。那这样的话呢,它并不是一个字符串,它是一个map对不对,刚才我们也看到啊,然后呢,里面有金额呀,还有货币类型什么的,所以呢,我们用object来存后面的值。那当然这面呢,我们转换又转换成map。那我们从amount当中呢?拿出用户实际支付的金额,Get total。
13:03
这回呢,我们再拿这个配合啊。你会发现用户支付金额这块呢,它这边写的是int类型,但是实际的情况下,如果在代码当中,我们直接把它当int值来用的话呢,它就会报错,它报错的具体的信息呢是double,不能转换成int,所以呢,也就是直接。影视类型转换啊,不能直接转,所以呢,我们必须先把它转换成double,也就是说我们获取出来的这个object呀,实际上在网络上传输的时候,它呢,可以直接转成double,然后转成double之后我们再把它变成。啊,这样做一个中转是可以的,你直接把它变成in是不可以的啊,它会报错。啊。那这样的话呢,我们就拿到了这个。然后接下来呢,我们去设置给他啊,这面他要的是一个引七个,那莫不如我们直接给它定义成引七。
14:04
好,这样的话呢,我们的。支付记录当中的一些基本的信息都有了,但是我们实际上返回的这个信息呢,非常多,除了我们记录的那几个特别重要的必要的信息之外呢,如果其他的信息你也想一次的记下来啊,但是我们数据库当中呢,字段又没有创建那么多,不允许,因为未来有可能我们会整合很多种支付类型,那每一种支付类型,它所返回的具体的通知参数呢,都不一定是一样的,因为是不同的厂商出的嘛啊,所以那针对这样的一些通知参数的话,我们如何去把他们。都存储到我们的数据库当中啊,像这种数据呢,我们可以专门去设计一个字段哈。就是这种,因为我们整个的这个支付通知的结果,有可能数据量会比较大,我们统一都把它存在里面,并且呢,把整个的这个数据呢,转成Jason,然后存在这一个字段当中,便于我们未来查单。
15:02
好,那所以呢,我们就直接payment in for.set content,那么正好。我们的plan就是这样的一个这数据我们直接把它存进去就好了,所以呢,这块就是整个我们组件payment in for的一个过程,最后呢,我们把payment info呢给它插入到我们的数据库当中。到这为止呢,我们整个的记录支付日志的过程呢,就做完了,那么我们回到我们的微信配service这个里面,那所以我们更新订单状态和记录支付日志这两件事情呢,我们就做完了,好接下来呢,我们来做一个测试。好,我们的服务呢,已经启动成功了。好,那么我们重新的来发起支付。
16:06
好,我点立即支付啊。好,我这边呢,已经支付成功了,我们来看一下后台。后台日志呢,这边成功的在解析出我们的铭文的基础上呢,更新了我们的订单状态,并且呢记录了支付日志。好,那我们来看一下数据库。数据库这面啊,有一个。订单,并且呢,我们的订单状态呢,是支付成功,再下来看payment这里面呢,记录了一个支付日志。好,支付日志呢,把我们需要的信息呢,都已经存储上了。
我来说两句