針對除了paypal之外. 客戶通過其他的支付方式進入index.php?main_page=checkout_confirmation這個頁面就能生出訂單.paypal就有點與衆不同, 它隻能是從它的官網 [paypal.com] 返回來并且進入checkout_process這個頁面後,才能生出訂單,而意外常會發生:比如網絡不順. 又比如客戶不小心在返回前就關了頁面. 
 
paypal防漏單的原理就是——在 checkout_confirmation.php這個頁面先生出訂單!!!提供解決方法 
 
 
方法是:在這個文件的最後部分echo TITLE_CONTINUE_CHECKOUT_PROCEDURE . ‘<br />’ . TEXT_CONTINUE_CHECKOUT_PROCEDURE; 
 
 
後面添加代碼: 
 
// 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; 
 
 
爲了避免對其他支付方式産生影響,代碼做了個判斷,隻有paypal支付會運行這些生成訂單的代碼,加了這段後就不用擔心會漏單了—成功付款後後台訂單如圖: 
 
 
其中GS/AK的爲防漏單的訂單,隻有在出現漏單的時候才會查看這些訂單,裏面的信息跟正常訂單相比會少一個交易号,但是至少是可以看到客戶信息及所購買了什麽産品… 
 
 
如果需要更完美的做法,     爲防止顧客在訪問checkout process的時候會重複生成訂單, 那麽就需要加個判斷 
 
 
if($_SESSION['payment']!=’paypal’){ 
 
 
/*// create the order record 
 
 
$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; 
 
 
$zco_notifier->notify(‘NOTIFY_CHECKOUT_PROCESS_AFTER_ORDER_CREATE_ADD_PRODUCTS’); 
 
 
//send email notifications 
 
 
$order->send_order_email($insert_id, 2); 
 
 
$zco_notifier->notify(‘NOTIFY_CHECKOUT_PROCESS_AFTER_SEND_ORDER_EMAIL’);*/ 
 
 

 
而且在确認頁面,如果顧客一直刷新頁面,就會一直生成訂單,可以加個限制. 
 
// 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; 
 
 

 
在pages/checkout_payment/header_php.php任意位置加上unset($_SESSION['order_number_created']); 
 
這樣,就算顧客在确認頁面一直刷新,因爲已經設置了$_SESSION['order_number_created'],訂單不再生成,