前段時間介紹了zencart paypal漏單解決辦法一,文章主要講使用zencart插件(Paypal Sessions Viewer)實現找回paypal漏掉的訂單,這種方法解決ZenCart paypal漏單問題比較簡單,方便,漏掉的訂單後臺單擊生成一下就行了。今天強創網絡工作室來介紹一種修改ZenCart下單流程來達到解決漏單的辦法。
ZenCart默認的下單流程是:
購物車(shopping cart)->[貨運方式(shipping method)]->支付方式(payment method)->訂單確認(confirmation)->[第三方網站支付]->訂單處理(checkout process)->下單成功(checkout success).
解決方法:在支付頁面index.php?main_page=checkout_confirmation單擊按鈕時就能產生訂單。
方法是:在includes\templates\當前模板名\templates\tpl_checkout_confirmation_default.php文件的最後面
後面添加代碼:
-
// create the order record 防漏單
-
if ($_SESSION['payment'] == 'paypal') {
-
$insert_id = $order->create($order_totals, 2);
-
$zco_notifier->notify('NOTIFY_CHECKOUT_PROCESS_AFTER_ORDER_CREATE');
-
$payment_modules->after_order_create($insert_id);
-
$zco_notifier->notify('NOTIFY_CHECKOUT_PROCESS_AFTER_PAYMENT_MODULES_AFTER_ORDER_CREATE');
-
// store the product info to the order
-
$order->create_add_products($insert_id);
-
$_SESSION['order_number_created'] = $insert_id;
爲了避免對其他支付方式產生影響,所以代碼做了個判斷,只有在ZenCart選擇paypal支付的時候纔會生成訂單,加了這段後就不用擔心會漏單了---成功付款後後臺就會產生訂單,其中前面GS/AK的爲防漏單的訂單,只有在出現漏單的時候纔會查看這些訂單,裏面的信息跟正常訂單相比會少一個交易號,但是至少是可以看到客戶信息及所購買了什麼產品...
在確認頁面,如果顧客一直刷新頁面,就會一直生成訂單,可以加個限制.
-
<?php
-
// create the order record 防漏單
-
if ($_SESSION['payment'] == 'paypal' and !isset($_SESSION['order_number_created'])) {
-
$insert_id = $order->create($order_totals, 2);
-
$zco_notifier->notify('NOTIFY_CHECKOUT_PROCESS_AFTER_ORDER_CREATE');
-
$payment_modules->after_order_create($insert_id);
-
$zco_notifier->notify('NOTIFY_CHECKOUT_PROCESS_AFTER_PAYMENT_MODULES_AFTER_ORDER_CREATE');
-
// store the product info to the order
-
$order->create_add_products($insert_id);
-
$_SESSION['order_number_created'] = $insert_id;
-
//send email notifications
-
$order->send_order_email($insert_id, 2);
-
$zco_notifier->notify('NOTIFY_CHECKOUT_PROCESS_AFTER_SEND_ORDER_EMAIL');
-
}
-
?>
在pages/checkout_payment/header_php.php任意位置加上unset($_SESSION['order_number_created']);
這樣,就算顧客在確認頁面一直刷新,因爲已經設置了$_SESSION['order_number_created'],訂單不再生成,
如果顧客返回修改了購物車,再次到達checkout_payment時$_SESSION['order_number_created']將被清除,