支付系统保证可靠性的秘诀 ----- 订单的补偿和补单

钱被扣走了,但是订单却未成功!支付异常最全解决方案 前言 好了,回归到今天的主题,今天分享一下支付系统中异常一些处理方式。 其实这些处理方式并不只是局限于支付系统,也可以适用于其他系统,大家可以借鉴,应用到自己系统中,提高自己系统的健壮性。 异常是系统运行不可避免会发生的问题,如果一切都正常,我们的系统设计将会相当简。 但是可惜没有人能做到这一点,所以为了处理异常可能导致的问题,我们不得不需要加上很多额外的设计,用来应对这些异常。 可以说系统设计中,异常处理需要我们着重思考,将会占据我们大部分的精力。 下面我们先来看下支付系统中最常见的异常:掉 欢迎关 阅读详情


WHAT? 前言

  • 刚入职场的时候觉得支付宝等第三方支付系统好强大,要保证这么多的交易不能错,也不能重复还要保证正确的扣钱,直到后面接触订单系统以及第三方支付公司的核心交易系统后才真正窥探到了支付系统的核心设计理念和架构,虽然不同公司细节上会有一些区别,但是总体的设计思路基本都是一致的,这篇文章主要是讲“补偿、补单在支付系统的上的应用以及如何提升可用性”。

WHY? 为什么要补偿、补单?

我们这里先简要的解释下何为“补偿”、“补单”:
在这里插入图片描述

正常情况下我们的订单系统发起支付调用支付接口,支付接口同步返回订单支付成功或者失败或者处理中,但是由于系统暴露在网络下,网络的不稳定势必会出现以下几种可能

  • 第一种情况:订单系统调用支付接口网络超时或者断联在这里插入图片描述
    这种情况下就会出现订单系统订单已经生成,而且是处理中但是支付系统压根没有订单,这个时候该,我们可以重新发起支付请求,让支付系统也有对应的订单,这个就是所谓的“补单”(后面会介绍如何做)

  • 第二种情况: 支付系统同步返回订单系统时网络超时或者断联

手把手教你做基于stm32的红外、语音、按键智能灯光控制(上) 这次项目使用的板子是stm32f103c8t6最小系统板,这个板子在tb上都能够买到,随便一个最小系统板都可以,== 注意在买最小系统板的时候需要买一个stlink下载器来下载程序。显示模块是使用的0.96英寸的OLED屏幕,注意是使用的IIC通信协议的OLED屏幕,不是使用SPI总线协议的。这次写的代码还顺便集成了检测温湿度的功能,所以要使用DHT11温湿度传感器,来采集温度。本文所设计的基于片机的灯光控制系统主要由模式选择功能、手动模式自动模式组成。LED灯自然就是要控制的部件了。 阅读详情

相关推荐

PCL 改进的RANSAC算法实现点云粗配准【2024最新版】

一种改进的RANSAC点云粗配准算法,具体改进见论文:“Pose Estimation using Local Structure-Specific Shape and Appearance Context”

点云侠的博客 37万+

RocketMQ 第二章 项目实战 4 下业务 4.2 失败补偿机制

RocketMQ 第二章 项目实战 4 下业务 4.2 失败补偿机制

代码改变世界 1110

系统 业务源码

QQ业务源码 业务源码 适用于卡盟平台使用 带后台

微信PC扫码支付保证订单状态最终一致性

目录 1、背景 2、实现方案​ 3、方案详解 1、背景 系统需要对接微信PC扫码支付订单的状态需要由系统来保证同步,不需要人工进行介入,所以,需要保证商户系统订单与微信订单最终一致性。 2、实现方案 3、方案详解 上图中,红色为实现订单状态最终一致性的三个方案,下面将进行详细描述: 异步通知:当用户支付成功时,由微信服务器向商户系统后台推送支付成功通知,商户系统后台进行进行回复。后台通知交互时,如果微信收到商户的应答不符合规范或超时, ...

s2008100262 2769

如果你需要使用重试机制,请使用Spring官方的Spring Retry

Spring Retry 是 Spring Framework 中的一个模块,提供了一种简的方式来在应用程序中实现重试机制。在应用程序中,如果遇到了一些不可避免的错误,比如网络连接失败、数据库连接失败等,我们通常需要对这些错误进行重试,以尝试解决这些问题。,可以让我们很容易地在应用程序中实现重试机制。Spring Retry 中最常用的类是 RetryTemplate,它提供了一个 execute 方法,可以让我们在方法调用失败时进行重试。

编码人生 738

重试机制思考与实现

在业务执行失败之后,重试一种常见的容错策略。保证数据最终的一致性。

平凡之路无尽路的博客 1443

超时重试

并且,我们通常还会设置重试的间隔,比如说我们要重试3次的话,第1次请求失败后,等待1秒再进行重试,第2次请求失败后,等待2秒再进行重试,第3次请求失败后,等待3秒再进行重试。重试机制一般配合超时机制一起使用,指的是多次发送相同的请求来避免瞬态故障偶然性故障。由于瞬态故障偶然性故障是很少发生的,因此,重试对于服务器的资源消耗几乎是可以被忽略的。超时机制说的是当一个请求超过指定的时间(比如1s)还没有被处理的话,这个请求就会直接被取消并抛出指定的异常或者错误(比如504GatewayTimeout)。

Borny鼎鼎的博客 1386

补偿交易模式

【博文目录>>>】 补偿交易模式 如果一个或多个步骤失败,则撤消由一系列执行的工作的步骤组成,这些步骤一起定义最终一致的操作。遵循最终一致性模型的操作通常可在实现复杂业务流程工作流的云托管应用程序中找到。 背景与问题 运行在云中的应用程序经常修改数据。这些数据可以分布在各种地理位置的各种数据源上。为了在这样的分布式环境中避免争用提高性能,应用程序不应该试图提供强大的事务一致...

https://github.com/Wang-Jun-Chao 1379

订单成功后如何等待支付成功

订单成功后如何等待支付成功

旷野历程 1381

支付宝:服务端如何防止订单重复支付

如图是一个简化的下流程,首先是提交订单,然后是支付支付的话,一般是走支付网关(支付中心),然后支付中心与第三方支付渠道(微信、支付宝、银联)交互。支付成功以后,异步通知支付中心,支付中心更新自身支付订单状态,再通知业务应用,各业务再更新各自订单状态。这个过程中经常可能遇到的问题是掉,无论是超时未收到回调通知也好,还是程序自身报错也好。总之由于各种各样的原因,没有如期收到通知并正确的处理后续逻辑等等,都会造成用户支付成功了,但是服务端这边订单状态没更新。

陌陌龙的博客 1073

订单支付异常情况处理

正常情况下我们选择商品然后购买,完成支付后就发货了,但是因为大多采用的是http协议,如果出现了网络异常等情况就会掉之类的,比如顾客付完钱了但是订单状态并没有改变,还有就是支付成功后回调失败,导致没有发货。对于真正的服务,这些异常情况我们也得考虑进去。那么,这些就都是可能出现的异常流程。虽然概率很低,但随着使用规模的增加,很低概率的问题,也会产生较大规模的客诉问题。1. 掉补偿,检测未接收到或未正确处理的支付回调通知(即用户已经扫码支付成功但是订单状态没有改变)因此,我们通过使用定时任务完成补偿

yusheng_xyb的博客 2837

说说分布式事务(四)

最终一致性(二) 基于MQ的分布式事务补偿机制 序列图 异常场景处理 预创建订单失败:如果实际预创建订单成功,订单定时补偿机制,定时删除这部分订单,不影响数据一致性,下失败 预扣减库存失败:如果预扣减库存真实失败,则下失败(订单由定时补偿机制定时删除,其它应用参照场景4的处理方式,下失败;如果实际预扣减库存成功,参照场景4的处理...

weixin_33895695的博客 339

支付系统设计

支付系统设计

weixin_41858020的博客 725

如何保证支付服务交易服务之间订单状态的一致性?

2、其次,为了保证消息的可靠性,采用了生产者确认、消费者确认、消费者重试的机制等策略,确保了消息投递处理的可靠性。同时开启消息的持久化,避免因为MQ宕机导致消息丢失。1、首先,支付服务在完成订单支付以后,会通过MQ给订单服务发送一个消息,让订单服务完成订单状态的同步。3、最后,业务做了幂等性判断,避免因为MQ的重复消费导致订单状态异常。

qq_42251944的博客 1498

支付宝App支付快速接入

转载自:https://docs.open.alipay.com/204/105297/ 本文档展示了如何从零开始,使用蚂蚁金服开放平台服务端SDK快速接入App支付产品,完成与支付宝对接的部分。 注意: 文档中的代码示例Demo是用来阐述API基本使用方法的,仅针对大众场景。供ISV参考,特殊情况还请ISV自行扩展,确保符合自身业务需求。 支付产品全面升级,若您使用的是老

嘻哈包袱铺 专栏 5403

JAVA系统搭建,电商APP平台系统,技术部署

轻量级的Java开发框架:Spring框架。Java持久化框架:MyBatis框架。消息队列软件:ActiveMQ。防注入攻击、访问控制技术。

大东-byi8761的博客 200

手机支付流程之华为

首先梳理一下我们游戏目前的支付流程: 1.玩家点击购买 2.客户端发来checkGood协议,游戏服校验当前商品是否限购,是否合理 3.返回客户端校验结果 4.如果成功,可以购买,客户端发起创建订单请求到支付sdk服务器 5.支付sdk创建订单,并返回给客户端,客户端弹出支付的页面 6.客户端支付成功,并通知sdk服务器 7.支付sdk服务器校验成功,通知游戏服务器发货 8.游戏服收到发货通知,发货给客户端 这种支付流程对普通商品是没什么问题的,只要回调发货的延时低,基本能正常走下来,但是

qq_15092991的博客 831

聊聊分布式中的补偿机制

文章目录一、补偿机制的意义为什么要考虑补偿机制呢?补偿、事务补偿或者重试之间有什么关系?二、补偿应该怎么做?1. 回滚2. 重试为什么说重试有坑呢?重试的最佳实践 分布式对外高可用,对内如何让憋出的内伤消化消化。 一、补偿机制的意义 举例一个常见场景: 客户端->购物车微服务->订单微服务->支付微服务 为什么要考虑补偿机制呢? 因为一次跨机器的请求通信可能会通过DNS、网卡、交换机、路由机、负载均衡等设备,这些设备都不是一直稳定的,在数据传输的过程中只要一个问题出错,就会有问题的产生。

ibigboy 3249

电商项目之百万级别的临时订单数据补偿解决方案

买家再次访问保存的地址时,弹出无法找到该笔订单的商品信息。原因是订单是在A站产生的,商品也是属于A站的。当域名绑到B站后,再次访问域名,就会解析到B站,而B站是没有订单上的商品ID的,因此无法找到该笔订单的商品信息。造成上面的原因是因为结算页的临时订单信息表是没有存储站点主键ID,导致加载结算页仍会继续去寻找订单上的商品。根据结算页对应的token去寻找结算页的临时订单信息表,找到。,暂且不用管他,因为这个已经是笔者实现了的解决方案,已完成数据补偿。,更加轻量,也不会影响生产环境的主业务。

Android_la的博客 856

实战:基于RabbitMQ的TTL以及死信队列,实现延迟付款,手动补偿案例

基于RabbitMQ的TTL以及死信队列,使用SpringBoot实现延迟付款,手动补偿操作。 1、用户下后展示等待付款页面 2、在页面上点击付款的按钮,如果不超时,则跳转到付款成功页面 3、如果超时,则跳转到用户历史账中查看因付款超时而取消的订单。 ...

chuanchengdabing的博客 1104

复旦大学大数据学院本科生课程学习手册.pdf

复旦大学大数据学院本科生课程学习手册.pdf

上一篇: 多级缓存项目实践 ------- 网联灵活渠道切换(第三方支付公司核心需求)
superboboge
博客等级 码龄16年 11粉丝 10原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值