结合msyql事务完美实现第三方退款接口示例

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 结合msyql事务完美实现第三方退款接口示例

1.mysql的事务可以实现,要么事务块内代码全部执行,要么全部都不执行。如果都是自己写sql实现,是完全没有任何问题的。

2.如果要实现第三方支付的退款,比如微信支付订单,退款微信支付的金额,那么该怎么实现呢?代码如下

 

 

     // 启动事务

      Db::startTrans();

      try {

           //订单日志

           $order_log['order_sn'] = time();

           $order_log['action_user'] = '前台客户';

           $order_log['action_note'] = '客户取消已付款订单,返还到账户余额';

           $order_log['add_time'] = time();

           $order_log['merchantkeynum'] = "3333";

           $order_log['clientkeynum'] = "4444";

           $log_id = Db::table( 'client_order_log' )->insertGetId( $order_log );

           if(!$log_id){

               throw new \Exception( 'insert  log失败!');

           }

 

            //退款操作,如果退款失败,则回滚上面的sql

           $rt=onecard_refund ("AE2C976E79ABBF1C8BAFB19A3A78723A");

           if($rt['sta']!=1){

                    throw new \Exception( '调用扣款接口失败'.$rt['msg'] );

           }

          // 提交事务

          Db::commit();

          echo  "成功!";

      } catch ( \Exception $e ) {

          // 回滚事务

          Db::rollback();

          echo "失败!". $e->getMessage();

      }

3.像订单日志,修改订单状态(示例里面没有)等这些代码块放到退款处理的上面,并且可以根据条件手动抛出异常,为什么要把退款的代码块放到最后呢?原因是如果订单日志代码块失败,则直接到捕获异常里下面的代码就不执行了。如果订单日志执行成功,那么看退款的代码块,如果退款代码块手动抛出了异常,证明退款失败,则整体回滚,如果退款代码块没有异常,则全部提交sql。也就是说这种调用第三方接口的地方一定要放到代码块最底部,如果放到最顶部,会出现,退款接口成功,但是下面的自己业务逻辑代码抛出了异常,导致了所有sql的回滚!最终钱还是退款了~

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
JavaScript 前端开发 测试技术
Angular 与 Node.js 无缝对接简直太牛啦!前后端分离最佳实践,开启高效开发新时代!
【8月更文挑战第31天】随着互联网技术的发展,前后端分离模式日益受到开发者青睐。本文综述了 Angular 与 Node.js 的优势及无缝对接技术,探讨了前后端分离的最佳实践。Angular 以其组件化开发、双向数据绑定等特性成为优秀的前端框架;Node.js 则依靠高并发处理能力和全栈 JavaScript 开发的优势在后端大放异彩。两者结合通过 HTTP 请求实现高效通信,并可通过数据库实现数据共享。此外,文章还强调了接口设计、代码分离、测试及部署等方面的最佳实践,为开发者提供了全面的指导。
475 0
|
存储 移动开发 编解码
html5的新特性详解
HTML5是构建和呈现互联网内容的语言描述方式,HTML5在HTML4的基础上增加了许多新特性,使其更具语义化、更加标准化,同时也提高了用户体验和开发效率。以下是HTML5的部
通用电气 IS200WROBH1A 用于PDIO离散输入/输出模块
通用电气 IS200WROBH1A 用于PDIO离散输入/输出模块
106 0
通用电气 IS200WROBH1A 用于PDIO离散输入/输出模块
|
消息中间件 NoSQL Java
体系化学习Java(面试专题)
tip: 此贴为目录贴,定期更新,一起学习 Java 生态!!! toNew: 时间是最好的答案,它能解决所有问题。坚持!!! 本文章旨在总结 Java 的知识生态以及帮助需要学习者和求职者,本人有5年面试官经验,资深Javaer,有技术相关问题和面试相关问题均可以留言讨论。
224 0
体系化学习Java(面试专题)
|
存储 索引
使用双指针方法来判断链表是否是一个会问链表
使用双指针方法来判断链表是否是一个会问链表
236 0
使用双指针方法来判断链表是否是一个会问链表
|
SQL 数据库连接 数据库
PB数据库搭建
PB数据库搭建
610 0
PB数据库搭建
|
测试技术
测试思想-测试执行 测试过程中的用例维护
测试思想-测试执行 测试过程中的用例维护
189 0
|
XML 前端开发 JavaScript
Markdown 拓展-Docsify 构建接口文档
优点:使用 markdown 编写,docsify 作为支撑。快速高效,若搭载搜索功能,功能较为完善。且可部署在内网环境。 缺点:不支持直接点击按钮进行 HTTP 请求,需要手动粘贴参数到 POSTMAN 等工具。 Docsify 初始化 & 运行
253 0
Markdown 拓展-Docsify 构建接口文档
|
Java 开发者
UUID 类|学习笔记
快速学习 UUID 类
183 1
|
SQL 前端开发 JavaScript
吉特仓库管理系统- 基本问题解答
  吉特仓储管理系统简单版开源也有一段时间了,得到了众多的开发者和软件开发企业的咨询和青睐,在此期间也经历了版权纠纷等问题,反而到现在好像也不是版权纠纷的问题了,软件著作权这个东西本身就很难以区分, 经过上次这么一闹之后卖源代码的网站反而越来越多了,实在是令人防不慎防,由于工作也就懒得去搭理这些东西了,就跟朋友说的我这是自找难受。
2441 0