您现在的位置是:首页 >> AI

如何防止订单重复支付?难以置信

2022-11-23 22:23:58 AI 11人已围观

简介在展开圣戈当斯区缴付的时候,有可能会出现订货多次重复缴付的情况,要怎样避免呢?责任编辑作者对此展开了分析,一起来看呵呵吧。 总之他们对新浪网缴付都不孤单,今天和他们谈谈怎样避免订货多次重复缴付。01 看一看订货缴付流程他们来看一看,B2C订货缴付的概要流程: 订货手提包缴付流程从付款/计算开始:...

在展开圣戈当斯区缴付的时候,有可能会出现订货多次重复缴付的情况,要怎样避免呢?责任编辑作者对此展开了分析,一起来看呵呵吧。

总之他们对新浪网缴付都不孤单,今天和他们谈谈怎样避免订货多次重复缴付。01 看一看订货缴付流程他们来看一看,B2C订货缴付的概要流程:

订货手提包缴付流程从付款/计算开始:1)付款/清算这一步棋虽然不是间接的缴付终点,但是缴付相关的数额等等信息都来自清算,这时订货的状况是未缴付2)提出申请缴付使用者选择提出申请缴付,应用程序初始化缴付服务项目,这时在系统内产生一大笔缴付小溪,该笔小溪的状况是未缴付。

3)发动缴付缴付服务项目初始化协力缴付,通常来说这种手提包类的缴付,在发动缴付这一步棋,会积极响应一些缴付的镜像,应用程序会对镜像展开相关联的处置4)手提包缴付使用者展开缴付,通常来说是透过相关联的手提包展开的,他们可以自述呵呵自己在网购中,缴付的操作过程,不同的端,对手提包缴付的处置是不太一样的。

京东PC端缴付页APP端: 在国内,网购大部分都是在APP端,商品经理会设想想尽办法把使用者带回APP,为什么我的实例图都用京东,不用淘宝呢?即使我拿UC关上淘宝,会间接重定向APPAPP端手提包缴付,他们应该都非常熟识,通常是挂起手提包,缴付。

APP缴付WAP端:智能手机的页面站,WAP端缴付通常是间接挂起相关联的手提包,如果挂起手提包失利,就重定向介面。

京东缴付WAP端PC端:PC端,通常来说是关上结帐,展现一个条码,透过手提包条码缴付,上面是京东的微信缴付条码页5)缴付反弹使用者顺利完成缴付后,协力缴付网络平台,会反弹商家,通知缴付结论6)并行订货状况缴付服务项目在证实缴付顺利完成后,会向订货服务项目并行缴付的结论,订货服务项目更改订货的状况,由未缴付—待提货,应用程序透过HTTP、长相连,或者服务项目端积极主动发送的方式,在介底下更改订货状况。

他们再从缴付小溪的角度观察呵呵缴付状况的变动:

缴付状况变动未曾缴付,到有缴付结论的基元,中间还有一个中间状况——缴付中使用者透过关上手提包—顺利完成缴付—缴付反弹,这几天的缴付小溪就处于缴付中为什么要花这么多字数来说缴付的业务流程、可视化操作过程呢?即使我认为,避免订货的多次重复缴付,闻所未闻是技术上的难题,也是业务和商品上的难题。

02 为什么订货会多次重复缴付1. 未防重导致的多次重复缴付他们可以看到PC端缴付,是扫描条码,这些条码,就是相关联相应的缴付小溪,假如使用者多次重复点击缴付,如果不做防重的话,会生成两笔缴付小溪,也就是两个不同的条码,要是使用者分别扫了两个不同的缴付码,那么毫无疑问,就会产生多次重复缴付。

2. 掉单导致的多次重复缴付“我明明付款了,为什么我的订货还没缴付呢?”这就是所谓的“掉单”:外部掉单:协力缴付的缴付状况没有并行或者没有及时并行到商城,这叫外部掉单内部掉单:缴付服务项目的状况没有并行到订货,或者应用程序没有及时获取到订货状况,这叫内部掉单。

使用者一看,自己付了款,结论商城里订货还未付款,但是又特别想要,可能就会再下一单,这样就多次重复缴付了3. 多渠道导致的多次重复缴付他们国内缴付的体验还是非常快捷的,他们可能没有感觉,如果了解过海外缴付的可能了解,很多缴付的渠道,消耗的时间非常长。

比如使用者保罗选择了一种缴付方式Boleto,结论缴付的网点离保罗他们村太远了,保罗又选择了Paypal缴付,保罗去赶集的时候,又顺手去网点把Boleto的这一大笔缴付了,结论就多次重复缴付了这种情况他们可能很少遇到,他们可以用美团下一个单,先关上微信缴付,不要缴付啊,接着回到美团,关上缴付宝,用缴付宝缴付顺利完成后,用微信接着缴付,他们猜猜,两笔缴付是不是都能成功?答案是可以。

美团多渠道缴付04 怎样避免订货多次重复缴付1. 加锁不管是提出申请缴付、还是缴付反弹,都应该以订货维度加锁,避免并发下的多次重复操作。加锁,毫无疑问,也是分布式锁,通常来说他们会选择Redis分布式锁。

加锁2. 缓存结论提出申请缴付成功,缴付反弹成功,都应该缓存结论。再提出申请缴付,收到成功反弹的时候,都应该先去检查缴付的状况。

3. 缴付中小溪取消假如说,使用者多次重复缴付了,再次提出申请缴付的时候,如果已经提出申请缴付成功了,那么该笔缴付肯定是要拒绝的但是,要是已经存在的该笔小溪还在缴付中呢?——他们不确定它是成功还是失利,肯定是不能拒绝缴付的,即使可能使用者缴付失利了,但是状况还没并行,这样肯定是不行的。

所以,他们可以取消掉正在缴付中的小溪,再展开缴付。

缴付中小溪取消4. 已缴付小溪退款现在又有新的难题了,假如发动缴付的时候,有小溪正在缴付中,如果第协力缴付网络平台不支持取消缴付,或者使用者新的缴付是透过不同的渠道,他们希望尽可能提高使用者的缴付成功率,怎么办呢?

他们可以在发动缴付的时候,订货还在缴付中的情况下,允许使用者发动多笔缴付,在缴付反弹的时候,检查使用者是否已经有成功小溪,对后来的小溪展开退款处置。

缴付反弹当然,退款是个很危险的操作,毕竟钱退了,可就很难追回来,一定要做好风险的控制5. 积极主动HTTP&重试避免掉单1)积极主动HTTP避免外部掉单如果即使故障没有收到反弹,或者没有及时收到反弹,就可能会发生所谓的外部掉单。

避免外部掉单的关键,就在于,不能傻傻地只等协力的反弹通知,而要积极主动去查询,使用者发动缴付的3s之后,就可以发动HTTP了,直到拿到缴付小溪的最终状况,积极主动HTTP,通常可以这么实现:

HTTP①定时任务HTTP使用定时任务,扫描表中缴付中的小溪,积极主动查询缴付的状况,定时任务的实现方式有很多,线程池、调度框架、分布式调度框架等等定时任务HTTP的缺点有两个:对数据库有一些压力,观察监控,会发现定时任务扫表的时候,有时候会造成数据库的一些“峰刺”。

不便调整频率,实际上,使用者发动一大笔缴付之后,通常都会在10s-1min中顺利完成缴付,越往后,使用者顺利完成缴付,所以HTTP梯度展开,会更合理一些,HTTP的间隔可以设置成类似这种:3s、10s、30s、3min……②延时消息HTTP

另外一种方式就是使用延时消息,使用者发动缴付之后,发送一个延时消息,消费到延时消息之后,查询小溪缴付状况,没有拿到最终状况,就再发一个延时消息延时消息的好处是对数据库的压力没有那么大,HTTP的梯度也可以展开控制,缺点是实现起来复杂一些,而且要维护消息队列。

2)并行+异步避免内部掉单缴付服务项目在收到异步通知反弹、或者积极主动HTTP到小溪的最终状况后,要通知订货服务项目缴付小溪的变动,订货服务项目并行更新订货的状况,这个操作过程要尽可能保证通知成功,可以采用并行+异步的方式并行初始化:缴付服务项目初始化订货服务项目的通知接口,有可能会即使网络等等的原因失利,也可以重试,但是根据经验,如果网络出现一些波动,重试很可能也会失利。

异步通知:缴付服务项目还应该发送一个缴付成功的消息,订货服务项目可以利用消息队列的重试机制,来尽可能保证缴付状况的并行这里还有一个难题,应用程序怎样并行这个状况?即使可能服务项目端更新了订货状况,但是应用程序的介底下还是未缴付,得使用者积极主动刷新呵呵,才能拿到最新的状况,这样明显是不太合适的。

服务项目端、应用程序的状况并行,无非就拉和推:拉:很简单,就是应用程序在使用者跳回订货状况页的时候,HTTP一会,如果使用者顺利完成缴付,通常来说很短时间就能获取到状况的更改,当然这种方式相关联用程序的性能会有一些影响,而且很出现状况并行“漏网之鱼”的情况。

推:推的实现有些麻烦,Web通常来说是用Websocket,对APP端发送,通常采用第协力的发送网络平台6. 应用程序缴付尽可能不外跳不管从商品的角度,还是技术的角度,应用程序发动缴付这一步棋,其实应该尽可能地不要外跳,PC端使用缴付服务项目生成的缴付码,而不是重定向;移动端页面、APP在应用内展现缴付页,当然这个是由第协力缴付网络平台决定的。

在UC内内嵌缴付宝不知道他们留意到了没有,现在的缴付宝,已经做到了不用挂起手提包,在应用内就可以顺利完成缴付,这个对于商家的意义还是比较大的,对使用者体验、缴付成功率,都有正面的作用,相信以国内的内卷程度,其它缴付供应商,一定会“跟进”的。

好了,关于怎样避免多次重复缴付,就讲到这里。对于缴付,老三也只是初窥门径,希望各位大佬不吝指教。参考:[1] 服务项目端怎样避免多次重复缴付

Tags:

站点信息

  • 文章统计4935篇文章
  • 微信公众号:扫描二维码,关注我们