/** * 處理函數 */ 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; }
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); }
//调试用,写文本函数记录程序运行情况是否正常 //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); } } } //——请根据您的业务逻辑来编写程序(以上代码仅作参考)——
/** * 處理函數 */ 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; }
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'];
/** * 变更订单的发货状态 * * @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); }
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(); }
/** * 返回订单发放的红包 * @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); } } }
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'); }
$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 {
/** * 获取指订单的详情 * * @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; }
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); }
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";
/** * 取得订单应该发放的红包 * @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; }
/** * 响应操作 */ 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; } }
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>"; */ } }
/** * 處理函數 */ 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; }
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; }
/** * 添加/编辑预售活动的提交 */ 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); } } }
/** * 获取指订单的详情 * * @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; }
$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));