### [详解ecshop后台订单自动确认开发](https://www.prosaas.cn/article/599) **Published:** 2020-12-28T10:01:01 **Author:** 5201314 **Excerpt:** ecshop栏目介绍ecshop后台订单自动确认开发推荐(免费):ecshop 一、/admin/order.… **ecshop****栏目介绍ecshop后台订单自动确认开发** ![](//zhiqipro.oss-cn-beijing.aliyuncs.com/2023/12/20231212114900393.jpg) **推荐(免费):ecshop** ![](//zhiqipro.oss-cn-beijing.aliyuncs.com/2023/12/20231212114900319.png) CREATE TABLE \`order\_auto\_confirm\` ( \`id\` INT(10) UNSIGNED NOT NULL AUTO\_INCREMENT, \`order\_id\` INT(10) UNSIGNED NOT NULL DEFAULT '0', \`order\_sn\` VARCHAR(20) NOT NULL, \`execute\_time\` INT(10) UNSIGNED NOT NULL DEFAULT '0', \`order\_status\` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0' COMMENT '0未确定,1已经确定', \`addtime\` INT(10) UNSIGNED NOT NULL DEFAULT '0', \`update\_time\` INT(10) UNSIGNED NOT NULL DEFAULT '0', PRIMARY KEY (\`id\`), UNIQUE INDEX \`order\_id\` (\`order\_id\`), INDEX \`execute\_time\` (\`execute\_time\`) ) COMMENT='订单定期自动确定' COLLATE='utf8\_general\_ci' ENGINE=MyISAM; 一、 /admin/order.php加入以下代码: elseif($\_REQUEST\['act'\] == 'order\_cron') { $act1 = empty($\_POST\['act1'\]) ? 0 : $\_POST\['act1'\]; if(empty($act1) || !in\_array($act1, array('add', 'cancel'))) make\_json\_response('', -1, '未知请求act1');    $order\_id = intval($\_POST\['order\_id'\]); $order = order\_info($order\_id); if(empty($order)) make\_json\_response('', -2, '没有此订单ID');    if($order\['order\_status'\]) make\_json\_response('', -3, '此订单已经确认,不用自动确认');    if($order\['pay\_status'\]) make\_json\_response('', -4, '此订单支付状态已经变动,无法添加任务');    if($act1 == 'add'){ $order\_cron\_time = empty($\_POST\['order\_cron\_time'\]) ? 0 : $\_POST\['order\_cron\_time'\];        if(empty($order\_cron\_time)) make\_json\_response('', -10, '请求的时间错误');        $sql = 'select order\_id from '.$ecs->table('order\_auto\_confirm').' where order\_id='.$order\_id; $rs  = $db->getRow($sql); if($rs\['order\_id'\] == $order\_id){ make\_json\_response('', -30, '此订单任务已经存在,不能重复添加'); } $execute\_time = local\_strtotime($order\_cron\_time); $sql    = "insert into ".$ecs->table('order\_auto\_confirm')."(order\_id, order\_sn, execute\_time, order\_status, addtime) values(".$order\_id.",'".$order\['order\_sn'\]."',".$execute\_time.", 0, ".local\_gettime().")"; $result = $db->query($sql); if($result){ make\_json\_response('', 0, ''); } make\_json\_response('', -9, '添加任务计划失败'); }elseif($act1 == 'cancel'){ $sql = 'delete  from '.$ecs->table('order\_auto\_confirm').' where order\_id='.$order\_id.' and order\_status=0 '; $db->query($sql); make\_json\_response('', 0, ''); } } 二、 在elseif($\_REQUEST\['act'\] == 'info')里加入: //取自动确定订单信息 $sql = 'select order\_status, execute\_time, addtime, update\_time from '.$ecs->table('order\_auto\_confirm').' where order\_id='.$order\['order\_id'\]; $cron= $db->getRow($sql); if(!empty($cron)){ if($cron\['order\_status'\] == 1) $cron\['update\_time'\] = sprintf($\_LANG\['order\_auto\_croned'\], local\_date('Y-m-d H:i:s', $cron\['update\_time'\])); else $cron\['execute\_time'\]= sprintf($\_LANG\['order\_auto\_cron'\], local\_date('Y-m-d H:i:s', $cron\['execute\_time'\])); } $smarty->assign('cron', $cron); 三、 /includes/modules/cron/order\_auto\_confirm.php if (!defined('IN\_ECS')) { die('Hacking attempt'); } require\_once(ROOT\_PATH . 'includes/lib\_order.php'); $cron\_lang = ROOT\_PATH . 'languages/' .$GLOBALS\['\_CFG'\]\['lang'\]. '/cron/order\_auto\_confirm.php'; if (file\_exists($cron\_lang)) { global $\_LANG;    include\_once($cron\_lang); }/\* 模块的基本信息 \*/ if (isset($set\_modules) && $set\_modules == TRUE) { $i = isset($modules) ? count($modules) : 0;    /\* 代码 \*/ $modules\[$i\]\['code'\]    = basename(\_\_FILE\_\_, '.php');    /\* 描述对应的语言项 \*/ $modules\[$i\]\['desc'\]    = 'order\_auto\_confirm\_desc';    /\* 作者 \*/ $modules\[$i\]\['author'\]  = 'wjzhhr';    /\* 网址 \*/ $modules\[$i\]\['website'\] = 'http://www.wodeqingchun.com';    /\* 版本号 \*/ $modules\[$i\]\['version'\] = '1.0.0';    /\* 配置信息 \*/ $modules\[$i\]\['config'\]  = array( array('name' => 'order\_auto\_confirm\_count', 'type' => 'select', 'value' => '10'), );    return; } $time  = gmtime(); //$time  = local\_gettime(); $limit = empty($cron\['order\_auto\_confirm\_count'\]) ? 5 : $cron\['order\_auto\_confirm\_count'\]; $sql   = "SELECT \* FROM " . $GLOBALS\['ecs'\]->table('order\_auto\_confirm') . " WHERE execute\_time <= ".$time." and order\_status=0 LIMIT $limit"; $autodb= $db->getAll($sql); $i     = 0; foreach ($autodb as $key => $val) { $order\_id = $val\['order\_id'\]; $order\_sn = $val\['order\_sn'\]; /\* 标记订单为已确认 \*/ $update\_status = update\_order($order\_id, array('order\_status' => OS\_CONFIRMED, 'confirm\_time' => gmtime())); update\_order\_amount($order\_id);        /\* 记录log \*/ $action\_note = "计划任务:定期自动确定订单,订单号:".$order\_sn.",执行状态:".($update\_status ? '成功' : '失败'); order\_action($order\_sn, OS\_CONFIRMED, SS\_UNSHIPPED, PS\_UNPAYED, $action\_note, 'system\_cron');        /\* 如果原来状态不是“未确认”,且使用库存,且下订单时减库存,则减少库存 \*/ if ($val\['order\_status'\] != OS\_UNCONFIRMED && $\_CFG\['use\_storage'\] == '1' && $\_CFG\['stock\_dec\_time'\] == SDT\_PLACE) { change\_order\_goods\_storage($order\_id, true, SDT\_PLACE); }        if($update\_status) { $i  += 1; $sql = "update " . $GLOBALS\['ecs'\]->table('order\_auto\_confirm') . " set order\_status=1, update\_time=".$time." where order\_id=".$order\_id; $db->query($sql); } }$string = '此次共更新:'.$i.'条数据'; echo $string;file\_put\_contents('./a.txt',  $time . '----' . date('Y-m-d H:i:s').$string."\\r\\n", FILE\_APPEND); /\*\* \* 更新订单总金额 \* @param   int     $order\_id   订单id \* @return  bool //zuimoban.com \*/ function update\_order\_amount($order\_id) { include\_once(ROOT\_PATH . 'includes/lib\_order.php'); //更新订单总金额 $sql = "UPDATE " . $GLOBALS\['ecs'\]->table('order\_info') . " SET order\_amount = " . order\_due\_field() . " WHERE order\_id = '$order\_id' LIMIT 1";    return $GLOBALS\['db'\]->query($sql); } ?> 四、 /languages/zh\_cn/admin/order.php里加入: $\_LANG\['order\_auto\_croned'\] = '此订单于 %s 已被确认'; $\_LANG\['order\_auto\_cron'\]   = '此订单于 %s 进行定时确认'; $\_LANG\['order\_auto'\]        = '将此订单加入自动定时确认'; $\_LANG\['order\_auto\_time'\]   = '自动确认时间:'; 五、 /admin/themes/order\_info.htm在:{$lang.base\_info}后面加入: ![](//zhiqipro.oss-cn-beijing.aliyuncs.com/2023/12/20231212114900210.png) 在此页面的JS里面加入: function order\_cron(order\_id, act){    var order\_cron\_time = 0;    if(act == 'add'){        order\_cron\_time = document.getElementById('order\_cron\_time').value;        if(!order\_cron\_time){            alert('无法获取时间');            return false;        }    }    Ajax.call('order.php?act=order\_cron', 'order\_id=' + order\_id + '&act1=' + act + '&order\_cron\_time=' + order\_cron\_time, order\_cron\_response, 'POST', 'JSON');}function order\_cron\_response(res){  if (res.error == 0)  {      alert('保存成功');  }  else  {      alert(res.message);  }  return false;} 还有/themes/default/footer.dwt里是否含有: `{insert name='query_info'}` 这一句,比较重要,前人把这句去掉了,害最模板到处找原因。共涉及5个文件,两个新添加的 以上就是详解ecshop后台订单自动确认开发的详细内容,更多请关注知企PROSAAS其它相关文章! **Tags:** default, ECShop, JS, php **Categories:** ECShop ---