在PHP中使用异常和事务

时间:2014-01-07 07:16:29

标签: php codeigniter exception transactions stripe-payments

我有一个处理客户订单的页面,而且我遇到了一些交易(从一般意义上讲)。

我使用两种外部服务(即用于CC处理的Stripe和用于发货的Postmaster)。我在try块中调用这两个服务,并在catch发送任何例外。如果通过我在我的末尾创建一个DB条目。根据我当前的逻辑,我担心的是如果Stripe和Postmaster调用成功,并且我的数据库插入失败,我无法回滚Stripe和Postmaster调用。这样的事情有最好的做法吗?

我正在使用Codeigniter MVC,因此我的数据库插入是通过调用返回true或false的模型方法来完成的。

一般理念:

try{
    //create charge and shipment
    $charge = Stripe_Charge::create();

//create shipment
$shipment = $this->postmaster->shipment_create();
}

catch{
    //stripe and postmaster exceptions
}

$this->order_model->addOrder();

1 个答案:

答案 0 :(得分:3)

尽快写入数据库。记录数据库中“事务”的状态(例如未处理发送到条带发送给postmaster )。如果出现故障,请从DB,Stripe和Postmaster获取的信息中恢复一致状态。您需要查询Stripe和Postmaster,因为当状态应该更新时可能发生了故障。

您无法影响Stripe和Postmaster的可用性,但您始终可以使数据库更可靠。