PHP退出使我的代码工作

时间:2013-04-09 11:45:21

标签: php codeigniter exit

我不敢相信我会问这个问题,但是这里...... [/ p>

(在Codeigniter中使用PHP)

我正在将巴克莱EPDQ纳入电子商务网站,以便进行信用卡付款。成功付款后,EPDQ会重定向回网站,在URL中传递查询字符串参数。我正在寻找从EPDQ发回的orderID,如果它在那里我在PHP会话中存储了一些东西并重定向到付款确认页面。如果付款不成功,订单ID将不在那里,因此我重定向到显示CI视图文件的付款失败方法。

此检查和会话保存例程的条件如下:

$success = false;

if($_GET['orderID'])
{
    $_SESSION['payment']['order_id']  = $_GET['orderID'];
    $_SESSION['payment']['method']    = 'card';
    $_SESSION['payment']['ref']       = $_GET['PAYID'];
    $_SESSION['payment']['status']    = 'Completed';

    $success = true;
}

(请注意会话已初始化,并且在此代码执行之前创建了付款数组)

到目前为止非常简单,对。然后,路线的代码如下所示:

if(!$success)
{
    redirect('payment/card/fail');
}
else
{
    redirect('payment/confirmation');
}

我遇到的问题是这种重定向不能像我期望的那样工作。 EPDQ报告成功付款并根据需要重定向回我们的网站。但是,当我的脚本评估它发送的GET参数并进行重定向时,它总是使用失败的重定向............除非,这是真正让我困扰的一点,我做的这样:

if(!$success)
{
    exit('Failed');
    redirect('payment/card/fail');
}
else
{
    redirect('payment/confirmation');
}

(注意添加的'退出')。

一旦我包含此退出,代码将在所有测试用例中按需执行,我们开始看到付款成功页面。删除出口会立即恢复为100%测试失败。

有没有人知道为什么会这样,因为我以前从未见过这个?

3 个答案:

答案 0 :(得分:1)

唯一可能的解释是$ success未更新且它的预分配值为false。通过var_dump检查$ success的值。

答案 1 :(得分:1)

之所以发生这种情况,是因为巴克莱EPDQ的设置是在主要支付响应之前发出响应(这是一个预先响应的回复,允许根据传入的成功或失败来定制网站)。这意味着我的功能被击中两次,一次没有获得GET参数的第一次击中,一次使用它们时,返回完全支付回复的参数。放入出口意味着第一次命中的失败重定向没有被执行,因此允许脚本显示成功条件。从EPDQ中删除/取消设置此预响应现在意味着所有条件都按要求执行。

最后并不是真正的PHP问题,但值得注意的是,如果有人正在集成EPDQ并错误地在EPDQ的管理界面中设置此响应。

答案 2 :(得分:0)

最有可能的是,如果到达重定向('付款/确认')的唯一方法是通过添加对exit构造的调用,我会假设在所有情况下都会重定向到失败路由(即使该脚本应该成功结束。)