开发者学堂课程【RocketMQ 知识精讲与项目实战(第二阶段):支付回调处理流程分析】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/703/detail/12436
支付回调处理流程分析
在完成支付订单创建之后,就要把用户的请求上传到第三方平台。用户在第三方支付平台完成支付后,第三方会回调告诉用户支付的结果,在此我们完善一下支付回调之后应该做的事情。
首先要根据回调的参数判断用户支付的状态,如果是支付成功的话,流程可以继续往下走,如果是支付失败或者是支付异常,这个支付的流程是要返回去的,等待用户进行下一次的成功支付。
下一步,当支付成功后需要更新一下支付订单的状态,把它改成已支付。
在创建支付订单时,当时设置的是未支付,当用户支付以后,要将支付的状态改为已支付。
在改完以后还需要更改订单表的信息,还要去操作用户表的用户积分等等,如果下一步和以后的步骤都是通过远程的 RPC 来完成的,那势必会造成一个请求堆积的问题,所以对于下边的更改订单表、更改用户的用户表加积分,包括其他的一些,如果想记录状态的话,想记录用户的支付状态的话都是通过发消息进行处理,所以在这里要先创建一个支付成功的消息。
然后把消息创建出来之后,直接进行发送其实没有太大的问题,但是要考虑一个细节,如果更新订单状态为已支付的消息发送失败,MQ 如果出现了问题,这样数据就没有传输到订单系统,没有传输到用户的服务。所以要把要发送的消息保存到数据库,然后再去 MQ 中去发,发送过去后可以获得发送成功的消息,也就是一个状态,如果可以判断这个状态发送成功就可以把这个数据库里的信息删除掉。
为了保证支付成功的消息可以发送成功,可以先在消息的发送方进行数据库的持久化,然后去发,发成功之后又根据回弹的结果进行数据库信息的删除,这样就可以保证百分百的支付信息发送成功。
这就是关于支付回调处理分析的一个流程。