2013-04-09 66 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的管理界面中。