看大家这几天都在关注这个东西,我也提几点意见,和大家共享。
问题一:目前在火车票网站和银行支付网关之间存在很大的问题,导致钱付了,结果票没了,还要退款之类的
解决方案:为什么出现?订票在前,付款在后,中间有延迟,如果将这个过程倒过来想一下,
我们假设有票池TicketsPool和退票池ReTicketsPool
买票人FIFO队列BuyersList
买票人授权FIFO队列AuthorizeLis
支付FIFO队列PaymentList。
等候退票人队列WaitForReTicketsList
1.系统线程对BuyersList中的买家资金账户和买家订票总值进行核对验证,如果资金满足,则将买家送入AuthorizeList。这个过程要对买家账户进行锁定,也就是说只有等一笔交易完毕以后该买家才能继续下一笔交易,目的是防止有人刷票。这步需要和银行网关做交互,如果符合条件的买家,该银行账户中的相应钱数被冻结,要等到后面买家买到票以后进行确认,钱款才会被从银行账户划走。
2.系统线程对AuthorizeList中的买家进行出票操作,一旦出票,则等于这笔交易成功,提示用户,票已买到,该用户被放入PaymentList
这期间会对票池中的票进行验证,发现票数为0,但是有退票的可能,这时如果把当前买家放入队尾,不太合适,所以要放入另外的队列。检查AuthorizeLis中买当次列车的买家放入另外一个WaitForReTicketsList
3.系统线程对WaitForReTicketsList中的买票人执行与2相同操作,但不同的是此时操作的是退票池ReTicketsPool
4.如果3中的买票人在等到火车出发那天仍没有等到退票,那么我们将通过银行支付网关对用户账户进行解冻操作。
5.如果2和3的操作成功则系统对PaymentList中的买家账号进行扣款操作。