1

我有一个创建两个数据库表条目的进程,并向 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

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

4

3 回答 3

4

您只需要使用InnoDB表,然后就可以使用标准的事务处理语句。(即:您将使用 a begin,尝试执行必要的处理,然后相应地发出 acommit或 a rollback。)

于 2011-01-06T17:29:05.813 回答
0

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

于 2011-01-06T17:31:09.167 回答
0

您可以将查询包装在事务中,请注意要回滚的表需要将其引擎设置为 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"); 
        }
于 2011-01-06T18:04:31.610 回答