我不敢相信我会问这个问题,但是这里...... [/ 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%测试失败。
有没有人知道为什么会这样,因为我以前从未见过这个?
答案 0 :(得分:1)
唯一可能的解释是$ success未更新且它的预分配值为false。通过var_dump检查$ success的值。
答案 1 :(得分:1)
之所以发生这种情况,是因为巴克莱EPDQ的设置是在主要支付响应之前发出响应(这是一个预先响应的回复,允许根据传入的成功或失败来定制网站)。这意味着我的功能被击中两次,一次没有获得GET参数的第一次击中,一次使用它们时,返回完全支付回复的参数。放入出口意味着第一次命中的失败重定向没有被执行,因此允许脚本显示成功条件。从EPDQ中删除/取消设置此预响应现在意味着所有条件都按要求执行。
最后并不是真正的PHP问题,但值得注意的是,如果有人正在集成EPDQ并错误地在EPDQ的管理界面中设置此响应。
答案 2 :(得分:0)
最有可能的是,如果到达重定向('付款/确认')的唯一方法是通过添加对exit构造的调用,我会假设在所有情况下都会重定向到失败路由(即使该脚本应该成功结束。)