Example #1
0
 public function indexOp()
 {
     if (ob_get_level()) {
         ob_end_clean();
     }
     $logic_queue = Logic('queue');
     $worker = new QueueServer();
     $queues = $worker->scan();
     while (true) {
         $content = $worker->pop($queues, 1800);
         if (is_array($content)) {
             $method = key($content);
             $arg = current($content);
             $result = $logic_queue->{$method}($arg);
             if (!$result['state']) {
                 $this->log($result['msg'], false);
             }
             //                 echo date('Y-m-d H:i:s',time()).' '.$method."\n";
             //                 flush();
             //                 ob_flush();
         } else {
             $model = Model();
             $model->checkActive();
             unset($model);
             //                 echo date('Y-m-d H:i:s',time())."  ---\n";
             //                 flush();
             //                 ob_flush();
         }
     }
 }
Example #2
0
 public function image_uploadOp()
 {
     $logic_goods = Logic('goods');
     $result = $logic_goods->uploadGoodsImage($_POST['name'], $this->seller_info['store_id'], $this->store_grade['sg_album_limit']);
     if (!$result['state']) {
         output_error($result['msg']);
     }
     output_data(array('image_name' => $result['data']['name']));
 }
Example #3
0
 /**
  * 入列
  * @param string $key
  * @param array $value
  */
 public static function push($key, $value) {
     if (!C('queue.open')) {
         Logic('queue')->$key($value);return;
     }
     if (!is_object(self::$queuedb)) {
         self::$queuedb = new QueueDB();
     }
     return self::$queuedb->push(serialize(array($key=>$value)));
 }
Example #4
0
 /**
  * 虚拟商品购买第三步
  */
 public function buy_step3Op() {
     $logic_buy_virtual = Logic('buy_virtual');
     $_POST['order_from'] = 1;
     $result = $logic_buy_virtual->buyStep3($_POST,$_SESSION['member_id']);
     if (!$result['state']) {
         showMessage($result['msg'], 'index.php', 'html', 'error');
     }
     //转向到商城支付页面
     redirect('index.php?act=buy_virtual&op=pay&order_id='.$result['data']['order_id']);
 }
Example #5
0
 /**
  * 取消订单
  * @param array $order_info
  * @param string $role 操作角色 buyer、seller、admin、system 分别代表买家、商家、管理员、系统
  * @param string $msg 操作备注
  * @param boolean $if_queue 是否使用队列
  * @return array
  */
 public function changeOrderStateCancel($order_info, $role, $msg, $if_queue = true)
 {
     try {
         $model_vr_order = Model('vr_order');
         $model_vr_order->beginTransaction();
         //库存、销量变更
         if ($if_queue) {
             QueueClient::push('cancelOrderUpdateStorage', array($order_info['goods_id'] => $order_info['goods_num']));
         } else {
             Logic('queue')->cancelOrderUpdateStorage(array($order_info['goods_id'] => $order_info['goods_num']));
         }
         $model_pd = Model('predeposit');
         //解冻充值卡
         $pd_amount = floatval($order_info['rcb_amount']);
         if ($pd_amount > 0) {
             $data_pd = array();
             $data_pd['member_id'] = $order_info['buyer_id'];
             $data_pd['member_name'] = $order_info['buyer_name'];
             $data_pd['amount'] = $pd_amount;
             $data_pd['order_sn'] = $order_info['order_sn'];
             $model_pd->changeRcb('order_cancel', $data_pd);
         }
         //解冻预存款
         $pd_amount = floatval($order_info['pd_amount']);
         if ($pd_amount > 0) {
             $data_pd = array();
             $data_pd['member_id'] = $order_info['buyer_id'];
             $data_pd['member_name'] = $order_info['buyer_name'];
             $data_pd['amount'] = $pd_amount;
             $data_pd['order_sn'] = $order_info['order_sn'];
             $model_pd->changePd('order_cancel', $data_pd);
         }
         //更新订单信息
         $update_order = array('order_state' => ORDER_STATE_CANCEL, 'pd_amount' => 0, 'close_time' => TIMESTAMP, 'close_reason' => $msg);
         $update = $model_vr_order->editOrder($update_order, array('order_id' => $order_info['order_id']));
         if (!$update) {
             throw new Exception('保存失败');
         }
         $model_vr_order->commit();
         return callback(true, '更新成功');
     } catch (Exception $e) {
         $model_vr_order->rollback();
         return callback(false, $e->getMessage());
     }
 }
Example #6
0
 /**
  * 取消订单
  */
 public function order_cancelOp()
 {
     $model_vr_order = Model('vr_order');
     $condition = array();
     $condition['order_id'] = intval($_POST['order_id']);
     $condition['buyer_id'] = $this->member_info['member_id'];
     $order_info = $model_vr_order->getOrderInfo($condition);
     $if_allow = $model_vr_order->getOrderOperateState('buyer_cancel', $order_info);
     if (!$if_allow) {
         output_data('无权操作');
     }
     $logic_vr_order = Logic('vr_order');
     $result = $logic_vr_order->changeOrderStateCancel($order_info, 'buyer', '其它原因');
     if (!$result['state']) {
         output_data($result['msg']);
     } else {
         output_data('1');
     }
 }
Example #7
0
 /**
  * 虚拟订单支付
  */
 public function vr_payOp()
 {
     $order_sn = $_GET['pay_sn'];
     $model_mb_payment = Model('mb_payment');
     $logic_payment = Logic('payment');
     $condition = array();
     $condition['payment_code'] = $this->payment_code;
     $mb_payment_info = $model_mb_payment->getMbPaymentOpenInfo($condition);
     if (!$mb_payment_info) {
         output_error('系统不支持选定的支付方式');
     }
     //重新计算所需支付金额
     $result = $logic_payment->getVrOrderInfo($order_sn, $this->member_info['member_id']);
     if (!$result['state']) {
         output_error($result['msg']);
     }
     //第三方API支付
     $this->_api_pay($result['data'], $mb_payment_info);
 }
Example #8
0
 /**
  * 虚拟订单第三步,产生订单
  * POST
  * 传入:goods_id:商品ID,quantity:购买数量,buyer_phone:接收手机,buyer_msg:下单留言,pd_pay:是否使用预存款支付0否1是,password:支付密码
  */
 public function buy_step3Op()
 {
     $logic_buy_virtual = Logic('buy_virtual');
     $input = array();
     $input['goods_id'] = $_POST['goods_id'];
     $input['quantity'] = $_POST['quantity'];
     $input['buyer_phone'] = $_POST['buyer_phone'];
     $input['buyer_msg'] = $_POST['buyer_msg'];
     //支付密码
     $input['password'] = $_POST['password'];
     //是否使用充值卡支付0是/1否
     $input['rcb_pay'] = intval($_POST['rcb_pay']);
     //是否使用预存款支付0是/1否
     $input['pd_pay'] = intval($_POST['pd_pay']);
     $input['order_from'] = 2;
     $result = $logic_buy_virtual->buyStep3($input, $this->member_info['member_id']);
     if (!$result['state']) {
         output_error($result['msg']);
     } else {
         output_data($result['data']);
     }
 }
Example #9
0
 private function dowxpay($openid, $order_sn)
 {
     $order_type = substr($order_sn, 0, 1);
     $pay_sn = substr($order_sn, 1);
     $model_mb_payment = Model('mb_payment');
     $logic_payment = Logic('payment');
     $condition = array();
     $condition['payment_code'] = $this->payment_code;
     $mb_payment_info = $model_mb_payment->getMbPaymentOpenInfo($condition);
     if ($order_type == 'r') {
         $result = $logic_payment->getRealOrderInfo($pay_sn);
     } else {
         $result = $logic_payment->getVrOrderInfo($pay_sn);
     }
     $total_fee = $result['data']['api_pay_amount'];
     $this->parameters['appid'] = $this->appid;
     $this->parameters['mch_id'] = $this->mch_id;
     $this->parameters['nonce_str'] = $this->createNoncestr(32);
     //$this->parameters['sign']='';
     $this->parameters['body'] = $order_sn;
     $this->parameters['attach'] = $order_type . '|' . $pay_sn;
     $this->parameters['out_trade_no'] = $pay_sn;
     $this->parameters['fee_type'] = 'CNY';
     $this->parameters['total_fee'] = $total_fee * 100;
     $this->parameters['spbill_create_ip'] = $_SERVER["REMOTE_ADDR"];
     $this->parameters['notify_url'] = $this->notify_url;
     $this->parameters['trade_type'] = 'JSAPI';
     $this->parameters['openid'] = $openid;
     $prepay_id = $this->getPrepayId();
     $this->setPrepayId($prepay_id);
     $jsApiParameters = $this->getParameters();
     //return $jsApiParameters;
     $html = $this->showpay($jsApiParameters);
     //file_put_contents('html',$html);
     echo $html;
 }
Example #10
0
 /**
  * 发货
  */
 public function sendOp()
 {
     $order_id = intval($_GET['order_id']);
     if ($order_id <= 0) {
         showMessage(Language::get('wrong_argument'), '', 'html', 'error');
     }
     $model_order = Model('order');
     $condition = array();
     $condition['order_id'] = $order_id;
     $condition['store_id'] = $_SESSION['store_id'];
     $order_info = $model_order->getOrderInfo($condition, array('order_common', 'order_goods'));
     $if_allow_send = intval($order_info['lock_state']) || !in_array($order_info['order_state'], array(ORDER_STATE_PAY, ORDER_STATE_SEND));
     if ($if_allow_send) {
         showMessage(Language::get('wrong_argument'), '', 'html', 'error');
     }
     if (chksubmit()) {
         $logic_order = Logic('order');
         $_POST['reciver_info'] = $this->_get_reciver_info();
         $result = $logic_order->changeOrderSend($order_info, 'seller', $_SESSION['member_name'], $_POST);
         if (!$result['state']) {
             showMessage($result['msg'], '', 'html', 'error');
         } else {
             showDialog($result['msg'], $_POST['ref_url'], 'succ');
         }
     }
     Tpl::output('order_info', $order_info);
     //取发货地址
     $model_daddress = Model('daddress');
     if ($order_info['extend_order_common']['daddress_id'] > 0) {
         $daddress_info = $model_daddress->getAddressInfo(array('address_id' => $order_info['extend_order_common']['daddress_id']));
     } else {
         //取默认地址
         $daddress_info = $model_daddress->getAddressList(array('store_id' => $_SESSION['store_id']), '*', 'is_default desc', 1);
         $daddress_info = $daddress_info[0];
         //写入发货地址编号
         $this->_edit_order_daddress($daddress_info['address_id'], $order_id);
     }
     Tpl::output('daddress_info', $daddress_info);
     $express_list = rkcache('express', true);
     //如果是自提订单,只保留自提快递公司
     if (isset($order_info['extend_order_common']['reciver_info']['dlyp'])) {
         foreach ($express_list as $k => $v) {
             if ($v['e_zt_state'] == '0') {
                 unset($express_list[$k]);
             }
         }
         $my_express_list = array_keys($express_list);
     } else {
         //快递公司
         $my_express_list = Model()->table('store_extend')->getfby_store_id($_SESSION['store_id'], 'express');
         if (!empty($my_express_list)) {
             $my_express_list = explode(',', $my_express_list);
         }
     }
     Tpl::output('my_express_list', $my_express_list);
     Tpl::output('express_list', $express_list);
     Tpl::showpage('store_deliver.send');
 }
Example #11
0
 /**
  * 推荐组合加入购物车
  */
 public function add_combOp()
 {
     if (!preg_match('/^[\\d|]+$/', $_GET['goods_ids'])) {
         exit(json_encode(array('state' => 'false')));
     }
     $model_goods = Model('goods');
     $logic_buy_1 = Logic('buy_1');
     if (!$_SESSION['member_id']) {
         exit(json_encode(array('msg' => '请先登录', 'UTF-8')));
     }
     $goods_id_array = explode('|', $_GET['goods_ids']);
     $model_goods = Model('goods');
     $goods_list = $model_goods->getGoodsOnlineListAndPromotionByIdArray($goods_id_array);
     foreach ($goods_list as $goods) {
         $this->_check_goods($goods, 1);
     }
     //抢购
     $logic_buy_1->getGroupbuyCartList($goods_list);
     //限时折扣
     $logic_buy_1->getXianshiCartList($goods_list);
     $model_cart = Model('cart');
     foreach ($goods_list as $goods_info) {
         $cart_info = array();
         $cart_info['store_id'] = $goods_info['store_id'];
         $cart_info['goods_id'] = $goods_info['goods_id'];
         $cart_info['goods_name'] = $goods_info['goods_name'];
         $cart_info['goods_price'] = $goods_info['goods_price'];
         $cart_info['goods_num'] = 1;
         $cart_info['goods_image'] = $goods_info['goods_image'];
         $cart_info['store_name'] = $goods_info['store_name'];
         $quantity = 1;
         //已登录状态,存入数据库,未登录时,存入COOKIE
         if ($_SESSION['member_id']) {
             $save_type = 'db';
             $cart_info['buyer_id'] = $_SESSION['member_id'];
         } else {
             $save_type = 'cookie';
         }
         $insert = $model_cart->addCart($cart_info, $save_type, $quantity);
         if ($insert) {
             //购物车商品种数记入cookie
             setNcCookie('cart_goods_num', $model_cart->cart_goods_num, 2 * 3600);
             $data = array('state' => 'true', 'num' => $model_cart->cart_goods_num, 'amount' => ncPriceFormat($model_cart->cart_all_price));
         } else {
             $data = array('state' => 'false');
             exit(json_encode($data));
         }
     }
     exit(json_encode($data));
 }
Example #12
0
 /**
  * 系统收到货款
  * @param unknown $order_info
  * @throws Exception
  */
 private function _order_receive_pay($order_info, $post)
 {
     $model_vr_order = Model('vr_order');
     $logic_vr_order = Logic('vr_order');
     $if_allow = $model_vr_order->getOrderOperateState('system_receive_pay', $order_info);
     if (!$if_allow) {
         return callback(false, '无权操作');
     }
     if (!chksubmit()) {
         Tpl::output('order_info', $order_info);
         //显示支付接口
         $payment_list = Model('payment')->getPaymentOpenList();
         //去掉预存款和货到付款
         foreach ($payment_list as $key => $value) {
             if ($value['payment_code'] == 'predeposit' || $value['payment_code'] == 'offline') {
                 unset($payment_list[$key]);
             }
         }
         Tpl::output('payment_list', $payment_list);
         Tpl::showpage('order.receive_pay');
         exit;
     } else {
         $this->log('将虚拟订单改为已收款状态,' . L('order_number') . ':' . $order_info['order_sn'], 1);
         return $logic_vr_order->changeOrderStatePay($order_info, 'system', $post);
     }
 }
Example #13
0
 /**
  * 取消订单
  * @param array $order_info
  * @param string $role 操作角色 buyer、seller、admin、system 分别代表买家、商家、管理员、系统
  * @param string $user 操作人
  * @param string $msg 操作备注
  * @param boolean $if_update_account 是否变更账户金额
  * @param boolean $if_queue 是否使用队列
  * @return array
  */
 public function changeOrderStateCancel($order_info, $role, $user = '', $msg = '', $if_update_account = true, $if_quque = true)
 {
     try {
         $model_order = Model('order');
         $model_order->beginTransaction();
         $order_id = $order_info['order_id'];
         //库存销量变更
         $goods_list = $model_order->getOrderGoodsList(array('order_id' => $order_id));
         $data = array();
         foreach ($goods_list as $goods) {
             $data[$goods['goods_id']] = $goods['goods_num'];
         }
         if ($if_quque) {
             QueueClient::push('cancelOrderUpdateStorage', $data);
         } else {
             Logic('queue')->cancelOrderUpdateStorage($data);
         }
         if ($if_update_account) {
             $model_pd = Model('predeposit');
             //解冻充值卡
             $rcb_amount = floatval($order_info['rcb_amount']);
             if ($rcb_amount > 0) {
                 $data_pd = array();
                 $data_pd['member_id'] = $order_info['buyer_id'];
                 $data_pd['member_name'] = $order_info['buyer_name'];
                 $data_pd['amount'] = $rcb_amount;
                 $data_pd['order_sn'] = $order_info['order_sn'];
                 $model_pd->changeRcb('order_cancel', $data_pd);
             }
             //解冻预存款
             $pd_amount = floatval($order_info['pd_amount']);
             if ($pd_amount > 0) {
                 $data_pd = array();
                 $data_pd['member_id'] = $order_info['buyer_id'];
                 $data_pd['member_name'] = $order_info['buyer_name'];
                 $data_pd['amount'] = $pd_amount;
                 $data_pd['order_sn'] = $order_info['order_sn'];
                 $model_pd->changePd('order_cancel', $data_pd);
             }
         }
         //更新订单信息
         $update_order = array('order_state' => ORDER_STATE_CANCEL, 'pd_amount' => 0);
         $update = $model_order->editOrder($update_order, array('order_id' => $order_id));
         if (!$update) {
             throw new Exception('保存失败');
         }
         //添加订单日志
         $data = array();
         $data['order_id'] = $order_id;
         $data['log_role'] = $role;
         $data['log_msg'] = '取消了订单';
         $data['log_user'] = $user;
         if ($msg) {
             $data['log_msg'] .= ' ( ' . $msg . ' )';
         }
         $data['log_orderstate'] = ORDER_STATE_CANCEL;
         $model_order->addOrderLog($data);
         $model_order->commit();
         return callback(true, '操作成功');
     } catch (Exception $e) {
         $this->rollback();
         return callback(false, '操作失败');
     }
 }
Example #14
0
 /**
  * 获取售后原因
  * @return [type] [description]
  */
 public function getReasonInfoOp()
 {
     $order_id = intval($_GET['order_id']);
     $goods_id = intval($_GET['goods_id']);
     $model_order = Model("order");
     $model_refund = Model('refund_return');
     $reason_list = $model_refund->getReasonList();
     // 查询条件
     $condition = array();
     $condition['order_id'] = $order_id;
     $condition['buyer_id'] = $this->member_info['member_id'];
     $order = $model_refund->getRightOrderList($condition, $goods_id);
     $is_return = $model_refund->getRefundState($order);
     if ($is_return == 0) {
         output_error("当前订单无法申请售后");
     }
     if ($order['order_amount'] < $order['goods_list'][0]['goods_pay_price'] + $order['refund_amount']) {
         $order['goods_list'][0]['goods_pay_price'] = $order['order_amount'] - $order['refund_amount'];
     }
     if ($goods_id == 0) {
         //禁止退款金额
         $lock_amount = Logic('order_book')->getDepositAmount($order);
         $order['allow_refund_amount'] = $order['order_amount'] - $lock_amount;
         unset($order['goods_list']);
         $order['goods_list']['rec_id'] = 0;
     } else {
         $temp = $order['goods_list'][0];
         unset($order['goods_list']);
         $order['goods_list'] = $temp;
     }
     output_data(array('data' => array('reason' => $reason_list, 'order_info' => $order)));
 }
Example #15
0
 /**
  * 兑换码消费
  */
 private function _exchange()
 {
     if (chksubmit()) {
         if (!preg_match('/^[a-zA-Z0-9]{15,18}$/', $_GET['vr_code'])) {
             return array('error' => '兑换码格式错误,请重新输入');
         }
         $model_vr_order = Model('vr_order');
         $vr_code_info = $model_vr_order->getOrderCodeInfo(array('vr_code' => $_GET['vr_code']));
         if (empty($vr_code_info) || $vr_code_info['store_id'] != $_SESSION['store_id']) {
             return array('error' => '该兑换码不存在');
         }
         if ($vr_code_info['vr_state'] == '1') {
             return array('error' => '该兑换码已被使用');
         }
         if ($vr_code_info['vr_indate'] < TIMESTAMP) {
             return array('error' => '该兑换码已过期,使用截止日期为: ' . date('Y-m-d H:i:s', $vr_code_info['vr_indate']));
         }
         if ($vr_code_info['refund_lock'] > 0) {
             //退款锁定状态:0为正常,1为锁定(待审核),2为同意
             return array('error' => '该兑换码已申请退款,不能使用');
         }
         //更新兑换码状态
         $update = array();
         $update['vr_state'] = 1;
         $update['vr_usetime'] = TIMESTAMP;
         $update = $model_vr_order->editOrderCode($update, array('vr_code' => $_GET['vr_code']));
         //如果全部兑换完成,更新订单状态
         Logic('vr_order')->changeOrderStateSuccess($vr_code_info['order_id']);
         if ($update) {
             //取得返回信息
             $order_info = $model_vr_order->getOrderInfo(array('order_id' => $vr_code_info['order_id']));
             if ($order_info['use_state'] == '0') {
                 $model_vr_order->editOrder(array('use_state' => 1), array('order_id' => $vr_code_info['order_id']));
             }
             $order_info['img_60'] = thumb($order_info, 60);
             $order_info['img_240'] = thumb($order_info, 240);
             $order_info['goods_url'] = urlShop('goods', 'index', array('goods_id' => $order_info['goods_id']));
             $order_info['order_url'] = urlShop('store_vr_order', 'show_order', array('order_id' => $order_info['order_id']));
             return array('error' => '', 'data' => $order_info);
         }
     } else {
         self::profile_menu('exchange', 'exchange');
         Tpl::showpage('store_vr_order.exchange');
     }
 }
Example #16
0
 /**
  * 更新订单状态
  */
 private function _update_order($out_trade_no, $trade_no)
 {
     $model_order = Model('order');
     $logic_payment = Logic('payment');
     $tmp = explode('|', $out_trade_no);
     $out_trade_no = $tmp[0];
     if (!empty($tmp[1])) {
         $order_type = $tmp[1];
     } else {
         $order_pay_info = Model('order')->getOrderPayInfo(array('pay_sn' => $out_trade_no));
         if (empty($order_pay_info)) {
             $order_type = 'v';
         } else {
             $order_type = 'r';
         }
     }
     if ($order_type == 'r') {
         $result = $logic_payment->getRealOrderInfo($out_trade_no);
         if (intval($result['data']['api_pay_state'])) {
             return array('state' => true);
         }
         $order_list = $result['data']['order_list'];
         $result = $logic_payment->updateRealOrder($out_trade_no, $this->payment_code, $order_list, $trade_no);
     } elseif ($order_type == 'v') {
         $result = $logic_payment->getVrOrderInfo($out_trade_no);
         if ($result['data']['order_state'] != ORDER_STATE_NEW) {
             return array('state' => true);
         }
         $result = $logic_payment->updateVrOrder($out_trade_no, $this->payment_code, $result['data'], $trade_no);
     }
     return $result;
 }
Example #17
0
 /**
  * 提货验证
  */
 public function pickup_parcelOp()
 {
     if (chksubmit()) {
         $order_id = intval($_POST['order_id']);
         $pickup_code = intval($_POST['pickup_code']);
         if ($order_id <= 0 || $pickup_code <= 0) {
             showDialog(L('wrong_argument'), '', 'error', 'DialogManager.close("pickup_parcel")');
         }
         $model_do = Model('delivery_order');
         $dorder_info = $model_do->getDeliveryOrderInfo(array('order_id' => $order_id, 'dlyp_id' => $_SESSION['dlyp_id'], 'dlyo_pickup_code' => $pickup_code));
         if (empty($dorder_info)) {
             showDialog('提货码错误', '', 'error', 'DialogManager.close("pickup_parcel")');
         }
         $result = $model_do->editDeliveryOrderPickup(array(), array('order_id' => $order_id, 'dlyp_id' => $_SESSION['dlyp_id'], 'dlyo_pickup_code' => $pickup_code));
         if ($result) {
             // 更新订单状态
             $order_info = Model('order')->getOrderInfo(array('order_id' => $order_id));
             Logic('order')->changeOrderStateReceive($order_info, 'buyer', '物流自提服务站', '物流自提服务站确认收货');
             showDialog('操作成功,订单完成', 'reload', 'succ', 'DialogManager.close("pickup_parcel")');
         } else {
             showDialog('操作失败', '', 'error', 'DialogManager.close("pickup_parcel")');
         }
     }
     Tpl::showpage('d_center.pickup_parcel', 'null_layout');
 }
Example #18
0
 /**
  * 更换收货地址
  */
 public function change_addressOp()
 {
     $logic_buy = Logic('buy');
     $data = $logic_buy->changeAddr($_POST['freight_hash'], $_POST['city_id'], $_POST['area_id'], $this->member_info['member_id']);
     if (!empty($data) && $data['state'] == 'success') {
         output_data($data);
     } else {
         output_error('地址修改失败');
     }
 }
Example #19
0
 /**
  * 支付接口返回
  *
  */
 public function returnOp()
 {
     $order_type = $_GET['extra_common_param'];
     if ($order_type == 'real_order') {
         $act = 'member_order';
     } elseif ($order_type == 'vr_order') {
         $act = 'member_vr_order';
     } elseif ($order_type == 'pd_order') {
         $act = 'predeposit';
     } else {
         exit;
     }
     $out_trade_no = $_GET['out_trade_no'];
     $trade_no = $_GET['trade_no'];
     $url = SHOP_SITE_URL . '/index.php?act=' . $act;
     //对外部交易编号进行非空判断
     if (!preg_match('/^\\d{18}$/', $out_trade_no)) {
         showMessage('参数错误', $url, '', 'html', 'error');
     }
     $logic_payment = Logic('payment');
     if ($order_type == 'real_order') {
         $result = $logic_payment->getRealOrderInfo($out_trade_no);
         if (!$result['state']) {
             showMessage($result['msg'], $url, 'html', 'error');
         }
         if ($result['data']['api_pay_state']) {
             $payment_state = 'success';
         }
         $order_list = $result['data']['order_list'];
     } elseif ($order_type == 'vr_order') {
         $result = $logic_payment->getVrOrderInfo($out_trade_no);
         if (!$result['state']) {
             showMessage($result['msg'], $url, 'html', 'error');
         }
         if ($result['data']['order_state'] != ORDER_STATE_NEW) {
             $payment_state = 'success';
         }
     } elseif ($order_type == 'pd_order') {
         $result = $logic_payment->getPdOrderInfo($out_trade_no);
         if (!$result['state']) {
             showMessage($result['msg'], $url, 'html', 'error');
         }
         if ($result['data']['pdr_payment_state'] == 1) {
             $payment_state = 'success';
         }
     }
     $order_pay_info = $result['data'];
     $api_pay_amount = $result['data']['api_pay_amount'];
     if ($payment_state != 'success') {
         //取得支付方式
         $result = $logic_payment->getPaymentInfo($_GET['payment_code']);
         if (!$result['state']) {
             showMessage($result['msg'], $url, 'html', 'error');
         }
         $payment_info = $result['data'];
         //创建支付接口对象
         $payment_api = new $payment_info['payment_code']($payment_info, $order_pay_info);
         //返回参数判断
         $verify = $payment_api->return_verify();
         if (!$verify) {
             showMessage('支付数据验证失败', $url, 'html', 'error');
         }
         //取得支付结果
         $pay_result = $payment_api->getPayResult($_GET);
         if (!$pay_result) {
             showMessage('非常抱歉,您的订单支付没有成功,请您后尝试', $url, 'html', 'error');
         }
         //更改订单支付状态
         if ($order_type == 'real_order') {
             $result = $logic_payment->updateRealOrder($out_trade_no, $payment_info['payment_code'], $order_list, $trade_no);
         } else {
             if ($order_type == 'vr_order') {
                 $result = $logic_payment->updateVrOrder($out_trade_no, $payment_info['payment_code'], $order_pay_info, $trade_no);
             } else {
                 if ($order_type == 'pd_order') {
                     $result = $logic_payment->updatePdOrder($out_trade_no, $trade_no, $payment_info, $order_pay_info);
                 }
             }
         }
         if (!$result['state']) {
             showMessage('支付状态更新失败', $url, 'html', 'error');
         }
     }
     //支付成功后跳转
     if ($order_type == 'real_order') {
         $pay_ok_url = SHOP_SITE_URL . '/index.php?act=buy&op=pay_ok&pay_sn=' . $out_trade_no . '&pay_amount=' . ncPriceFormat($api_pay_amount);
     } elseif ($order_type == 'vr_order') {
         $pay_ok_url = SHOP_SITE_URL . '/index.php?act=buy_virtual&op=pay_ok&order_sn=' . $out_trade_no . '&order_id=' . $order_pay_info['order_id'] . '&order_amount=' . ncPriceFormat($api_pay_amount);
     } elseif ($order_type == 'pd_order') {
         $pay_ok_url = SHOP_SITE_URL . '/index.php?act=predeposit';
     }
     if ($payment_info['payment_code'] == 'tenpay') {
         showMessage('', $pay_ok_url, 'tenpay');
     } else {
         redirect($pay_ok_url);
     }
 }
Example #20
0
 /**
  * 回收站
  */
 private function _order_recycle($order_info, $get)
 {
     $model_order = Model('order');
     $logic_order = Logic('order');
     $state_type = str_replace(array('order_delete', 'order_drop', 'order_restore'), array('delete', 'drop', 'restore'), $_GET['state_type']);
     $if_allow = $model_order->getOrderOperateState($state_type, $order_info);
     if (!$if_allow) {
         return callback(false, '无权操作');
     }
     return $logic_order->changeOrderStateRecycle($order_info, 'buyer', $state_type);
 }
Example #21
0
 public function __construct()
 {
     $this->_logic_buy_1 = Logic('buy_1');
 }
Example #22
0
 /**
  * 支付成功,更新订单状态
  */
 public function wxpay_notifyOp()
 {
     $result = Logic('payment')->getPaymentInfo('wxpay');
     if (!$result['state']) {
         Log::record('wxpay not found', 'RUN');
     }
     new wxpay($result['data'], array());
     require_once BASE_PATH . '/api/payment/wxpay/notify.php';
 }
Example #23
0
 /**
  * 加载买家发票列表,最多显示10条
  *
  */
 public function load_invOp()
 {
     $logic_buy = Logic('buy');
     $condition = array();
     if ($logic_buy->buyDecrypt($_GET['vat_hash'], $_SESSION['member_id']) == 'allow_vat') {
     } else {
         Tpl::output('vat_deny', true);
         $condition['inv_state'] = 1;
     }
     $condition['member_id'] = $_SESSION['member_id'];
     $model_inv = Model('invoice');
     //如果传入ID,先删除再查询
     if (intval($_GET['del_id']) > 0) {
         $model_inv->delInv(array('inv_id' => intval($_GET['del_id']), 'member_id' => $_SESSION['member_id']));
     }
     $list = $model_inv->getInvList($condition, 10);
     if (!empty($list)) {
         foreach ($list as $key => $value) {
             if ($value['inv_state'] == 1) {
                 $list[$key]['content'] = '普通发票' . ' ' . $value['inv_title'] . ' ' . $value['inv_content'];
             } else {
                 $list[$key]['content'] = '增值税发票' . ' ' . $value['inv_company'] . ' ' . $value['inv_code'] . ' ' . $value['inv_reg_addr'];
             }
         }
     }
     Tpl::output('inv_list', $list);
     Tpl::showpage('buy_invoice.load', 'null_layout');
 }
Example #24
0
 /**
  * 订单自动完成
  */
 private function _order_auto_complete()
 {
     //虚拟订单过使用期自动完成
     $_break = false;
     $model_order = Model('vr_order');
     $logic_order = Logic('vr_order');
     $condition = array();
     $condition['order_state'] = ORDER_STATE_PAY;
     $condition['vr_indate'] = array('lt', TIMESTAMP);
     //分批,每批处理100个订单,最多处理5W个订单
     for ($i = 0; $i < 500; $i++) {
         if ($_break) {
             break;
         }
         $order_list = $model_order->getOrderList($condition, '', 'order_id,order_sn', 'vr_indate asc', 100);
         if (empty($order_list)) {
             break;
         }
         foreach ($order_list as $order_info) {
             $result = $logic_order->changeOrderStateSuccess($order_info['order_id']);
             if (!$result['state']) {
                 $this->log('虚拟订单过使用期自动完成失败SN:' . $order_info['order_sn']);
                 $_break = true;
                 break;
             }
         }
     }
     //实物订单发货后,超期自动收货完成
     $_break = false;
     $model_order = Model('order');
     $logic_order = Logic('order');
     $condition = array();
     $condition['order_state'] = ORDER_STATE_SEND;
     $condition['lock_state'] = 0;
     $condition['delay_time'] = array('lt', TIMESTAMP - ORDER_AUTO_RECEIVE_DAY * 86400);
     //分批,每批处理100个订单,最多处理5W个订单
     for ($i = 0; $i < 500; $i++) {
         if ($_break) {
             break;
         }
         $order_list = $model_order->getOrderList($condition, '', '*', 'delay_time asc', 100);
         if (empty($order_list)) {
             break;
         }
         foreach ($order_list as $order_info) {
             $result = $logic_order->changeOrderStateReceive($order_info, 'system', '系统', '超期未收货系统自动完成订单');
             if (!$result['state']) {
                 $this->log('实物订单超期未收货自动完成订单失败SN:' . $order_info['order_sn']);
                 $_break = true;
                 break;
             }
         }
     }
 }
Example #25
0
 /**
  * 支付成功后修改虚拟订单状态
  */
 public function updateVrOrder($out_trade_no, $payment_code, $order_info, $trade_no)
 {
     $post['payment_code'] = $payment_code;
     $post['trade_no'] = $trade_no;
     return Logic('vr_order')->changeOrderStatePay($order_info, 'system', $post);
 }
Example #26
0
 /**
  * 订单确认收货
  */
 public function order_receiveOp()
 {
     $model_order = Model('order');
     $logic_order = Logic('order');
     $order_id = intval($_POST['order_id']);
     $condition = array();
     $condition['order_id'] = $order_id;
     $condition['buyer_id'] = $this->member_info['member_id'];
     $order_info = $model_order->getOrderInfo($condition);
     $if_allow = $model_order->getOrderOperateState('receive', $order_info);
     if (!$if_allow) {
         output_error('无权操作');
     }
     $result = $logic_order->changeOrderStateReceive($order_info, 'buyer', $this->member_info['member_name']);
     if (!$result['state']) {
         output_error($result['msg']);
     } else {
         output_data('1');
     }
 }
Example #27
0
 /**
  * 系统收到货款
  * @throws Exception
  */
 private function _order_receive_pay($order_info, $post)
 {
     $order_id = $order_info['order_id'];
     $model_order = Model('order');
     $logic_order = Logic('order');
     $if_allow = $model_order->getOrderOperateState('system_receive_pay', $order_info);
     if (!$if_allow) {
         return callback(false, '无权操作');
     }
     if (!chksubmit()) {
         Tpl::output('order_info', $order_info);
         //显示支付接口列表
         $payment_list = Model('payment')->getPaymentOpenList();
         //去掉预存款和货到付款
         foreach ($payment_list as $key => $value) {
             if ($value['payment_code'] == 'predeposit' || $value['payment_code'] == 'offline') {
                 unset($payment_list[$key]);
             }
         }
         Tpl::output('payment_list', $payment_list);
         Tpl::showpage('order.receive_pay');
         exit;
     }
     $order_list = $model_order->getOrderList(array('pay_sn' => $order_info['pay_sn'], 'order_state' => ORDER_STATE_NEW));
     $result = $logic_order->changeOrderReceivePay($order_list, 'system', $this->admin_info['name'], $post);
     if ($result['state']) {
         $this->log('将订单改为已收款状态,' . L('order_number') . ':' . $order_info['order_sn'], 1);
     }
     return $result;
 }
Example #28
0
 /**
  * 平台退款处理
  *
  * @param
  * @return bool
  */
 public function editOrderRefund($refund)
 {
     $refund_id = $refund['refund_id'];
     $refund_lock = '0';
     //退款锁定状态:0为正常,1为锁定,2为同意
     $model_vr_order = Model('vr_order');
     try {
         $this->beginTransaction();
         $state = $this->editRefund(array('refund_id' => $refund_id), $refund);
         ////更新退款
         if ($state && $refund['admin_state'] == '2') {
             //审核状态:1为待审核,2为同意,3为不同意
             $refund_lock = '2';
             $order_id = $refund['order_id'];
             //订单编号
             $order = $model_vr_order->getOrderInfo(array('order_id' => $order_id));
             $order_amount = $order['order_amount'];
             //订单金额
             $rcb_amount = $order['rcb_amount'];
             //充值卡支付金额
             $predeposit_amount = $order_amount - $order['refund_amount'] - $rcb_amount;
             //可退预存款金额
             $model_predeposit = Model('predeposit');
             if ($rcb_amount > 0 && $refund['refund_amount'] > $predeposit_amount) {
                 //退充值卡
                 $log_array = array();
                 $log_array['member_id'] = $order['buyer_id'];
                 $log_array['member_name'] = $order['buyer_name'];
                 $log_array['order_sn'] = $order['order_sn'];
                 $log_array['amount'] = $refund['refund_amount'];
                 if ($predeposit_amount > 0) {
                     $log_array['amount'] = $refund['refund_amount'] - $predeposit_amount;
                 }
                 $state = $model_predeposit->changeRcb('refund', $log_array);
                 //增加买家可用充值卡金额
             }
             if ($predeposit_amount > 0) {
                 //退预存款
                 $log_array = array();
                 $log_array['member_id'] = $order['buyer_id'];
                 $log_array['member_name'] = $order['buyer_name'];
                 $log_array['order_sn'] = $order['order_sn'];
                 $log_array['amount'] = $refund['refund_amount'];
                 //退预存款金额
                 if ($refund['refund_amount'] > $predeposit_amount) {
                     $log_array['amount'] = $predeposit_amount;
                 }
                 $state = $model_predeposit->changePd('refund', $log_array);
                 //增加买家可用预存款金额
             }
             if ($state) {
                 $order_array = array();
                 $order_amount = $order['order_amount'];
                 //订单金额
                 $refund_amount = $order['refund_amount'] + $refund['refund_amount'];
                 //退款金额
                 $order_array['refund_state'] = $order_amount - $refund_amount > 0 ? 1 : 2;
                 $order_array['refund_amount'] = ncPriceFormat($refund_amount);
                 $state = $model_vr_order->editOrder($order_array, array('order_id' => $order_id));
                 //更新订单退款
             }
         }
         if ($state) {
             $code_array = explode(',', $refund['code_sn']);
             $state = $model_vr_order->editOrderCode(array('refund_lock' => $refund_lock), array('vr_code' => array('in', $code_array)));
             //更新退款的兑换码
             if ($state && $refund['admin_state'] == '2') {
                 Logic('vr_order')->changeOrderStateSuccess($order_id);
                 //更新订单状态
             }
         }
         $this->commit();
         return $state;
     } catch (Exception $e) {
         $this->rollback();
         return false;
     }
 }
Example #29
0
 /**
  * 检查库存是否充足
  */
 private function _check_goods_storage($cart_info, $quantity, $member_id)
 {
     $model_goods = Model('goods');
     $model_bl = Model('p_bundling');
     $logic_buy_1 = Logic('buy_1');
     if ($cart_info['bl_id'] == '0') {
         //普通商品
         $goods_info = $model_goods->getGoodsOnlineInfoAndPromotionById($cart_info['goods_id']);
         //抢购
         $logic_buy_1->getGroupbuyInfo($goods_info);
         //限时折扣
         $logic_buy_1->getXianshiInfo($goods_info, $quantity);
         $quantity = $goods_info['goods_num'];
         if (intval($goods_info['goods_storage']) < $quantity) {
             return false;
         }
     } else {
         //优惠套装商品
         $bl_goods_list = $model_bl->getBundlingGoodsList(array('bl_id' => $cart_info['bl_id']));
         $goods_id_array = array();
         foreach ($bl_goods_list as $goods) {
             $goods_id_array[] = $goods['goods_id'];
         }
         $bl_goods_list = $model_goods->getGoodsOnlineListAndPromotionByIdArray($goods_id_array);
         //如果有商品库存不足,更新购买数量到目前最大库存
         foreach ($bl_goods_list as $goods_info) {
             if (intval($goods_info['goods_storage']) < $quantity) {
                 return false;
             }
         }
     }
     return true;
 }
Example #30
0
 /**
  * 获取虚拟订单支付信息
  */
 private function _get_vr_order_info($pay_sn)
 {
     $logic_payment = Logic('payment');
     //取得订单信息
     $order_info = $logic_payment->getVrOrderInfo($pay_sn, $this->member_info['member_id']);
     if (!$order_info['state']) {
         output_error($order_info['msg']);
     }
     //计算本次需要在线支付的订单总金额
     $pay_amount = $order_info['data']['order_amount'] - $order_info['data']['pd_amount'] - $order_info['data']['rcb_amount'];
     $order_info['data']['api_pay_amount'] = ncPriceFormat($pay_amount);
     return $order_info;
 }