背景
电子商务网站给我们买卖东西带来了很大的方便性,在这里我们一手交钱一手交货。
客户交了多少钱买了多少的货(能够买多少货)都应该安全的记录下来,买卖记录应该如实的记录下来防止纠纷。
为了保证上述要求:我们应该对买卖的数量有限制,数据的有效性进行校验。比如数量为负数,如果站内系统做的不好可能会出现加钱的情况。或者数量太大会造成把库存都锁定或者金额计算溢出报错。
防止被第三方修改,所以页面发送过来的订单数据应该是加签的。比如防止篡改支付金额或者购买数量等等。
当然还有防止重复提交的问题,电商系统要通过乐观锁来控制通知结果。
电商系统网关支付流程
以下为我做过的支付系统中网关支付流程,重点了解页面同步通知和后台通知。由于用户可能把页面关掉,此时银行页面同步通知到达浏览器时无法通知后台。(如果没有后台通知同时用户把页面给关了,那么此时用户支付成功但是电商流水还未成功,此时就属掉单情况)。
而后台是异步通知其时序性不可保证,我们可以通过定时轮询银行。(如果银行通知还没有到达的话)
同时异步后台通知需要通过乐观锁来控制多个同样的通知一起到达的情况(银行属于外部系统,其有不可靠性我们需要考虑所有可能情况及其应对策略)。