【问题标题】:Handling a 'transaction' programmatically以编程方式处理“交易”
【发布时间】:2011-01-06 17:24:32
【问题描述】:

我有一个创建两个数据库表条目的进程,并向 authorize.net api 发送两个请求。

现在,如果在过程中的任何时候程序因任何原因出错,我想“回滚”。在我们的系统中创建的任何条目都应该被删除,并且应该通知用户有错误并且应该让用户选择重试。

流程的淡化版本如下所示:

Create Account Entry -> Create User Entry -> Send one time payment request to Authorize.net -> Save result of one time payment request from Authorize.net -> Send recurring payment request to Authorize.net -> Save result of recurring payment request from Authorize.net

处理这种情况的最佳方法是什么?

【问题讨论】:

    标签: php mysql authorize.net


    【解决方案1】:

    您只需要使用InnoDB 表,然后就可以使用standard transaction processing statements。 (即:您将使用begin,尝试执行必要的处理,然后相应地发出commitrollback。)

    【讨论】:

      【解决方案2】:

      我会使用常规的 InnoDB 事务来处理数据库部分。回滚 Authorize.NET 调用会比较棘手,只需要一些非常小心的异常处理。

      【讨论】:

        【解决方案3】:

        您可以将查询包装在事务中,请注意要回滚的表需要将其引擎设置为 innodb。下面是代码外观的示例:

        //Wrap your queries in a transaction
        
            mysql_query("START TRANSACTION"); 
        
                try{ 
                    //your stuff - if your stuff is successful commit, in the event of an error rollback
        
                    if($success){
                        mysql_query("COMMIT"); 
                    } 
                    else{ 
                        mysql_query("ROLLBACK"); 
                    } 
                }catch(Exception $e){ 
                    //if something goes seriously wrong
                    mysql_query("ROLLBACK"); 
                }
        

        【讨论】:

          猜你喜欢
          • 2016-11-19
          • 1970-01-01
          • 2021-08-10
          • 2014-03-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-11-22
          • 1970-01-01
          相关资源
          最近更新 更多