2014-03-06 18 views
0

我無法驗證WorldPay針對電子商務網站的回叫。如何正確驗證worldpay的回撥回覆

根據the documentation對於成功的交易,WorldPay應該發佈名爲「transStatus」的值爲「Y」的參數。

這似乎很簡單,所以我寫了一個簡單的驗證功能查找此值:

private function validateRequest() { 
    if ($_POST['transStatus'] == "Y"){ 
      return true; 
     } else { 
      throw new Exception("Transaction failed"); 
      die(); 
     } 
    } 
} 

,並運行回調頁面時,這個函數被調用了嘗試,像這樣:

try {$this->validateRequest()} 
    catch (Exception $e) { 
     mail("[email protected]", $e->getMessage(), $e->getTraceAsString()); 
     throw new Exception("Could not validate payment.") 
     die(); 
    } 

不幸的是,當我測試這個WorldPay成功處理付款,但訂單沒有完成我的其他代碼。我檢查了我的日誌文件,但無法查看任何異常或錯誤。

什麼是從這裏採取的最佳方法?我應該如何着手解決這個問題?

回答

0

以下是我解決了這個萬一有人在將來遇到過這個類似的問題和絆:

當我檢查的$ _ POST我意識到,這是接收「Y \ n」,而不是簡單的內容「Y」,它期望。下面是我取代了代碼

if (strpos($_POST['transStatus'], 'Y') !== FALSE) { /* Order is verified */ } else { /* Order is not verified */ } 

就可以了,現在的代碼檢查是否「Y」在響應任何地方被發現。這是有效的,因爲worldpay只會發送三種可能的響應:'Y','N','C'。