用户购买流程
第1步,用户点击"购买";
第2步,"商品系统"展示商品信息,生成订单id;
第3步,用户选择商品信息,提交订单。
订单入Redis队列,方便定时任务主动去取订单进行支付结果查询;
第4步,访问"支付系统",并提供appId,订单id,支付回调url等;
第5步,"支付系统"返回支付的url;
第6步,"商品系统"展示支付页面,提供多种支付方式;
第7步,用户选择支付方式,进行支付;
第8步,"支付系统"通知支付结果;
第9步,"支付系统"调用支付回调url,告知支付结果详情。
支付回调,每隔一段时间就会不断地回调,比如 1/1/4/8/16/32/… 直到接收到回复为止。
这个其实就是一种重试机制。通过延时队列实现,一次回调不成功,就再次回调,直到成功为止。
第10步,根据支付状态,决定是否执行商品业务逻辑。
第11步,通知支付结果。
支付回调
第9步和第10步是整个支付模块中最重要的部分。
支付回调的接口,需要保证幂等性、事务性、安全性。