zen-cart防漏单!生成订单思路

用于收藏精华贴子、网友共享的资料等。可以回复,不能发新贴。

版主: Jack

版面规则
本版面不能发新贴,可以回复

zen-cart防漏单!生成订单思路

帖子cuimail » 2012-11-07 15:41

主要思路:在客户确定运输方式和付款方式之后的任一页面都可以生成订单。一般在确认页面。如以下网址提供的二种方案:http://www.zen-cart.cn/forum/topic77624.html
-------------》需要注意,生成订单内容要完整正确;从付款页面回来后,防止重复订单。

下面提供一种最简单的方案。此方案对各版本的zen-cart都有效。
1、修改includes\modules\checkout_process.php文件:
---------------------------以下代码移到最后
代码: 全选
// load the before_process function from the payment modules
$payment_modules->before_process();
$zco_notifier->notify('NOTIFY_CHECKOUT_PROCESS_AFTER_PAYMENT_MODULES_BEFOREPROCESS');
$payment_modules->after_order_create($insert_id);
$zco_notifier->notify('NOTIFY_CHECKOUT_PROCESS_AFTER_PAYMENT_MODULES_AFTER_ORDER_CREATE');


2、修改includes\modules\pages\checkout_confirmation/header_php.php文件:
---------------------以下代码处增加代码
代码: 全选
if (isset($$_SESSION['payment']->form_action_url)) {
  $form_action_url = $$_SESSION['payment']->form_action_url;
////以下为新增
   if (!isset($_SESSION['order_number_created'])){
  zen_redirect(zen_href_link(FILENAME_CHECKOUT_PROCESS, '', 'SSL'));
  }

以上即已完成订单生成。
-----------------------------------------------------------------------------------------------------------------------
以下是继续完善方案:

1、防止支付后重复订单 -->修改includes\modules\checkout_process.php文件:

----------------------------从下代码处,加上if语句
代码: 全选
if (!($_GET['referer'] == 'paypal')) {
// create the order record
$insert_id = $order->create($order_totals, 2);
$zco_notifier->notify('NOTIFY_CHECKOUT_PROCESS_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');
 }


2、生成订单后,购物车清空-->修改templates\tpl_checkout_confirmation_default.php文件:
------------------------在最后一个</div>前面加上以下代码:
代码: 全选
 <?php
 if (isset($_SESSION['order_number_created'])){
 $_SESSION['cart']->reset(true);
 }
?>


3、生成订单后,再次返回购物车下订单--->修改includes\modules\pages\shopping_cart/header_php.php文件:
在任意位置增加:
代码: 全选
unset($_SESSION['order_number_created']);



4、因为以上方案会二次出现checkout_payment页面,可以增加自动提交页面功能。----》修改templates\tpl_checkout_payment_default.php文件:

------------------------在最后一个</div>前面加上以下代码:
代码: 全选
<?php
 if (isset($_SESSION['order_number_created'])){
echo('
<script>window.onload = get_stock_list(); </script>
<script language="javascript"> 
function get_stock_list() {
document.checkout_payment.submit();
}
 setTimeout("get_stock_list()",1000);
</script> ');
}
?>

提供方案样品页面:http://zen-cart.uuant.com

QQ交流:1097685263(身份验证:zen-cart)
cuimail
新手上路
新手上路
 
帖子: 6
注册: 2011-05-07 15:38

Re: zen-cart防漏单!生成订单思路

帖子li-he-qi » 2012-11-08 0:32

强!!!!!!!!!! 喜欢用Paypal的同学有福了,
不过我们这种菜鸟是不敢改, 为了一个漏单, 改结账流程而且要改那么多文件, 可能会导致很多其他的支付模块无法正常使用, 这个风险还是要提示下的 ;)
li-he-qi
VIP会员
VIP会员
 
帖子: 544
注册: 2010-09-22 22:47

Re: zen-cart防漏单!生成订单思路

帖子cuimail » 2012-11-08 8:01

li-he-qi 写道:强!!!!!!!!!! 喜欢用Paypal的同学有福了,
不过我们这种菜鸟是不敢改, 为了一个漏单, 改结账流程而且要改那么多文件, 可能会导致很多其他的支付模块无法正常使用, 这个风险还是要提示下的 ;)


这个方案并没有减少原来的结账流程,只是调整了处理流程:在进入paypal后先生成订单!原版的设计是跳过去了!所以对于其他支付模块没有影响,防重复订单可参考paypal方法!对于任何其他模块也没有影响!可以放心一试! http://zen-cart.uuant.com(用户:demo密码:demo888)
cuimail
新手上路
新手上路
 
帖子: 6
注册: 2011-05-07 15:38


  • 相关话题
    回复总数
    阅读次数
    最新文章

回到 精华共享



在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客