通过第三方(如财付通)充值如何做分布式事物?

问题描述

RT,

解决方案

解决方案二:
财付通这个是异步的通知,不存在事务的问题吧
解决方案三:
就比如我们这边财付通那边充值成功了,我们这边保存数据时候失败了,怎么办。。。。
解决方案四:
引用2楼yu929927571的回复:

就比如我们这边财付通那边充值成功了,我们这边保存数据时候失败了,怎么办。。。。

你们保存数据失败是你们自己的事情,难道还要财付通退钱么,照这么搞法你们老板肯定要把你们都炒鱿鱼,哪有把收进来的钱退出去的道理?失败了就重试,财付通要求收到你们成功处理的通知,不然会一直给你们发通知发好像是48个小时
解决方案五:
失败了他应该会有信息反馈的。
解决方案六:
财付通应该有重发机制;你们系统也可以做集群;
解决方案七:
引用2楼yu929927571的回复:

就比如我们这边财付通那边充值成功了,我们这边保存数据时候失败了,怎么办。。。。

这没扯到分布式事物吧一般那种接口都会有自动重发机制你仔细看看对方给你的文档需要你们回一个明确的答复他们才停止发送
解决方案八:
引用3楼ygycomon的回复:

Quote: 引用2楼yu929927571的回复:
就比如我们这边财付通那边充值成功了,我们这边保存数据时候失败了,怎么办。。。。

你们保存数据失败是你们自己的事情,难道还要财付通退钱么,照这么搞法你们老板肯定要把你们都炒鱿鱼,哪有把收进来的钱退出去的道理?失败了就重试,财付通要求收到你们成功处理的通知,不然会一直给你们发通知发好像是48个小时

对,就是要他们那边回滚,因为我们这边没有保存,虽然可以人工补单,。(你确定你是在回答我这个问题??)
解决方案九:
引用6楼djy18178的回复:

Quote: 引用2楼yu929927571的回复:
就比如我们这边财付通那边充值成功了,我们这边保存数据时候失败了,怎么办。。。。

这没扯到分布式事物吧一般那种接口都会有自动重发机制你仔细看看对方给你的文档需要你们回一个明确的答复他们才停止发送

我知道这个机制,这是我遇到的一个面试题,
解决方案十:
按照你们说想的就是这个根本不会涉及分布式事物?我想也是,毕竟代码在人家那边,我们只是调用人家的接口。或许我们这边最多做一个自动对账平台,人工补单,。但是我想问的程序里面难道就没有更好的方式来处理这种问题??
解决方案十一:
不明白你说的问题是什么,这个流程很完整,你认为哪个环节可能会出现数据不一致的情况所以要扯上事务?
解决方案十二:
引用10楼ygycomon的回复:

不明白你说的问题是什么,这个流程很完整,你认为哪个环节可能会出现数据不一致的情况所以要扯上事务?

很简单的一个问题啊,就是他们那边充值成功,我们这边保存失败,这就是我们这边掉单了。我们在程序中应该如何更好的防止这样的掉单情况。。
解决方案十三:
如果简单的数据库操作都出问题这种情况和任何其他项目的异常一样记日志发邮件即可属于非预期异常
解决方案十四:
平台的公共接口肯定不会因为极少数的需求而作变动如果只是面试题,全是假设的话可以那边接口和数据库保存放在同一个实物中,接口没收到你们成功的返回信息就回滚可实际中肯定是调用接口的去改变,而不是平台接口改变,因为那边成功,你们这边失败,明显就是你们这边出了问题
解决方案十五:
引用11楼yu929927571的回复:

Quote: 引用10楼ygycomon的回复:
不明白你说的问题是什么,这个流程很完整,你认为哪个环节可能会出现数据不一致的情况所以要扯上事务?

很简单的一个问题啊,就是他们那边充值成功,我们这边保存失败,这就是我们这边掉单了。我们在程序中应该如何更好的防止这样的掉单情况。。

事务是指一个连续操作,要么同时成功要么同时失败,没有中间状态,你这里分明只有你保存交易结果这一个动作,和事务有什么关系?难道在你自己的系统里你都不能保证一个保存动作一定成功?异常了自己重试不行么,退一万步说,就算你的数据库挂了,他们还会重复通知,通知48个小时,这样都不能保证你保存成功?

时间: 2024-08-19 08:39:14

通过第三方(如财付通)充值如何做分布式事物?的相关文章

百度-andrid第三方支付,不会做,求大神教教小妹

问题描述 andrid第三方支付,不会做,求大神教教小妹 请问谁有第三方支付方面的变成经验啊,没有做过,百度过很多资料也没有看明白,求一份清晰的调用第三方支付的开发步骤.小妹在这里先谢谢各位了 解决方案 http://blog.csdn.net/xiaoluoli88/article/details/40542989 解决方案二: 可以试试看 Ping++,通过一个 SDK 就以同时支持移动端以及 PC 端网页的多种主流支付渠道. Ping++ SDK 包括 Client SDK 和 Serve

android-钱包付款时用钱包剩余的钱比一下付款的钱如果钱不够就提示充值怎么做;

问题描述 钱包付款时用钱包剩余的钱比一下付款的钱如果钱不够就提示充值怎么做: android中 钱包付款时用钱包剩余的钱比一下付款的钱如果钱不够就提示充值怎么做: 本人是新手可能太小白希望大家耐心解答 解决方案 一个edittext 输入要付的钱 跟 钱包的 钱相比 不够就 提示充值 解决方案二: if(剩余的钱<付款的钱){ request.setAttribute("result","钱不够,请充值") } 解决方案三: 我传送过来的值都是String的S

采用atomikos做分布式单向多对一关联报错

问题描述 采用atomikos做分布式在A库的实体类pojo1与B库的实体类pojo2单向多对一关联Causedby:org.hibernate.AnnotationException:@OneToOneor@ManyToOneoncom.Pojo.pojo2referencesanunknownentity:com.Pojo2 解决方案

Estimote:一个向第三方开放的结合物联网做基于位置营销的平台

Estimote是一个向第三方开放的结合物联网做基于位置营销的平台.起初,他们的产品原型是一只停在店门口的鹦鹉.Estimote的鹦鹉能计算进店和离开店铺的人流,记录人群在店内的流向甚至能分析顾客的性别构成和购买模式.总的来说,如果你是个店主,一定会觉得这是个神奇的小玩意. 而后来在Y Combinator的帮助下,他们在鹦鹉原型上推出了the Beacon.Beacon的外观设计就像一颗破碎的宝石,你把它粘在墙上--通过对应的app可以预设你想要推送的信息,尔后它就能向周围订阅了店铺的用户推送

spring分布式事物-atomikos mssql报错Error in recovery以及找不到存储过程

问题描述 atomikos mssql报错Error in recovery以及找不到存储过程 如题,我使用atomikos做spring分布式事物,同时支持Oracle.MySQL和MSSQL三种数据源.目前Oracle和MySQL都能调通,在测试MSSQL的过程中,一直报错. 错误如下: 2015-06-03 14:08:45,911 WARN com.atomikos.datasource.xa.XATransactionalResource.logWarning:24 - Error i

手机财付通如何充值?财付通充值教程

1) 我们根据自己的手机型号去安装财付通了,然后打开并登录财付通之后我们点击[账户充值],这里有多种充值方式我们在此点击[快捷支付充值];(如下图)     2)选择进行快捷支付的银行卡(需是绑定的银行卡,绑定方法参考本文上方相关教程),输入[充值金额]和[支付密码],点击[下一步],再输入手机收到的验证码,点击[确认付款]就可以了.(如下图)   好了这样就把钱从银行充值到财付通了,当然有一点如果你的银行卡不支持网银支付的话那么肯定是无法充值的哦.

《广州日报》联合第三方检测机构对空气净化器做了测试

发现松下.飞利浦等品牌的空气净化器效果被厂家夸大.号称的PM2.5祛除率98%实测仅40%.还有专家指出,空气净化器在运行时产生臭氧可致癌.3月25日,记者调查济南市场发现,松下.飞利浦等空气净化器销售宣传仍号称PM2.5祛除率90%以上,销售人员对具体产生臭氧量"不清楚".针对有关夸大效果.释放臭氧致癌的质疑,日前,松下空气净化器回应,其产品经过国家正式认定的机构检测,性能是安全可靠的.不过,有业内人士指出,松下未能出具第三方证明数据,这样的回应仍让人难以信服.3月25日,记者调查济

scrapy-redis 和 scrapy-splash结合 做分布式渲染爬取

本人在scrapy-redis项目中的setting.py中配置,可时中有问题.但是可以使用以下方法: 首先,你要确保安装了splash,并且已经启动 (1)先安装scrapy-splash库: [python] view plain copy pip install scrapy-splash   (2)然后将我们的Docker起起来 [python] view plain copy   docker run -p 8050:8050 scrapinghub/splash   在原有scrap

分布式事物TransactionScope的正确用法

正确的写法应该如下 如果A类是使用数据库资源的. class  A { SqlConnection cn=null; public A() { ..... cn.open(); } } //开始事务 using(transactionscope scope=new transactionscope()) { //要确保对支持事务的资源的登记放在此范围内,如数据库资源的打开 A a=new A(); a.method(); ..... scope.comlete() } 我们只要确保数据库的打开操