程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 修改zen-cart下單和付款流程以防止漏單

修改zen-cart下單和付款流程以防止漏單

編輯:關於PHP編程

zen-cart進入第三方支付網站後,如果不能正常返回,則會造成客戶已付款但後台卻無訂單數據的尴尬局面。本文就針對該問題給出一種解決方案,希望對被同樣問題困擾的同行有所幫助。

用過zen-cart的人都知道,zen-cart中下單步驟是下面這樣的(其中[]中的表示不是必須的):

1. 購物車(shopping cart)

2. [貨運方式(delivery method)]

3. 支付方式(payment method)

4. 訂單確認(confirmation)

5. [第三方網站支付]

6. 訂單處理(checkout process)——這一步比較重要,因為會在這裡將購物車中的信息寫入訂單

7. 下單成功(checkout success)

這樣的流程在正常情況下是沒有任何問題的。但是,從第5步到第6部的過程中,用戶可能以為付款成功就直接關閉掉網頁了,或者由於網絡原因造成不能正常跳轉到checkout_process頁面,這樣造成的後果是很嚴重的,因為訂單不能被正常的創建。

基於上述的分析, 我們希望稍微地改變一下流程,即在支付之前訂單已經創建好了,這樣就算在支付時不能從第三方支付網站跳轉回來,我們也不會存在用戶付款成功卻在後台沒有訂單的情況了。經過修改後的藍圖基本是下面這樣的:

1. 在checkour_confirmation頁面確認訂單後,都會直接proccess,並且進入checkour_success頁面,可以在這裡進入付款頁面。如下圖所示:

2. 如果當時客戶沒能付款,也可進入自己的後台對歷史訂單進行付款。如下圖所示:

下面我們就來看看如何一步一步來實現上述的功能。

1. 首先我們需要對現有的支付模塊進行一個改造。需要對支付方式的class增加一個字段paynow_action_url,用來表示進行支付的頁面url,另外還需要增加一個函數,paynow_button($order_id),來獲取支付表單的參數隱藏域代碼。

要增加paynow_action_url字段,請在類payment的構造函數中最後加上下面的代碼:

if ( (zen_not_null($module)) && (in_array($module.'.php', $this->modules)) && (isset($GLOBALS[$module]->paynow_action_url)) ) {
$this->paynow_action_url = $GLOBALS[$module]->paynow_action_url;
}
要增加paynow_button($order_id)函數,請在payment類的最後一個函數之後加上如下的代碼:

function paynow_button($order_id){
if (is_array($this->modules)) {
if (is_object($GLOBALS[$this->selected_module])) {
return $GLOBALS[$this->selected_module]->paynow_button($order_id);
}
}
}
2. 以paypal支付方式為例子,說明如何具體實現。為了不破壞paypal原有的代碼,我們將paypal.php文件拷貝一個副本出來,並命名為paypalsimple.php,並對裡面的代碼做適當的修改。代碼如下所示,可以看到,這裡去掉了對form_action_url的指定,並給定了paynow_action_url,因為我們希望用戶點擊“確認訂單”後直接進入checkout_process,所以如果不指定form_action_url,那麼確認訂單的表單就會直接提交到checkout_process頁面了,而paynow_action_url就是以前的form_action_url的值。paynow_button函數的實現也很簡單,這裡只是將原先的process_button()函數的內容剪切過來而已,只不過我們沒有使用全局的$order變量,而是使用$order = new order($order_id),來重新構造的一個對象,這樣做是為在歷史訂單中顯示pay now按鈕做准備的。

  • 共3頁:
  • 上一頁
  • 1
  • 2
  • 3
  • 下一頁

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved