Пример #1
0
 /**
  * 處理函數
  */
 function respond()
 {
     $arPayment = get_payment('ecshop_allpay_card');
     $isTestMode = $arPayment['ecshop_allpay_card_test_mode'] == 'Yes';
     $arFeedback = null;
     $arQueryFeedback = null;
     $szLogID = $_GET['log_id'];
     $szOrderID = $_GET['order_id'];
     $this->HashKey = trim($arPayment['ecshop_allpay_card_key']);
     $this->HashIV = trim($arPayment['ecshop_allpay_card_iv']);
     try {
         // 取得回傳的付款結果。
         $arFeedback = $this->CheckOutFeedback();
         if (sizeof($arFeedback) > 0) {
             // 查詢付款結果資料。
             $this->ServiceURL = $isTestMode ? "https://payment-stage.allpay.com.tw/Cashier/QueryTradeInfo/v2" : "https://payment.allpay.com.tw/Cashier/QueryTradeInfo/V2";
             $this->MerchantID = trim($arPayment['ecshop_allpay_card_account']);
             $this->Query['MerchantTradeNo'] = $arFeedback['MerchantTradeNo'];
             $arQueryFeedback = $this->QueryTradeInfo();
             if (sizeof($arQueryFeedback) > 0) {
                 $arOrder = order_info($szOrderID);
                 // 檢查支付金額與訂單是否相符。
                 if (round($arOrder['order_amount']) == $arFeedback['TradeAmt'] && $arQueryFeedback['TradeAmt'] == $arFeedback['TradeAmt']) {
                     $szCheckAmount = '1';
                 }
                 // 確認付款結果。
                 if ($arFeedback['RtnCode'] == '1' && $szCheckAmount == '1' && $arQueryFeedback["TradeStatus"] == '1') {
                     $szNote = $GLOBALS['_LANG']['text_paid'] . date("Y-m-d H:i:s");
                     order_paid($szLogID, PS_PAYED, $szNote);
                     if ($_GET['background']) {
                         echo '1|OK';
                         exit;
                     } else {
                         return true;
                     }
                 } else {
                     if ($_GET['background']) {
                         echo !$szCheckAmount ? '0|訂單金額不符。' : $arFeedback['RtnMsg'];
                         exit;
                     } else {
                         return false;
                     }
                 }
             } else {
                 throw new Exception('AllPay 查無訂單資料。');
             }
         }
     } catch (Exception $ex) {
         /* 例外處理 */
     }
     return false;
 }
Пример #2
0
function cancel_delivery($order_id, $delivery_id)
{
    global $db, $ecs;
    /* 取得参数 */
    $delivery = '';
    /* 根据发货单id查询发货单信息 */
    if (!empty($delivery_id)) {
        $delivery_order = delivery_order_info($delivery_id);
    } else {
        sys_msg('订单号不能为空!', 1);
    }
    /* 查询订单信息 */
    $order = order_info($order_id);
    /* 取消当前发货单物流单号 */
    $_delivery['invoice_no'] = '';
    $_delivery['status'] = 2;
    $query = $db->autoExecute($ecs->table('delivery_order'), $_delivery, 'UPDATE', "delivery_id = {$delivery_id}", 'SILENT');
    if (!$query) {
        /* 操作失败 */
        $links[] = array('text' => $GLOBALS['_LANG']['delivery_sn'] . $GLOBALS['_LANG']['detail'], 'href' => 'order.php?act=delivery_info&delivery_id=' . $delivery_id);
        sys_msg($GLOBALS['_LANG']['act_false'], 1, $links);
        exit;
    }
    /* 修改定单发货单号 */
    $invoice_no_order = explode('<br>', $order['invoice_no']);
    $invoice_no_delivery = explode('<br>', $delivery_order['invoice_no']);
    foreach ($invoice_no_order as $key => $value) {
        $delivery_key = array_search($value, $invoice_no_delivery);
        if ($delivery_key !== false) {
            unset($invoice_no_order[$key], $invoice_no_delivery[$delivery_key]);
            if (count($invoice_no_delivery) == 0) {
                break;
            }
        }
    }
    $_order['invoice_no'] = implode('<br>', $invoice_no_order);
    /* 更新配送状态 */
    $order_finish = get_all_delivery_finish($order_id);
    $shipping_status = $order_finish == -1 ? SS_SHIPPED_PART : SS_SHIPPED_ING;
    $arr['shipping_status'] = $shipping_status;
    if ($shipping_status == SS_SHIPPED_ING) {
        $arr['shipping_time'] = '';
        // 发货时间
    }
    $arr['invoice_no'] = $_order['invoice_no'];
    update_order($order_id, $arr);
    /* 发货单取消发货记录log */
    order_action($order['order_sn'], $order['order_status'], $shipping_status, $order['pay_status'], $action_note, null, 1);
    /* 如果使用库存,则增加库存 */
    if ($_CFG['use_storage'] == '1' && $_CFG['stock_dec_time'] == SDT_SHIP) {
        // 检查此单发货商品数量
        $virtual_goods = array();
        $delivery_stock_sql = "SELECT DG.goods_id, DG.product_id, DG.is_real, SUM(DG.send_number) AS sums\r\n            FROM " . $GLOBALS['ecs']->table('delivery_goods') . " AS DG\r\n            WHERE DG.delivery_id = '{$delivery_id}'\r\n            GROUP BY DG.goods_id ";
        $delivery_stock_result = $GLOBALS['db']->getAll($delivery_stock_sql);
        foreach ($delivery_stock_result as $key => $value) {
            /* 虚拟商品 */
            if ($value['is_real'] == 0) {
                continue;
            }
            //(货品)
            if (!empty($value['product_id'])) {
                $minus_stock_sql = "UPDATE " . $GLOBALS['ecs']->table('products') . "\r\n                                    SET product_number = product_number + " . $value['sums'] . "\r\n                                    WHERE product_id = " . $value['product_id'];
                $GLOBALS['db']->query($minus_stock_sql, 'SILENT');
            }
            $minus_stock_sql = "UPDATE " . $GLOBALS['ecs']->table('goods') . "\r\n                                SET goods_number = goods_number + " . $value['sums'] . "\r\n                                WHERE goods_id = " . $value['goods_id'];
            $GLOBALS['db']->query($minus_stock_sql, 'SILENT');
        }
    }
    /* 发货单全退回时,退回其它 */
    if ($order['order_status'] == SS_SHIPPED_ING) {
        /* 如果订单用户不为空,计算积分,并退回 */
        if ($order['user_id'] > 0) {
            /* 取得用户信息 */
            $user = user_info($order['user_id']);
            /* 计算并退回积分 */
            $integral = integral_to_give($order);
            log_account_change($order['user_id'], 0, 0, -1 * intval($integral['rank_points']), -1 * intval($integral['custom_points']), sprintf($GLOBALS['_LANG']['return_order_gift_integral'], $order['order_sn']));
            /* todo 计算并退回红包 */
            return_order_bonus($order_id);
        }
    }
    /* 清除缓存 */
    clear_cache_files();
    /* 操作成功 */
    $links[] = array('text' => $GLOBALS['_LANG']['delivery_sn'] . $GLOBALS['_LANG']['detail'], 'href' => 'order.php?act=delivery_info&delivery_id=' . $delivery_id);
    sys_msg($GLOBALS['_LANG']['act_ok'], 0, $links);
}
Пример #3
0
         //调试用,写文本函数记录程序运行情况是否正常
         //logResult("这里写入想要调试的代码变量值,或其他运行的结果记录");
         echo "success";
         //请不要修改或删除
     } else {
         if ($trade_status == 'TRADE_SUCCESS') {
             //判断该笔订单是否在商户网站中已经做过处理
             //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
             //如果有做过处理,不执行商户的业务程序
             //注意:
             //该种交易状态只在一种情况下出现——开通了高级即时到账,买家付款成功后。
             //调试用,写文本函数记录程序运行情况是否正常
             //logResult("这里写入想要调试的代码变量值,或其他运行的结果记录");
             logResult('TRADE_SUCCESS');
             logResult('out_trade_no:' . $out_trade_no);
             $order = order_info(0, $out_trade_no);
             logResult('order:' . $order);
             if ($order) {
                 logResult('order_id:' . $order['order_id']);
                 $log_id = insert_pay_log($order['order_id'], $order['order_amount'], PAY_ORDER);
                 logResult('log_id:' . $log_id);
                 order_paid($log_id, 2);
             }
             echo "success";
             //请不要修改或删除
         } else {
             logResult('TRADE_STATUS:' . $trade_status);
         }
     }
 }
 //——请根据您的业务逻辑来编写程序(以上代码仅作参考)——
Пример #4
0
 /**
  * 處理函數
  */
 function respond()
 {
     $arPayment = get_payment('ecshop_ecpay_barcode');
     $isTestMode = $arPayment['ecshop_ecpay_barcode_test_mode'] == 'Yes';
     $arFeedback = null;
     $arQueryFeedback = null;
     $szLogID = $_GET['log_id'];
     $szOrderID = $_GET['order_id'];
     //$isPaymentInfo = ($_GET['pi'] == 'true');
     $this->HashKey = trim($arPayment['ecshop_ecpay_barcode_key']);
     $this->HashIV = trim($arPayment['ecshop_ecpay_barcode_iv']);
     try {
         // 取得回傳的付款結果。
         $arFeedback = $this->CheckOutFeedback();
         if (sizeof($arFeedback) > 0) {
             // 查詢付款結果資料。
             $this->ServiceURL = $isTestMode ? "https://payment-stage.ecpay.com.tw/Cashier/QueryTradeInfo/v2" : "https://payment.ecpay.com.tw/Cashier/QueryTradeInfo/V2";
             $this->MerchantID = trim($arPayment['ecshop_ecpay_barcode_account']);
             $this->Query['MerchantTradeNo'] = $arFeedback['MerchantTradeNo'];
             $arQueryFeedback = $this->QueryTradeInfo();
             if (sizeof($arQueryFeedback) > 0) {
                 $arOrder = order_info($szOrderID);
                 // 檢查支付金額與訂單是否相符。
                 if (round($arOrder['order_amount']) == $arFeedback['TradeAmt'] && $arQueryFeedback['TradeAmt'] == $arFeedback['TradeAmt']) {
                     $szCheckAmount = '1';
                 }
                 // 確認產生條碼。
                 if ($arFeedback['RtnCode'] == '10100073' && $szCheckAmount == '1' && $arQueryFeedback["TradeStatus"] == '0') {
                     $szPaymentType = $arFeedback['PaymentType'];
                     $szTradeDate = $arFeedback['TradeDate'];
                     $szBankCode = $arFeedback['PaymentNo'];
                     $szExpireDate = $arFeedback['ExpireDate'];
                     $szBarcode1 = $arFeedback['Barcode1'];
                     $szBarcode2 = $arFeedback['Barcode2'];
                     $szBarcode3 = $arFeedback['Barcode3'];
                     $szNote = sprintf($GLOBALS['_LANG']['text_paying'], date("Y-m-d H:i:s"), $szPaymentType, $szTradeDate, $szBankCode, $szExpireDate, $szBarcode1, $szBarcode2, $szBarcode3);
                     order_paid($szLogID, PS_PAYING, $szNote);
                     /* 修改此次交易狀態為未付款 */
                     $sql = 'UPDATE ' . $GLOBALS['ecs']->table('pay_log') . " SET is_paid = '0' WHERE log_id = '{$szLogID}'";
                     $GLOBALS['db']->query($sql);
                     ob_get_clean();
                     print '1|OK';
                     exit;
                 }
                 // 確認付款結果。
                 if ($arFeedback['RtnCode'] == '1' && $szCheckAmount == '1' && $arQueryFeedback["TradeStatus"] == '1') {
                     $szNote = $GLOBALS['_LANG']['text_paid'] . date("Y-m-d H:i:s");
                     order_paid($szLogID, PS_PAYED, $szNote);
                     if ($_GET['background']) {
                         echo '1|OK';
                         exit;
                     } else {
                         return true;
                     }
                 } else {
                     if ($_GET['background']) {
                         echo !$szCheckAmount ? '0|訂單金額不符。' : $arFeedback['RtnMsg'];
                         exit;
                     } else {
                         return false;
                     }
                 }
             } else {
                 throw new Exception('ECPay 查無訂單資料。');
             }
         }
     } catch (Exception $ex) {
         /* 例外處理 */
     }
     return false;
 }
Пример #5
0
     exit;
 }
 include_once ROOT_PATH . 'includes/lib_order.php';
 $payment_info = payment_info($pay_id);
 if (empty($payment_info)) {
     ecs_header("Location: ./\n");
     exit;
 }
 /* 检查订单号 */
 $order_id = intval($_POST['order_id']);
 if ($order_id <= 0) {
     ecs_header("Location: ./\n");
     exit;
 }
 /* 取得订单 */
 $order = order_info($order_id);
 if (empty($order)) {
     ecs_header("Location: ./\n");
     exit;
 }
 /* 检查订单用户跟当前用户是否一致 */
 if ($_SESSION['user_id'] != $order['user_id']) {
     ecs_header("Location: ./\n");
     exit;
 }
 /* 检查订单是否未付款和未发货 以及订单金额是否为0 和支付id是否为改变*/
 if ($order['pay_status'] != PS_UNPAYED || $order['shipping_status'] != SS_UNSHIPPED || $order['goods_amount'] <= 0 || $order['pay_id'] == $pay_id) {
     ecs_header("Location: user.php?act=order_detail&order_id={$order_id}\n");
     exit;
 }
 $order_amount = $order['order_amount'] - $order['pay_fee'];
Пример #6
0
/**
 * 变更订单的发货状态
 *
 * @access  private
 * @param   string $brand_name
 * @return  array
 */
function pos_order_shipping($order_id)
{
    if (!check_priviege()) {
        exit;
    }
    $operation = 'ship';
    /* 查询订单信息 */
    $order = order_info($order_id);
    /* 检查能否操作 */
    $operable_list = operable_list($order);
    if (!isset($operable_list[$operation])) {
        die('Hacking attempt');
    }
    if ($order['order_status'] != OS_CONFIRMED) {
        $post['order_status'] = OS_CONFIRMED;
        $post['confirm_time'] = gmtime();
    }
    $post['shipping_status'] = SS_SHIPPED;
    $post['shipping_time'] = gmtime();
    update_order($order_id, $post);
    $action_note = '[OrderHelper ' . TUNNELVERSION . '] 打印快递单';
    /* 记录log */
    order_action($order['order_sn'], OS_CONFIRMED, SS_SHIPPED, $order['pay_status'], $action_note);
}
Пример #7
0
function action_act_edit_payment()
{
	$user = $GLOBALS['user'];
	$_CFG = $GLOBALS['_CFG'];
	$_LANG = $GLOBALS['_LANG'];
	$smarty = $GLOBALS['smarty'];
	$db = $GLOBALS['db'];
	$ecs = $GLOBALS['ecs'];
	$user_id = $GLOBALS['user_id'];


	/* 检查是否登录 */
	if($_SESSION['user_id'] <= 0)
	{
		ecs_header("Location: ./\n");
		exit();
	}
	
	/* 检查支付方式 */
	$pay_id = intval($_POST['pay_id']);
	if($pay_id <= 0)
	{
		ecs_header("Location: ./\n");
		exit();
	}
	
	include_once (ROOT_PATH . 'includes/lib_order.php');
	$payment_info = payment_info($pay_id);
	if(empty($payment_info))
	{
		ecs_header("Location: ./\n");
		exit();
	}
	
	/* 检查订单号 */
	$order_id = intval($_POST['order_id']);
	if($order_id <= 0)
	{
		ecs_header("Location: ./\n");
		exit();
	}
	
	/* 取得订单 */
	$order = order_info($order_id);
	if(empty($order))
	{
		ecs_header("Location: ./\n");
		exit();
	}
	
	/* 检查订单用户跟当前用户是否一致 */
	if($_SESSION['user_id'] != $order['user_id'])
	{
		ecs_header("Location: ./\n");
		exit();
	}
	
	/* 检查订单是否未付款和未发货 以及订单金额是否为0 和支付id是否为改变 */
	if($order['pay_status'] != PS_UNPAYED || $order['shipping_status'] != SS_UNSHIPPED || $order['goods_amount'] <= 0 || $order['pay_id'] == $pay_id)
	{
		ecs_header("Location: user.php?act=order_detail&order_id=$order_id\n");
		exit();
	}
	
	$order_amount = $order['order_amount'] - $order['pay_fee'];
	$pay_fee = pay_fee($pay_id, $order_amount);
	$order_amount += $pay_fee;
	
	$sql = "UPDATE " . $ecs->table('order_info') . " SET pay_id='$pay_id', pay_name='$payment_info[pay_name]', pay_fee='$pay_fee', order_amount='$order_amount'" . " WHERE order_id = '$order_id'";
	$db->query($sql);
	
	/* 跳转 */
	ecs_header("Location: user.php?act=order_detail&order_id=$order_id\n");
	exit();
}
Пример #8
0
/**
 * 返回订单发放的红包
 * @param   int     $order_id   订单id
 */
function return_order_bonus($order_id)
{
    /* 取得订单应该发放的红包 */
    $bonus_list = order_bonus($order_id);
    /* 删除 */
    if ($bonus_list) {
        /* 取得订单信息 */
        $order = order_info($order_id);
        $user_id = $order['user_id'];
        foreach ($bonus_list as $bonus) {
            $sql = "DELETE FROM " . $GLOBALS['ecs']->table('user_bonus') . " WHERE bonus_type_id = '{$bonus['type_id']}' " . "AND user_id = '{$user_id}' " . "AND order_id = '0' LIMIT " . $bonus['number'];
            $GLOBALS['db']->query($sql);
        }
    }
}
Пример #9
0
function action_chat()
{
    $user_id = $_SESSION['user_id'];
    $smarty = get_smarty();
    $ecs = get_ecs();
    $db = get_database();
    /**
     * 判断当前用户是为聊天系统的注册用户
     */
    $exist = check_of_username_exist($user_id);
    // 获取用户头像
    if (!empty($user_id)) {
        $sql = "select password, headimg from " . $ecs->table('users') . " where user_id = '{$user_id}'";
        $row = $db->getRow($sql);
        $headimg = $row['headimg'];
        $password = $row['password'];
        $smarty->assign('headimg', $headimg);
    }
    if (!$exist) {
        // 查询ECShop内用户信息
        $sql = 'select a.user_id, a.password, a.email, a.user_name from ' . $ecs->table('users') . ' AS a where a.user_id = "' . $user_id . '"';
        $user = $GLOBALS['db']->getRow($sql);
        if (empty($user)) {
            // 根据user_id未查找到任何用户信息
        }
        // 用户不存在,创建用户信息
        $username = $user_id;
        $password = $user['password'];
        $name = $user['user_name'];
        $email = $user['email'];
        $type = 10;
        $shop_id = -1;
        $result = create_of_user($username, $password, $name, $email, $type, $shop_id);
        if ($result) {
            // 创建成功
        } else {
            // 创建失败
        }
    }
    // 获取前端传来的商品编号、订单编号、店铺编号等
    // 商品编号则显示商品信息
    // 订单编号则显示订单信息
    // 店铺编号则显示店铺信息
    $goods_id = null;
    $supp_id = -1;
    $order_id = null;
    $customers = null;
    // 获取客服信息
    $tab_items = array();
    // 客服类型
    $cus_types = CUSTOMER_SERVICE;
    // 记录需要发给客服的URL
    if (!empty($_REQUEST['chat_goods_id'])) {
        /* 咨询商品信息 */
        $goods_id = $_REQUEST['chat_goods_id'];
        $goods = goods_info($goods_id);
        $smarty->assign('chat_goods', $goods);
        $smarty->assign('chat_goods_id', $goods_id);
        // 获取店铺信息
        $supp_id = null;
        $tab_items[] = array("id" => "chat_goods", "name" => "咨询商品");
        // 客服+售前
        $cus_types = CUSTOMER_SERVICE . ',' . CUSTOMER_PRE;
    }
    if (!empty($_REQUEST['chat_supp_id'])) {
        /* 店铺信息 */
        $supp_id = $_REQUEST['chat_supp_id'];
        $supp_info = get_dianpu_baseinfo($supp_id);
        $smarty->assign('supp_info', $supp_info);
        $smarty->assign('chat_supp_id', $supp_id);
        $tab_items[] = array("id" => "chat_supp", "name" => "店铺信息");
        // 客服+售前
        $cus_types = CUSTOMER_SERVICE . ',' . CUSTOMER_PRE;
    }
    if (!empty($_REQUEST['chat_order_id'])) {
        /* 咨询订单信息 */
        require 'includes/lib_order.php';
        $order_id = $_REQUEST['chat_order_id'];
        // 获取商品和店铺信息
        $goods_id = null;
        $supp_id = null;
        $order = order_info($order_id);
        $order['order_status_text'] = $GLOBALS['_LANG']['os'][$order['order_status']] . ',' . $GLOBALS['_LANG']['ps'][$order['pay_status']] . ',' . $GLOBALS['_LANG']['ss'][$order['shipping_status']];
        $order['goods_list'] = order_goods($order_id);
        $smarty->assign('chat_order', $order);
        $smarty->assign('chat_order_id', $order_id);
        $smarty->assign('chat_order_sn', $order['order_sn']);
        $tab_items[] = array("id" => "chat_order", "name" => "咨询订单");
        // 客服+售后
        $cus_types = CUSTOMER_SERVICE . ',' . CUSTOMER_AFTER;
    }
    if (true) {
        /* 最近订单列表 */
        require 'includes/lib_transaction_1.php';
        // 获取用户最近的5条订单列表
        $order_list = get_user_orders_1($user_id, 5, 0);
        // 所有客服忙碌状态,提示web端
        $smarty->assign('order_list', $order_list);
        $smarty->assign('order_count', count($order_list));
        $tab_items[] = array("id" => "chat_order_list", "name" => "最近订单");
        // 客服
        $cus_types = CUSTOMER_SERVICE;
    }
    // 获取客服信息
    $customers = get_customers($cus_types, $supp_id);
    // 转换为JSON数据
    $smarty->assign('tab_items', json_encode($tab_items));
    $to = null;
    // 客服获取策略:0-顺序、1-随机、2-竞争
    if (!empty($customers)) {
        // 暂时采用随机策略
        $poliy = 1;
        if ($poliy == 0) {
            foreach ($customers as $customer) {
                $status = $customer['status'];
                if ($status == '在线' || $status == '空闲') {
                    $to = $customer;
                    break;
                    // 					if(isset($customer['cus_status']) && count($customers) > 1)
                    // 					{
                    // 						if(time() - $customer['chat_time'] > 5*60)
                    // 						{
                    // 							set_customer_status($customer['cus_id'], 0);
                    // 							$customer['cus_status'] = 0;
                    // 						}
                    // 						if($customer['cus_status'] == 0)
                    // 						{
                    // 							$to = $customer;
                    // 							break;
                    // 						}
                    // 					}
                    // 					else
                    // 					{
                    // 						$to = $customer;
                    // 						break;
                    // 					}
                }
            }
        } else {
            if ($poliy == 1) {
                /* 随进策略 */
                $onlines = array();
                foreach ($customers as $customer) {
                    $status = $customer['status'];
                    if ($status == '在线' || $status == '空闲') {
                        $onlines[] = $customer;
                    }
                }
                if (count($onlines) > 0) {
                    $min = 1;
                    $max = count($onlines);
                    $i = mt_rand($min, $max);
                    $to = $onlines[$i - 1];
                }
            } else {
            }
        }
        if (empty($to)) {
            if ($supp_id == -1) {
                // 所有客服忙碌状态,提示web端
                $smarty->assign('system_notice', '当前客服忙碌,请稍后联系!');
            } else {
                // 所有客服忙碌状态,提示web端
                $smarty->assign('system_notice', '当前店铺客服忙碌,请稍后联系!');
            }
        } else {
            $xmpp_domain = get_xmpp_domain();
            $_SESSION['OF_FROM'] = $user_id . '@' . $xmpp_domain;
            $_SESSION['OF_TO'] = $to['of_username'] . '@' . $xmpp_domain;
            $smarty->assign('from', $_SESSION['OF_FROM']);
            $smarty->assign('password', $password);
            // $smarty->assign('password', "123456");
            $smarty->assign('to', '==to==');
            $smarty->assign('username', $_SESSION['user_name']);
            $smarty->assign('customername', $to['cus_name']);
            // 存储在Session中方便其他地方使用
            // 所有客服忙碌状态,提示web端
            $smarty->assign('system_notice', '客服<span class="kf_name">' . $to['cus_name'] . '</span>已加入会话!');
        }
    } else {
        // 所有客服忙碌状态,提示web端
        $smarty->assign('system_notice', '当前客服忙碌,请稍后联系!');
    }
    // 打开聊天页面
    $smarty->display('chat.dwt');
}
Пример #10
0
        $smarty->assign('city', $order['city']);
        $smarty->assign('dist', $order['district']);
    }
    $smarty->assign('notice', $order['best_time']);
    $smarty->assign('message', $res['message']);
    $smarty->assign('shipping_code', $order['shipping_code']);
    $smarty->display('shipping_' . strtolower($order['shipping_code']) . '.htm');
} elseif ($_REQUEST['act'] == 'info') {
    /* 检查权限 */
    /* 根据订单id或订单号查询订单信息 */
    if (isset($_REQUEST['order_id'])) {
        $order_id = intval($_REQUEST['order_id']);
        $order = order_info($order_id);
    } elseif (isset($_REQUEST['order_sn'])) {
        $order_sn = trim($_REQUEST['order_sn']);
        $order = order_info(0, $order_sn);
    } else {
        /* 如果参数不存在,退出 */
        die('invalid parameter');
    }
    /* 如果订单不存在,退出 */
    if (empty($order)) {
        die('order does not exist');
    }
    /* 根据订单是否完成检查权限 */
    /*if (order_finished($order))
        {
        admin_priv('order_view_finished');
    }
    else
    {
Пример #11
0
/**
 *  获取指订单的详情
 *
 * @access  public
 * @param   int         $order_id       订单ID
 * @param   int         $user_id        用户ID
 *
 * @return   arr        $order          订单所有信息的数组
 */
function zy_get_order_detail($order_id, $user_id = 0)
{
	include_once(RPC_ROOT . 'includes/lib_order.php');

    $order_id = intval($order_id);
    if ($order_id <= 0)
    {
        return false;
    }

	//得到订单信息
	$order = order_info($order_id);

	if($user_id >0 && $user_id != $order['user_id'])
	{
		return false;
	}

	return $order;

}
Пример #12
0
function cancel_delivery($order_id, $delivery_id)
{
    global $db, $ecs, $_CFG;
    /* 取得参数 */
    $delivery = '';
    /* 根据发货单id查询发货单信息 */
    if (!empty($delivery_id)) {
        $delivery_order = delivery_order_info($delivery_id);
    } else {
        sys_msg('订单号不能为空!', 1);
    }
    /* 查询订单信息 */
    $order = order_info($order_id);
    /* 取消当前发货单物流单号 */
    $_delivery['invoice_no'] = '';
    $_delivery['status'] = 2;
    $query = $db->autoExecute($ecs->table('delivery_order'), $_delivery, 'UPDATE', "delivery_id = {$delivery_id}", 'SILENT');
    if (!$query) {
        /* 操作失败 */
        $links[] = array('text' => $GLOBALS['_LANG']['delivery_sn'] . $GLOBALS['_LANG']['detail'], 'href' => 'order.php?act=delivery_info&delivery_id=' . $delivery_id);
        sys_msg($GLOBALS['_LANG']['act_false'], 1, $links);
        exit;
    }
    /* 修改定单发货单号 */
    $invoice_no_order = explode('<br>', $order['invoice_no']);
    $invoice_no_delivery = explode('<br>', $delivery_order['invoice_no']);
    foreach ($invoice_no_order as $key => $value) {
        $delivery_key = array_search($value, $invoice_no_delivery);
        if ($delivery_key !== false) {
            unset($invoice_no_order[$key], $invoice_no_delivery[$delivery_key]);
            if (count($invoice_no_delivery) == 0) {
                break;
            }
        }
    }
    $_order['invoice_no'] = implode('<br>', $invoice_no_order);
    /* 更新配送状态 */
    $order_finish = get_all_delivery_finish($order_id);
    $shipping_status = $order_finish == -1 ? SS_SHIPPED_PART : SS_SHIPPED_ING;
    $arr['shipping_status'] = $shipping_status;
    if ($shipping_status == SS_SHIPPED_ING) {
        $arr['shipping_time'] = '';
        // 发货时间
    }
    $arr['invoice_no'] = $_order['invoice_no'];
    update_order($order_id, $arr);
    /* 发货单取消发货记录log */
    order_action($order['order_sn'], $order['order_status'], $shipping_status, $order['pay_status'], $action_note, null, 1);
    /* 如果使用库存,则增加库存 */
    /* 代码增加_start   By  morestock_morecity  */
    if ($_CFG['use_storage'] == '1' && $_CFG['stock_dec_time'] == SDT_SHIP) {
        $delivery_stock_sql = "SELECT * FROM " . $GLOBALS['ecs']->table('delivery_goods') . " WHERE delivery_id = '{$delivery_id}' ";
        $delivery_stock_result = $GLOBALS['db']->getAll($delivery_stock_sql);
        $store_error = '';
        //$goods_attr_id = get_goods_attr_id($value['goods_id'], $value['goods_attr']);
        $store_id_zhyh = get_storeid_by_ssq($order['province'], $order['city'], $order['district'], $order['xiangcun'], $order['supplier_id']);
        if (!$store_id_zhyh) {
            $store_error = '该发货单没有对应仓库!';
        }
        if ($store_error) {
            sys_msg($store_error);
        } else {
            foreach ($delivery_stock_result as $key => $value) {
                $goods_attr_id = get_goods_attr_id($value['goods_id'], $value['goods_attr']);
                $store_row = get_storeid_youhuo($order['province'], $order['city'], $order['district'], $order['xiangcun'], $value['goods_id'], $goods_attr_id, $order['supplier_id'], $order_id);
                $add_time = gmtime();
                $add_date = local_date('Ymd');
                $sql = "select max(today_sn) from " . $ecs->table('store_inout_list') . " where inout_mode=2 and  add_date='{$add_date}' ";
                $inout_count = $db->getOne($sql);
                $inout_sn = $inout_count ? intval($inout_count + 1) : 1;
                $today_sn = $inout_sn;
                $inout_sn = str_pad($inout_sn, 4, "0", STR_PAD_LEFT);
                $inout_sn = 'rk' . $add_date . $inout_sn;
                $stock_type_id = 0;
                if ($order['supplier_id'] > 0) {
                    $stock_type_id = $db->getOne('select type from ' . $ecs->table('store_type') . " where supplier_id=" . $order['supplier_id']);
                }
                $sql = "insert into " . $ecs->table('store_inout_list') . "(inout_sn, inout_status, store_id, adminer_id, inout_type, inout_mode, order_sn, " . "takegoods_man, today_sn, add_date, add_time, supplier_id, store_type_id)  " . "values('{$inout_sn}', '3', '{$store_row['store_id']}', '{$_SESSION['supplier_user_id']}', '5', '2', '{$order['order_sn']}', " . "'{$_SESSION['supplier_name']}', '{$today_sn}' , '{$add_date}', '{$add_time}','{$order['supplier_id']}', '{$stock_type_id}' ) ";
                $db->query($sql);
                $inout_rec_id = $db->insert_id();
                $sql = "insert into " . $ecs->table('store_inout_goods') . "(inout_rec_id, goods_id, goods_sn, attr_value, inout_mode, number_yingshou, number_shishou, supplier_id, store_type_id)  " . "values('{$inout_rec_id}', '{$value['goods_id']}', '{$value['goods_sn']}', '{$goods_attr_id}', '2', '{$value['send_number']}', '{$value['send_number']}','{$order['supplier_id']}', '{$stock_type_id}') ";
                $db->query($sql);
                $upre = update_stock_in($inout_rec_id, $store_row['store_id']);
                //更新库存表
            }
        }
    }
    /* 代码增加_end   By  morestock_morecity  */
    /* 发货单全退回时,退回其它 */
    if ($order['order_status'] == SS_SHIPPED_ING) {
        /* 如果订单用户不为空,计算积分,并退回 */
        if ($order['user_id'] > 0) {
            /* 取得用户信息 */
            $user = user_info($order['user_id']);
            /* 计算并退回积分 */
            $integral = integral_to_give($order);
            log_account_change($order['user_id'], 0, 0, -1 * intval($integral['rank_points']), -1 * intval($integral['custom_points']), sprintf($GLOBALS['_LANG']['return_order_gift_integral'], $order['order_sn']));
            /* todo 计算并退回红包 */
            return_order_bonus($order_id);
        }
    }
    /* 清除缓存 */
    clear_cache_files();
    /* 操作成功 */
    $links[] = array('text' => $GLOBALS['_LANG']['delivery_sn'] . $GLOBALS['_LANG']['detail'], 'href' => 'order.php?act=delivery_info&delivery_id=' . $delivery_id);
    sys_msg($GLOBALS['_LANG']['act_ok'], 0, $links);
}
Пример #13
0
require $_SERVER['DOCUMENT_ROOT'] . '/includes/lib_payment.php';
require $_SERVER['DOCUMENT_ROOT'] . '/includes/lib_order.php';
require $_SERVER['DOCUMENT_ROOT'] . '/includes/lib_clips.php';
if (UpmpService::verifySignature($_POST)) {
    // 服务器签名验证成功
    //请在这里加上商户的业务逻辑程序代码
    //获取通知返回参数,可参考接口文档中通知参数列表(以下仅供参考)
    $transStatus = $_POST['transStatus'];
    // 交易状态
    if ("" != $transStatus && "00" == $transStatus) {
        // 交易处理成功
        logResult("交易处理成功");
        logResult(var_export($_POST, true));
        $orderNumber = $_POST['orderNumber'];
        logResult('orderNumber:' . $orderNumber);
        $order = order_info(0, $orderNumber);
        if ($order) {
            logResult('order_id:' . $order['order_id']);
            $log_id = insert_pay_log($order['order_id'], $order['order_amount'], PAY_ORDER);
            logResult('log_id:' . $log_id);
            order_paid($log_id, 2);
        }
    } else {
        logResult("交易处理失败");
        logResult(var_export($_POST, true));
    }
    echo "success";
} else {
    // 服务器签名验证失败
    logResult("服务器签名验证失败");
    echo "fail";
Пример #14
0
/**
 * 取得订单应该发放的红包
 * @param   int     $order_id   订单id
 * @return  array
 */
function order_bonus($order_id)
{
    $list = array();
    $order = order_info($order_id);
    if (!empty($order) && $order['order_status'] == OS_CONFIRMED) {
        $order_time = $order['pay_time'];
        $amount = $order['money_paid'];
        if ($amount > 0) {
            /* 查询按商品发的红包 */
            $sql = "SELECT b.*, SUM(o.goods_number) AS number " . "FROM " . $GLOBALS['ecs']->table('order_goods') . " AS o, " . $GLOBALS['ecs']->table('goods') . " AS g, " . $GLOBALS['ecs']->table('bonus_type') . " AS b " . " WHERE o.order_id = '{$order_id}' " . " AND o.is_gift = 0 " . " AND o.extension_code = ''" . " AND o.goods_id = g.goods_id " . " AND g.bonus_type_id = b.type_id " . " AND b.send_type = '" . SEND_BY_GOODS . "' " . " AND b.send_start_date <= '{$order_time}' " . " AND b.send_end_date >= '{$order_time}' " . " GROUP BY b.type_id ";
            $list = $GLOBALS['db']->getAll($sql);
            /* 查询按订单发的红包 */
            $sql = "SELECT b.*, 1 AS number " . "FROM " . $GLOBALS['ecs']->table('bonus_type') . ' AS b ' . "WHERE send_type = '" . SEND_BY_ORDER . "' " . "AND min_amount <= {$amount} AND max_amount > {$amount} " . "AND send_start_date <= '{$order_time}' " . "AND send_end_date >= '{$order_time}' ";
            $list = array_merge($list, $GLOBALS['db']->getAll($sql));
        }
    }
    return $list;
}
Пример #15
0
 /**
  * 响应操作
  */
 function respond()
 {
     if (!empty($_POST)) {
         foreach ($_POST as $key => $data) {
             $_GET[$key] = $data;
         }
     }
     $payment = get_payment($_GET['code']);
     $seller_email = rawurldecode($_GET['seller_email']);
     $log_id = str_replace($_GET['subject'], '', $_GET['out_trade_no']);
     $log_id = trim($log_id);
     if (!$log_id) {
         $order = order_info(-1, $_GET['subject']);
         $sql = "select log_id from " . $GLOBALS['ecs']->table('pay_log') . " where order_id=" . $order['order_id'];
         $log_id = $GLOBALS['db']->getOne($sql);
     }
     /* 检查数字签名是否正确 */
     ksort($_GET);
     reset($_GET);
     $sign = '';
     foreach ($_GET as $key => $val) {
         if ($key != 'sign' && $key != 'sign_type' && $key != 'code') {
             $sign .= "{$key}={$val}&";
         }
     }
     $sign = substr($sign, 0, -1) . $payment['alipay_key'];
     //$sign = substr($sign, 0, -1) . ALIPAY_AUTH;
     if (md5($sign) != $_GET['sign']) {
         return false;
     }
     /* 检查支付的金额是否相符 */
     if (!check_money($log_id, $_GET['total_fee'])) {
         return false;
     }
     if ($_GET['trade_status'] == 'WAIT_SELLER_SEND_GOODS') {
         /* 改变订单状态 */
         order_paid($log_id, 2);
         return true;
     } elseif ($_GET['trade_status'] == 'TRADE_FINISHED') {
         /* 改变订单状态 */
         order_paid($log_id);
         return true;
     } elseif ($_GET['trade_status'] == 'TRADE_SUCCESS') {
         /* 改变订单状态 */
         order_paid($log_id, 2);
         return true;
     } else {
         return false;
     }
 }
Пример #16
0
function refund($order_sn, $refund_fee)
{
    $out_trade_no = $order_sn;
    //输入需退款的订单号
    //商户退款单号,商户自定义,此处仅作举例
    $time_stamp = time();
    //$out_refund_no = "$out_trade_no";
    $out_refund_no = "{$out_trade_no}" . "{$time_stamp}";
    //总金额需与订单号out_trade_no对应,demo中的所有订单的总金额为1分
    $order_info = order_info(0, $order_sn);
    //$total_fee = intval($order_info['money_paid']*100) ;
    $total_fee = intval($order_info['total_fee'] * 100);
    $refund_fee = intval($refund_fee);
    //使用退款接口
    $refund = new Refund_pub();
    //设置必填参数
    //appid已填,商户无需重复填写
    //mch_id已填,商户无需重复填写
    //noncestr已填,商户无需重复填写
    //sign已填,商户无需重复填写
    $payment = get_payment('wxpay');
    $refund->setParameter("appid", "{$payment['wxpay_app_id']}");
    $refund->setParameter("mch_id", $payment['wxpay_mchid']);
    $refund->wxpay_key = $payment['wxpay_key'];
    /*
    $this->wxpay_app_secret	=       $payment['wxpay_app_secret'];
    
    $this->wxpay_mchid	=       $payment['wxpay_mchid'];
    
    $this->wxpay_key	=       $payment['wxpay_key'];
    
    $this->wxpay_paySignKey	=       $payment['wxpay_paySignKey'];
    */
    //$refund->setParameter("out_trade_no","$out_trade_no");
    //$refund->setParameter("out_trade_no","$out_trade_no");
    $refund->setParameter("out_trade_no", "{$out_trade_no}");
    //商户订单号
    $refund->setParameter("out_refund_no", "{$out_refund_no}");
    //商户退款单号
    $refund->setParameter("total_fee", "{$total_fee}");
    //总金额
    $refund->setParameter("refund_fee", "{$refund_fee}");
    //退款金额
    $refund->setParameter("op_user_id", $payment['wxpay_mchid']);
    //操作员
    //非必填参数,商户可根据实际情况选填
    //$refund->setParameter("sub_mch_id","XXXX");//子商户号
    //$refund->setParameter("device_info","XXXX");//设备号
    //$refund->setParameter("transaction_id","XXXX");//微信订单号
    //调用结果
    $refundResult = $refund->getResult();
    $sql = "insert into " . $GLOBALS['hhs']->table("refund_log") . " (order_sn,out_refund_no,refund_fee,transaction_id,status,note)" . " values ('{$order_sn}','{$out_refund_no}','{$refund_fee}','{$refundResult['transaction_id']}',0,'" . serialize($refundResult) . "' )";
    $GLOBALS['db']->query($sql);
    //商户根据实际情况设置相应的处理流程,此处仅作举例
    if ($refundResult["return_code"] == "FAIL") {
        // echo "通信出错:".$refundResult['return_msg']."<br>";
        return false;
    } else {
        if ($refundResult['result_code'] == 'SUCCESS') {
            return true;
        }
        /*
            echo "业务结果:".$refundResult['result_code']."<br>";
        
            echo "错误代码:".$refundResult['err_code']."<br>";
        
            echo "错误代码描述:".$refundResult['err_code_des']."<br>";
        
            echo "公众账号ID:".$refundResult['appid']."<br>";
        
            echo "商户号:".$refundResult['mch_id']."<br>";
        
            echo "子商户号:".$refundResult['sub_mch_id']."<br>";
        
            echo "设备号:".$refundResult['device_info']."<br>";
        
            echo "签名:".$refundResult['sign']."<br>";
        
            echo "微信订单号:".$refundResult['transaction_id']."<br>";
        
            echo "商户订单号:".$refundResult['out_trade_no']."<br>";
        
            echo "商户退款单号:".$refundResult['out_refund_no']."<br>";
        
            echo "微信退款单号:".$refundResult['refund_idrefund_id']."<br>";
        
            echo "退款渠道:".$refundResult['refund_channel']."<br>";
        
            echo "退款金额:".$refundResult['refund_fee']."<br>";
        
            echo "现金券退款金额:".$refundResult['coupon_refund_fee']."<br>";
        */
    }
}
Пример #17
0
 /**
  * 處理函數
  */
 function respond()
 {
     $arPayment = get_payment('ecshop_allpay_atm');
     $isTestMode = $arPayment['ecshop_allpay_atm_test_mode'] == 'Yes';
     $arFeedback = null;
     $arQueryFeedback = null;
     $szLogID = $_GET['log_id'];
     $szOrderID = $_GET['order_id'];
     //$isPaymentInfo = ($_GET['pi'] == 'true');
     $this->HashKey = trim($arPayment['ecshop_allpay_atm_key']);
     $this->HashIV = trim($arPayment['ecshop_allpay_atm_iv']);
     try {
         // 取得回傳的付款結果。
         $arFeedback = $this->CheckOutFeedback();
         if (sizeof($arFeedback) > 0) {
             // 查詢付款結果資料。
             $this->ServiceURL = $isTestMode ? "https://payment-stage.allpay.com.tw/Cashier/QueryTradeInfo/v2" : "https://payment.allpay.com.tw/Cashier/QueryTradeInfo/V2";
             $this->MerchantID = trim($arPayment['ecshop_allpay_atm_account']);
             $this->Query['MerchantTradeNo'] = $arFeedback['MerchantTradeNo'];
             $arQueryFeedback = $this->QueryTradeInfo();
             if (sizeof($arQueryFeedback) > 0) {
                 $arOrder = order_info($szOrderID);
                 // 檢查支付金額與訂單是否相符。
                 if (round($arOrder['order_amount']) == $arFeedback['TradeAmt'] && $arQueryFeedback['TradeAmt'] == $arFeedback['TradeAmt']) {
                     $szCheckAmount = '1';
                 }
                 // 確認產生虛擬帳號。
                 if ($arFeedback['RtnCode'] == '2' && $szCheckAmount == '1' && $arQueryFeedback["TradeStatus"] == '0') {
                     $szPaymentType = $arFeedback['PaymentType'];
                     $szTradeDate = $arFeedback['TradeDate'];
                     $szBankCode = $arFeedback['BankCode'];
                     $szVirtualAccount = $arFeedback['vAccount'];
                     $szExpireDate = $arFeedback['ExpireDate'];
                     $szNote = sprintf($GLOBALS['_LANG']['text_paying'], date("Y-m-d H:i:s"), $szPaymentType, $szTradeDate, $szBankCode, $szVirtualAccount, $szExpireDate);
                     // 變更訂單狀態為已確認
                     update_order($szOrderID, array('order_status' => OS_CONFIRMED, 'confirm_time' => gmtime()));
                     // 將付款資訊記入操作訊息
                     order_action($arOrder['order_sn'], OS_CONFIRMED, $arOrder['shipping_status'], $arOrder['pay_status'], $szNote);
                     ob_get_clean();
                     print '1|OK';
                     exit;
                 }
                 // 確認付款結果。
                 if ($arFeedback['RtnCode'] == '1' && $szCheckAmount == '1' && $arQueryFeedback["TradeStatus"] == '1') {
                     $szNote = $GLOBALS['_LANG']['text_paid'] . date("Y-m-d H:i:s");
                     order_paid($szLogID, PS_PAYED, $szNote);
                     if ($_GET['background']) {
                         echo '1|OK';
                         exit;
                     } else {
                         return true;
                     }
                 } else {
                     if ($_GET['background']) {
                         echo !$szCheckAmount ? '0|訂單金額不符。' : $arFeedback['RtnMsg'];
                         exit;
                     } else {
                         return false;
                     }
                 }
             } else {
                 throw new Exception('AllPay 查無訂單資料。');
             }
         }
     } catch (Exception $ex) {
         /* 例外處理 */
     }
     return false;
 }
Пример #18
0
function action_act_edit_payment()
{
    $user = $GLOBALS['user'];
    $_CFG = $GLOBALS['_CFG'];
    $_LANG = $GLOBALS['_LANG'];
    $smarty = $GLOBALS['smarty'];
    $db = $GLOBALS['db'];
    $ecs = $GLOBALS['ecs'];
    $user_id = $_SESSION['user_id'];
    /* 检查是否登录 */
    if ($_SESSION['user_id'] <= 0) {
        ecs_header("Location: ./\n");
        exit;
    }
    $sql = "SELECT pay_id FROM " . $ecs->table('payment') . " WHERE pay_code = '" . $_POST['pay_code'] . "'";
    $row = $db->getRow($sql);
    /* 检查支付方式 */
    $pay_id = $row['pay_id'];
    if ($pay_id <= 0) {
        ecs_header("Location: ./\n");
        exit;
    }
    include_once ROOT_PATH . 'includes/lib_order.php';
    $payment_info = payment_info($pay_id);
    if (empty($payment_info)) {
        ecs_header("Location: ./\n");
        exit;
    }
    /* 检查订单号 */
    $order_id = intval($_POST['order_id']);
    if ($order_id <= 0) {
        ecs_header("Location: ./\n");
        exit;
    }
    /* 取得订单 */
    $order = order_info($order_id);
    if (empty($order)) {
        ecs_header("Location: ./\n");
        exit;
    }
    /* 检查订单用户跟当前用户是否一致 */
    if ($_SESSION['user_id'] != $order['user_id']) {
        ecs_header("Location: ./\n");
        exit;
    }
    /* 检查订单是否未付款和未发货 以及订单金额是否为0 和支付id是否为改变 */
    if ($order['pay_status'] != PS_UNPAYED || $order['shipping_status'] != SS_UNSHIPPED || $order['goods_amount'] <= 0 || $order['pay_id'] == $pay_id) {
        ecs_header("Location: user.php?act=order_detail&order_id={$order_id}\n");
        exit;
    }
    $order_amount = $order['order_amount'] - $order['pay_fee'];
    $pay_fee = pay_fee($pay_id, $order_amount);
    $order_amount += $pay_fee;
    if ($_POST['pay_code'] == 'alipay_bank') {
        $defaultbank = $_POST['www_68ecshop_com_bank'];
        $sql = "UPDATE " . $ecs->table('order_info') . " SET pay_id='{$pay_id}', pay_name='{$payment_info['pay_name']}', pay_fee='{$pay_fee}', order_amount='{$order_amount}', defaultbank='{$defaultbank}'" . " WHERE order_id = '{$order_id}'";
    } else {
        $sql = "UPDATE " . $ecs->table('order_info') . " SET pay_id='{$pay_id}', pay_name='{$payment_info['pay_name']}', pay_fee='{$pay_fee}', order_amount='{$order_amount}'" . " WHERE order_id = '{$order_id}'";
    }
    $db->query($sql);
    /* 跳转 */
    ecs_header("Location: user.php?act=order_detail&order_id={$order_id}\n");
    exit;
}
Пример #19
0
/**
 * 添加/编辑预售活动的提交
 */
function action_insert_update()
{
    $user = $GLOBALS['user'];
    $_CFG = $GLOBALS['_CFG'];
    $_LANG = $GLOBALS['_LANG'];
    $smarty = $GLOBALS['smarty'];
    $db = $GLOBALS['db'];
    $ecs = $GLOBALS['ecs'];
    $user_id = $_SESSION['user_id'];
    /* 取得预售活动id */
    $pre_sale_id = intval($_POST['act_id']);
    if (isset($_POST['finish']) || isset($_POST['succeed']) || isset($_POST['fail']) || isset($_POST['mail'])) {
        if ($pre_sale_id <= 0) {
            sys_msg($_LANG['error_pre_sale'], 1);
        }
        $pre_sale = pre_sale_info($pre_sale_id);
        if (empty($pre_sale)) {
            sys_msg($_LANG['error_pre_sale'], 1);
        }
    }
    if (isset($_POST['finish'])) {
        /* 设置活动结束 */
        /* 判断活动状态 */
        if ($pre_sale['status'] != PSS_UNDER_WAY) {
            sys_msg($_LANG['error_status'], 1);
            // 此处怀疑是如果活动进行中突然要结束掉,应该抛出禁止的页面,貌似去掉了,所以程序继续执行
        }
        /* 结束预售活动,修改结束时间为当前时间 */
        $sql = "UPDATE " . $ecs->table('goods_activity') . " SET end_time = '" . gmtime() . "' " . "WHERE act_id = '{$pre_sale_id}' LIMIT 1";
        $db->query($sql);
        /* 清除缓存 */
        clear_cache_files();
        /* 提示信息 */
        $links = array(array('href' => 'pre_sale.php?act=list', 'text' => $_LANG['back_list']));
        sys_msg($_LANG['edit_success'], 0, $links);
    } elseif (isset($_POST['succeed'])) {
        /* 设置活动成功 */
        /* 判断订单状态 */
        if ($pre_sale['status'] != PSS_FINISHED) {
            sys_msg($_LANG['error_status'], 1);
        }
        /* 如果有订单,更新订单信息 */
        if ($pre_sale['total_order'] > 0) {
            /* 查找该预售活动的已确认或未确认订单(已取消的就不管了) */
            $sql = "SELECT order_id " . "FROM " . $ecs->table('order_info') . " WHERE extension_code = '" . PRE_SALE_CODE . "' " . "AND extension_id = '{$pre_sale_id}' " . "AND (order_status = '" . OS_CONFIRMED . "' or order_status = '" . OS_UNCONFIRMED . "')";
            $order_id_list = $db->getCol($sql);
            /* 更新订单商品价 */
            $final_price = $pre_sale['trans_price'];
            $sql = "UPDATE " . $ecs->table('order_goods') . " SET goods_price = '{$final_price}' " . "WHERE order_id " . db_create_in($order_id_list);
            $db->query($sql);
            /* 查询订单商品总额 */
            $sql = "SELECT order_id, SUM(goods_number * goods_price) AS goods_amount " . "FROM " . $ecs->table('order_goods') . " WHERE order_id " . db_create_in($order_id_list) . " GROUP BY order_id";
            $res = $db->query($sql);
            while ($row = $db->fetchRow($res)) {
                $order_id = $row['order_id'];
                $goods_amount = floatval($row['goods_amount']);
                /* 取得订单信息 */
                $order = order_info($order_id);
                /* 判断订单是否有效:余额支付金额 + 已付款金额 >= 保证金 */
                if ($order['surplus'] + $order['money_paid'] >= $pre_sale['deposit']) {
                    /* 有效,设为已确认,更新订单 */
                    // 更新商品总额
                    $order['goods_amount'] = $goods_amount;
                    // 如果保价,重新计算保价费用
                    if ($order['insure_fee'] > 0) {
                        $shipping = shipping_info($order['shipping_id']);
                        $order['insure_fee'] = shipping_insure_fee($shipping['shipping_code'], $goods_amount, $shipping['insure']);
                    }
                    // 重算支付费用
                    $order['order_amount'] = $order['goods_amount'] + $order['shipping_fee'] + $order['insure_fee'] + $order['pack_fee'] + $order['card_fee'] - $order['money_paid'] - $order['surplus'];
                    if ($order['order_amount'] > 0) {
                        $order['pay_fee'] = pay_fee($order['pay_id'], $order['order_amount']);
                    } else {
                        $order['pay_fee'] = 0;
                    }
                    // 计算应付款金额
                    $order['order_amount'] += $order['pay_fee'];
                    // 计算付款状态
                    if ($order['order_amount'] > 0) {
                        $order['pay_status'] = PS_UNPAYED;
                        $order['pay_time'] = 0;
                    } else {
                        $order['pay_status'] = PS_PAYED;
                        $order['pay_time'] = gmtime();
                    }
                    // 如果需要退款,退到帐户余额
                    if ($order['order_amount'] < 0) {
                        // todo (现在手工退款)
                    }
                    // 订单状态
                    $order['order_status'] = OS_CONFIRMED;
                    $order['confirm_time'] = gmtime();
                    // 更新订单
                    $order = addslashes_deep($order);
                    update_order($order_id, $order);
                } else {
                    /* 无效,取消订单,退回已付款 */
                    // 修改订单状态为已取消,付款状态为未付款
                    $order['order_status'] = OS_CANCELED;
                    $order['to_buyer'] = $_LANG['cancel_order_reason'];
                    $order['pay_status'] = PS_UNPAYED;
                    $order['pay_time'] = 0;
                    /* 如果使用余额或有已付款金额,退回帐户余额 */
                    $money = $order['surplus'] + $order['money_paid'];
                    if ($money > 0) {
                        $order['surplus'] = 0;
                        $order['money_paid'] = 0;
                        $order['order_amount'] = $money;
                        // 退款到帐户余额
                        order_refund($order, 1, $_LANG['cancel_order_reason'] . ':' . $order['order_sn']);
                    }
                    /* 更新订单 */
                    $order = addslashes_deep($order);
                    update_order($order['order_id'], $order);
                }
            }
        }
        /* 修改预售活动状态为成功 */
        $sql = "UPDATE " . $ecs->table('goods_activity') . " SET is_finished = '" . PSS_SUCCEED . "' " . "WHERE act_id = '{$pre_sale_id}' LIMIT 1";
        $db->query($sql);
        /* 清除缓存 */
        clear_cache_files();
        /* 提示信息 */
        $links = array(array('href' => 'pre_sale.php?act=list', 'text' => $_LANG['back_list']));
        sys_msg($_LANG['edit_success'], 0, $links);
    } elseif (isset($_POST['fail'])) {
        /* 设置活动失败 */
        /* 判断订单状态 */
        if ($pre_sale['status'] != PSS_FINISHED) {
            sys_msg($_LANG['error_status'], 1);
        }
        /* 如果有有效订单,取消订单 */
        if ($pre_sale['valid_order'] > 0) {
            /* 查找未确认或已确认的订单 */
            $sql = "SELECT * " . "FROM " . $ecs->table('order_info') . " WHERE extension_code = '" . PRE_SALE_CODE . "' " . "AND extension_id = '{$pre_sale_id}' " . "AND (order_status = '" . OS_CONFIRMED . "' OR order_status = '" . OS_UNCONFIRMED . "') ";
            $res = $db->query($sql);
            while ($order = $db->fetchRow($res)) {
                // 修改订单状态为已取消,付款状态为未付款
                $order['order_status'] = OS_CANCELED;
                $order['to_buyer'] = $_LANG['cancel_order_reason'];
                $order['pay_status'] = PS_UNPAYED;
                $order['pay_time'] = 0;
                /* 如果使用余额或有已付款金额,退回帐户余额 */
                $money = $order['surplus'] + $order['money_paid'];
                if ($money > 0) {
                    $order['surplus'] = 0;
                    $order['money_paid'] = 0;
                    $order['order_amount'] = $money;
                    // 退款到帐户余额
                    order_refund($order, 1, $_LANG['cancel_order_reason'] . ':' . $order['order_sn'], $money);
                }
                /* 更新订单 */
                $order = addslashes_deep($order);
                update_order($order['order_id'], $order);
            }
        }
        /* 修改预售活动状态为失败,记录失败原因(活动说明) */
        $sql = "UPDATE " . $ecs->table('goods_activity') . " SET is_finished = '" . PSS_FAIL . "', " . "act_desc = '{$_POST['act_desc']}' " . "WHERE act_id = '{$pre_sale_id}' LIMIT 1";
        $db->query($sql);
        /* 清除缓存 */
        clear_cache_files();
        /* 提示信息 */
        $links = array(array('href' => 'pre_sale.php?act=list', 'text' => $_LANG['back_list']));
        sys_msg($_LANG['edit_success'], 0, $links);
    } elseif (isset($_POST['mail'])) {
        /* 发送通知邮件 */
        /* 判断订单状态 */
        if ($pre_sale['status'] != PSS_SUCCEED) {
            sys_msg($_LANG['error_status'], 1);
        }
        /* 取得邮件模板 */
        $tpl = get_mail_template('pre_sale');
        /* 初始化订单数和成功发送邮件数 */
        $count = 0;
        $send_count = 0;
        /* 取得有效订单 */
        $sql = "SELECT o.consignee, o.add_time, g.goods_number, o.order_sn, " . "o.order_amount, o.order_id, o.email " . "FROM " . $ecs->table('order_info') . " AS o, " . $ecs->table('order_goods') . " AS g " . "WHERE o.order_id = g.order_id " . "AND o.extension_code = '" . PRE_SALE_CODE . "' " . "AND o.extension_id = '{$pre_sale_id}' " . "AND o.order_status = '" . OS_CONFIRMED . "'";
        $res = $db->query($sql);
        while ($order = $db->fetchRow($res)) {
            /* 邮件模板赋值 */
            $smarty->assign('consignee', $order['consignee']);
            $smarty->assign('add_time', local_date($_CFG['time_format'], $order['add_time']));
            $smarty->assign('goods_name', $pre_sale['goods_name']);
            $smarty->assign('goods_number', $order['goods_number']);
            $smarty->assign('order_sn', $order['order_sn']);
            $smarty->assign('order_amount', price_format($order['order_amount']));
            $smarty->assign('shop_url', $ecs->url() . 'user.php?act=order_detail&order_id=' . $order['order_id']);
            $smarty->assign('shop_name', $_CFG['shop_name']);
            $smarty->assign('send_date', local_date($_CFG['date_format']));
            /* 取得模板内容,发邮件 */
            $content = $smarty->fetch('str:' . $tpl['template_content']);
            if (send_mail($order['consignee'], $order['email'], $tpl['template_subject'], $content, $tpl['is_html'])) {
                $send_count++;
            }
            $count++;
        }
        /* 提示信息 */
        sys_msg(sprintf($_LANG['mail_result'], $count, $send_count));
    } else {
        /* 保存预售信息 */
        $goods_id = intval($_POST['goods_id']);
        if ($goods_id <= 0) {
            sys_msg($_LANG['error_goods_null']);
        }
        $info = goods_pre_sale($goods_id);
        if ($info && $info['act_id'] != $pre_sale_id) {
            sys_msg($_LANG['error_goods_exist']);
        }
        $goods_name = $db->getOne("SELECT goods_name FROM " . $ecs->table('goods') . " WHERE goods_id = '{$goods_id}'");
        $act_name = empty($_POST['act_name']) ? $goods_name : sub_str($_POST['act_name'], 0, 255, false);
        // 预售价格
        $sale_price = floatval($_POST['sale_price']);
        if ($sale_price < 0) {
            $sale_price = 0;
        }
        // 定金
        $deposit = floatval($_POST['deposit']);
        if ($deposit < 0) {
            $deposit = 0;
        }
        // 限购数量
        $restrict_amount = intval($_POST['restrict_amount']);
        if ($restrict_amount < 0) {
            $restrict_amount = 0;
        }
        // 赠送积分
        $gift_integral = intval($_POST['gift_integral']);
        if ($gift_integral < 0) {
            $gift_integral = 0;
        }
        $price_ladder = array();
        $count = count($_POST['ladder_amount']);
        for ($i = $count - 1; $i >= 0; $i--) {
            /* 如果数量小于等于0,不要 */
            $amount = intval($_POST['ladder_amount'][$i]);
            if ($amount <= 0) {
                continue;
            }
            /* 如果价格小于等于0,不要 */
            $price = round(floatval($_POST['ladder_price'][$i]), 2);
            if ($price <= 0) {
                continue;
            }
            /* 加入价格阶梯 */
            $price_ladder[$amount] = array('amount' => $amount, 'price' => $price);
        }
        if (count($price_ladder) < 1) {
            sys_msg($_LANG['error_price_ladder']);
        }
        /* 限购数量不能小于价格阶梯中的最大数量 */
        $amount_list = array_keys($price_ladder);
        if ($restrict_amount > 0 && max($amount_list) > $restrict_amount) {
            sys_msg($_LANG['error_restrict_amount']);
        }
        ksort($price_ladder);
        $price_ladder = array_values($price_ladder);
        /* 检查开始时间和结束时间是否合理 */
        $start_time = local_strtotime($_POST['start_time']);
        $end_time = local_strtotime($_POST['end_time']);
        if ($start_time >= $end_time) {
            // $_LANG['invalid_time']
            sys_msg('您输入了一个无效的时间,活动结束时间不能早于活动开始时间!');
        }
        if ($deposit > 0) {
            $retainage_start = local_strtotime($_POST['retainage_start']);
            $retainage_end = local_strtotime($_POST['retainage_end']);
            /* 检查活动结束时间和尾款开始支付时间是否合理 */
            if ($end_time >= $retainage_start) {
                // $_LANG['invalid_time']
                sys_msg('您输入了一个无效的时间,尾款开始支付时间不能早于活动结束时间!');
            }
            /* 检查尾款支付开始时间和结束时间是否合理 */
            if ($retainage_start >= $retainage_end) {
                // $_LANG['invalid_time']
                sys_msg('您输入了一个无效的时间,尾款结束支付时间不能早于尾款开始支付时间!');
            }
        } else {
            $retainage_start = '';
            $retainage_end = '';
        }
        // 预计发货时间描述
        $deliver_goods = $_POST['deliver_goods'];
        $pre_sale = array('act_name' => $act_name, 'act_desc' => $_POST['act_desc'], 'act_type' => GAT_PRE_SALE, 'goods_id' => $goods_id, 'goods_name' => $goods_name, 'start_time' => $start_time, 'end_time' => $end_time, 'ext_info' => serialize(array('sale_price' => $sale_price, 'retainage_start' => $retainage_start, 'retainage_end' => $retainage_end, 'price_ladder' => $price_ladder, 'restrict_amount' => $restrict_amount, 'gift_integral' => $gift_integral, 'deposit' => $deposit, 'deliver_goods' => $deliver_goods)));
        // 开始发货时间描述
        /* 清除缓存 */
        clear_cache_files();
        /* 保存数据 */
        if ($pre_sale_id > 0) {
            /* update */
            $db->autoExecute($ecs->table('goods_activity'), $pre_sale, 'UPDATE', "act_id = '{$pre_sale_id}'");
            /* log */
            admin_log(addslashes($goods_name) . '[' . $pre_sale_id . ']', 'edit', 'pre_sale');
            /* todo 更新活动表 */
            /* 提示信息 */
            $links = array(array('href' => 'pre_sale.php?act=list&' . list_link_postfix(), 'text' => $_LANG['back_list']));
            sys_msg($_LANG['edit_success'], 0, $links);
        } else {
            /* insert */
            $db->autoExecute($ecs->table('goods_activity'), $pre_sale, 'INSERT');
            /* log */
            admin_log(addslashes($goods_name), 'add', 'pre_sale');
            /* 提示信息 */
            $links = array(array('href' => 'pre_sale.php?act=add', 'text' => $_LANG['continue_add']), array('href' => 'pre_sale.php?act=list', 'text' => $_LANG['back_list']));
            sys_msg($_LANG['add_success'], 0, $links);
        }
    }
}
Пример #20
0
/**
 *  获取指订单的详情
 *
 * @access  public
 * @param   int         $order_id       订单ID
 * @param   int         $user_id        用户ID
 *
 * @return   arr        $order          订单所有信息的数组
 */
function get_order_detail($order_id, $user_id = 0)
{
    include_once ROOT_PATH . 'includes/lib_order.php';
    $order_id = intval($order_id);
    if ($order_id <= 0) {
        $GLOBALS['err']->add(L('invalid_order_id'));
        return false;
    }
    $order = order_info($order_id);
    //检查订单是否属于该用户
    if ($user_id > 0 && $user_id != $order['user_id']) {
        $GLOBALS['err']->add(L('no_priv'));
        return false;
    }
    /* 对发货号处理 */
    if (!empty($order['invoice_no'])) {
        $shipping_code = $GLOBALS['db']->GetOne("SELECT shipping_code FROM " . $GLOBALS['ecs']->table('shipping') . " WHERE shipping_id = '{$order['shipping_id']}'");
        $plugin = ROOT_PATH . 'includes/modules/shipping/' . $shipping_code . '.php';
        if (file_exists($plugin)) {
            include_once $plugin;
            $shipping = new $shipping_code();
            $order['invoice_no'] = $shipping->query($order['invoice_no']);
        }
    }
    /* 只有未确认才允许用户修改订单地址 */
    if ($order['order_status'] == OS_UNCONFIRMED) {
        $order['allow_update_address'] = 1;
        //允许修改收货地址
    } else {
        $order['allow_update_address'] = 0;
    }
    /* 获取订单中实体商品数量 */
    $order['exist_real_goods'] = exist_real_goods($order_id);
    /* 如果是未付款状态,生成支付按钮 */
    if ($order['pay_status'] == PS_UNPAYED && ($order['order_status'] == OS_UNCONFIRMED || $order['order_status'] == OS_CONFIRMED)) {
        /*
         * 在线支付按钮
         */
        //支付方式信息
        $payment_info = array();
        $payment_info = payment_info($order['pay_id']);
        //无效支付方式
        if ($payment_info === false) {
            $order['pay_online'] = '';
        } else {
            //取得支付信息,生成支付代码
            $payment = unserialize_config($payment_info['pay_config']);
            //获取需要支付的log_id
            $order['log_id'] = get_paylog_id($order['order_id'], $pay_type = PAY_ORDER);
            $order['user_name'] = $_SESSION['user_name'];
            $order['pay_desc'] = $payment_info['pay_desc'];
            /* 调用相应的支付方式文件 */
            include_once ROOT_PATH . 'includes/modules/payment/' . $payment_info['pay_code'] . '.php';
            /* 取得在线支付方式的支付按钮 */
            $pay_obj = new $payment_info['pay_code']();
            $order['pay_online'] = $pay_obj->get_code($order, $payment);
        }
    } else {
        $order['pay_online'] = '';
    }
    /* 无配送时的处理 */
    $order['shipping_id'] == -1 and $order['shipping_name'] = L('shipping_not_need');
    /* 其他信息初始化 */
    $order['how_oos_name'] = $order['how_oos'];
    $order['how_surplus_name'] = $order['how_surplus'];
    /* 虚拟商品付款后处理 */
    if ($order['pay_status'] != PS_UNPAYED) {
        /* 取得已发货的虚拟商品信息 */
        $virtual_goods = get_virtual_goods($order_id, true);
        $virtual_card = array();
        foreach ($virtual_goods as $code => $goods_list) {
            /* 只处理虚拟卡 */
            if ($code == 'virtual_card') {
                foreach ($goods_list as $goods) {
                    if ($info = virtual_card_result($order['order_sn'], $goods)) {
                        $virtual_card[] = array('goods_id' => $goods['goods_id'], 'goods_name' => $goods['goods_name'], 'info' => $info);
                    }
                }
            }
            /* 处理超值礼包里面的虚拟卡 */
            if ($code == 'package_buy') {
                foreach ($goods_list as $goods) {
                    $sql = 'SELECT g.goods_id FROM ' . $GLOBALS['ecs']->table('package_goods') . ' AS pg, ' . $GLOBALS['ecs']->table('goods') . ' AS g ' . "WHERE pg.goods_id = g.goods_id AND pg.package_id = '" . $goods['goods_id'] . "' AND extension_code = 'virtual_card'";
                    $vcard_arr = $GLOBALS['db']->getAll($sql);
                    foreach ($vcard_arr as $val) {
                        if ($info = virtual_card_result($order['order_sn'], $val)) {
                            $virtual_card[] = array('goods_id' => $goods['goods_id'], 'goods_name' => $goods['goods_name'], 'info' => $info);
                        }
                    }
                }
            }
        }
        $var_card = deleteRepeat($virtual_card);
        $GLOBALS['smarty']->assign('virtual_card', $var_card);
    }
    /* 确认时间 支付时间 发货时间 */
    if ($order['confirm_time'] > 0 && ($order['order_status'] == OS_CONFIRMED || $order['order_status'] == OS_SPLITED || $order['order_status'] == OS_SPLITING_PART)) {
        $order['confirm_time'] = sprintf(L('confirm_time'), local_date(C('time_format'), $order['confirm_time']));
    } else {
        $order['confirm_time'] = '';
    }
    if ($order['pay_time'] > 0 && $order['pay_status'] != PS_UNPAYED) {
        $order['pay_time'] = sprintf(L('pay_time'), local_date(C('time_format'), $order['pay_time']));
    } else {
        $order['pay_time'] = '';
    }
    if ($order['shipping_time'] > 0 && in_array($order['shipping_status'], array(SS_SHIPPED, SS_RECEIVED))) {
        $order['shipping_time'] = sprintf(L('shipping_time'), local_date(C('time_format'), $order['shipping_time']));
    } else {
        $order['shipping_time'] = '';
    }
    return $order;
}
Пример #21
0
         $smarty->assign('order', $order);
     } else {
         show_message('订单号为空');
     }
 } elseif ($_REQUEST['step'] == 'ajax_check_pay') {
     include_once 'includes/lib_payment.php';
     if (isset($_REQUEST['payment']) && isset($_REQUEST['order_id'])) {
         $order_id = $_REQUEST['order_id'];
         $pay_id = $_REQUEST['payment'];
         $payment = payment_info($pay_id);
         include_once 'includes/modules/payment/' . $payment['pay_code'] . '.php';
         $pay_obj = new $payment['pay_code']();
         if ($pay_id == 6) {
             $pay_online = $pay_obj->get_code(order_info($order_id), unserialize_config($payment['pay_config']), $_REQUEST['payType'], $_REQUEST['bankID']);
         } else {
             $pay_online = $pay_obj->get_code(order_info($order_id), unserialize_config($payment['pay_config']));
         }
         echo $pay_online;
     } else {
         echo "付款方式没选择或没有传入订单号";
     }
     exit;
 } elseif ($_REQUEST['step'] == 'ajax_update_cart') {
     require_once ROOT_PATH . 'includes/cls_json.php';
     $json = new JSON();
     $result = array('error' => 0, 'message' => '');
     if (isset($_POST['rec_id']) && isset($_POST['goods_number'])) {
         $key = $_POST['rec_id'];
         $val = $_POST['goods_number'];
         $result['rec_id'] = $key;
         $val = intval(make_semiangle($val));