2011-01-06 10 views
1

Ich habe einen Prozess, der zwei Datenbanktabelleneinträge erstellt und zwei Anforderungen an die authorize.net-API sendet.Eine 'Transaktion' programmatisch behandeln

Jetzt, wenn an irgendeinem Punkt im Prozess das Programm aus irgendeinem Grund ausfällt, möchte ich "Rollback". Jeder in unserem System erstellte Eintrag sollte entfernt werden, und der Benutzer sollte darüber informiert werden, dass ein Fehler aufgetreten ist und die Option zum erneuten Versuch erhalten.

Eine verwässerte Version der Strömung sieht wie folgt aus:

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

Was ist der beste Weg, um eine Situation wie diese zu behandeln?

Vielen Dank im Voraus!

Antwort

4

Sie müssen einfach eine InnoDB Tabelle verwenden und Sie können dann die standard transaction processing statements verwenden. (D.h .: würden Sie verwenden einen begin, Versuch, die notwendige Verarbeitung durchzuführen und dann entweder ausstellen eine commit oder ein rollback entsprechend.)

+0

Dies sollte funktionieren! – hellopat

0

ich regelmäßig InnoDB Transaktionen verwenden würde die Datenbank Teil zu behandeln. Das Zurücksetzen der Authorize.NET-Aufrufe wäre jedoch komplizierter und würde nur eine sehr sorgfältige Ausnahmebehandlung erfordern.

0

Sie können Ihre Abfragen in Transaktionen umbrechen. Beachten Sie bitte, dass die Tabellen, die Sie zurücksetzen möchten, ihre Engine auf innodb setzen müssen. Hier ein Beispiel, wie der Code aussehen könnte:

//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"); 
     } 
Verwandte Themen