2013-04-09 74 views
3

不太相信我问这个问题,但在这里不用....PHP退出让我的代码工作

(使用内笨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%测试失败。

有没有人知道为什么会发生这种情况,因为我从未见过这种情况?

+1

Ah..aa..aah ..哈哈!标题+1! – 2013-04-09 11:46:59

+0

你能告诉我们如何控制器.. – Svetoslav 2013-04-09 11:51:13

+0

你可以发布'redirect()'的代码吗 – 2013-04-09 11:52:03

回答

0

最有可能的,如果只有这样才能达到重定向(“支付/确认”)是通过添加调用退出结构,我会承担重定向到失败的路线在所有情况下发生的(即使脚本应该成功结束)。

1

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

+0

这是我实际检查的第一件事情之一。 $ success var的使用实际上是我为了回应这个问题而添加的一个更新的更新。如果你看看成功的条件,我正在设置一些会话变量;无论是否包含退出,这些变量都会在成功付款时设置 – Schneidey 2013-04-09 17:36:36

1

发生这种情况的原因是由于巴克莱EPDQ内部设置了一个设置,该设置在主要付款响应之前发送响应(这是预先响应repsonse,允许网站根据即将到来的成功进行定制,或者失败)。这意味着我的功能被击中了两次,一次没有GET参数,第一次打到时,有一次在用params完成付款时返回。放入出口意味着第一次命中的失败重定向未被执行,因此脚本被允许显示成功条件。现在从EPDQ中删除/取消此预处理意味着所有条件都按要求执行。

最终不是一个真正的PHP问题,但值得注意的情况下,任何人正在致力于集成EPDQ,并错误地将此响应设置在EPDQ的管理界面中。