예제 #1
0
 /**
  * 平台确认退款处理
  *
  * @param
  * @return bool
  */
 public function editOrderRefundExtension($refund)
 {
     $refund_id = intval($refund['refund_id']);
     if ($refund_id > 0) {
         Uk86Language::uk86_read('model_lang_index');
         $order_id = $refund['order_id'];
         //订单编号
         $field = 'trade_no,order_id,buyer_id,buyer_name,store_id,order_sn,order_amount,payment_code,order_state,refund_amount';
         $model_order = Model('order');
         $order = $model_order->getOrderInfo(array('order_id' => $order_id), array(), $field);
         try {
             $this->beginTransaction();
             $order_amount = $order['order_amount'];
             //订单金额
             //$predeposit_amount = $order_amount-$order['refund_amount'];//可退金额
             //if ($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'];
             $refund['trade_no'] = $order['trade_no'];
             if ($predeposit_amount > 0) {
                 $log_array['amount'] = $refund['refund_amount'] - $predeposit_amount;
             }
             $state = $this->changePa("refund", $log_array, $refund);
             //增加买家支付账户金额
             //}
             $order_state = $order['order_state'];
             $model_trade = Model('trade');
             $order_paid = $model_trade->getOrderState('order_paid');
             //订单状态20:已付款
             if ($state && $order_state == $order_paid) {
                 uk86_Logic('order')->changeOrderStateCancel($order, 'system', '系统', '商品全部退款完成取消订单', false);
             }
             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'] = uk86_ncPriceFormat($refund_amount);
                 $order_array['delay_time'] = time();
                 $state = $model_order->editOrder($order_array, array('order_id' => $order_id));
                 //更新订单退款
             }
             if ($state && $refund['order_lock'] == '2') {
                 $state = $this->editOrderUnlock($order_id);
                 //订单解锁
             }
             $this->commit();
             return $state;
         } catch (Exception $e) {
             $this->rollback();
             return false;
         }
     }
     return false;
 }
예제 #2
0
 public function indexOp()
 {
     if (ob_get_level()) {
         ob_end_clean();
     }
     $logic_queue = uk86_Logic('queue');
     $worker = new Uk86QueueServer();
     $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();
         }
     }
 }
예제 #3
0
 /**
  * 入列
  * @param string $key
  * @param array $value
  */
 public static function push($key, $value)
 {
     if (!C('queue.open')) {
         uk86_Logic('queue')->{$key}($value);
         return;
     }
     if (!is_object(self::$queuedb)) {
         self::$queuedb = new Uk86QueueDB();
     }
     return self::$queuedb->push(serialize(array($key => $value)));
 }
예제 #4
0
 /**
  * 虚拟商品购买第二步
  */
 public function buy_step2Op()
 {
     $logic_buy_virtual = uk86_Logic('buy_virtual');
     $_POST['order_from'] = 1;
     $result = $logic_buy_virtual->buyStep3($_POST, $_SESSION['member_id']);
     if (!$result['state']) {
         $this->wap_showDialog($result['msg'], 'error', uk86_getReferer());
     }
     //转向到商城支付页面
     uk86_redirect('index.php?act=wap_buy_virtual&op=pay&order_id=' . $result['data']['order_id']);
 }
예제 #5
0
 /**
  * 虚拟商品购买第三步
  */
 public function buy_step3Op()
 {
     $logic_buy_virtual = uk86_Logic('buy_virtual');
     $_POST['order_from'] = 1;
     $result = $logic_buy_virtual->buyStep3($_POST, $_SESSION['member_id']);
     if (!$result['state']) {
         uk86_showMessage($result['msg'], 'index.php', 'html', 'error');
     }
     //转向到商城支付页面
     uk86_redirect('index.php?act=buy_virtual&op=pay&order_id=' . $result['data']['order_id']);
 }
예제 #6
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) {
             Uk86QueueClient::push('cancelOrderUpdateStorage', array($order_info['goods_id'] => $order_info['goods_num']));
         } else {
             uk86_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 uk86_callback(true, '更新成功');
     } catch (Exception $e) {
         $model_vr_order->rollback();
         return uk86_callback(false, $e->getMessage());
     }
 }
예제 #7
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 = uk86_Logic('vr_order');
     $result = $logic_vr_order->changeOrderStateCancel($order_info, 'buyer', '其它原因');
     if (!$result['state']) {
         output_data($result['msg']);
     } else {
         output_data('1');
     }
 }
예제 #8
0
 /**
  * 虚拟订单支付
  */
 public function vr_payOp()
 {
     $order_sn = $_GET['pay_sn'];
     $model_mb_payment = Model('mb_payment');
     $logic_payment = uk86_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);
 }
예제 #9
0
 /**
  * 虚拟订单第三步,产生订单
  * POST
  * 传入:goods_id:商品ID,quantity:购买数量,buyer_phone:接收手机,buyer_msg:下单留言,pd_pay:是否使用预存款支付0否1是,password:支付密码
  */
 public function buy_step3Op()
 {
     $logic_buy_virtual = uk86_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']);
     }
 }
예제 #10
0
 /**
  * 修改商品价格
  * @param unknown $order_info
  */
 private function _order_spay_price($order_info, $post)
 {
     $model_order = Model('order');
     $logic_order = uk86_Logic('order');
     if (!uk86_chksubmit()) {
         Tpl::output('order_info', $order_info);
         Tpl::output('order_id', $order_info['order_id']);
         Tpl::showpage('store_order.edit_spay_price', 'null_layout');
         exit;
     } else {
         $if_allow = $model_order->getOrderOperateState('spay_price', $order_info);
         if (!$if_allow) {
             return uk86_callback(false, '无权操作');
         }
         return $logic_order->changeOrderSpayPrice($order_info, 'seller', $_SESSION['member_name'], $post['goods_amount']);
     }
 }
예제 #11
0
 /**
  * 发货
  */
 public function sendOp()
 {
     $order_id = intval($_GET['order_id']);
     if ($order_id <= 0) {
         uk86_showMessage(Uk86Language::uk86_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) {
         uk86_showMessage(Uk86Language::uk86_get('wrong_argument'), '', 'html', 'error');
     }
     if (uk86_chksubmit()) {
         $logic_order = uk86_Logic('order');
         $_POST['reciver_info'] = $this->_get_reciver_info();
         $result = $logic_order->changeOrderSend($order_info, 'seller', $_SESSION['member_name'], $_POST);
         if (!$result['state']) {
             uk86_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 = uk86_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');
 }
예제 #12
0
 /**
  * 删除订单
  */
 private function _order_recycle($order_info, $get)
 {
     $model_order = Model('order');
     $logic_order = uk86_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 uk86_callback(false, '无权操作');
     }
     return $logic_order->changeOrderStateRecycle($order_info, 'buyer', $state_type);
 }
예제 #13
0
 /**
  * 更新订单状态
  */
 private function _update_order($out_trade_no, $trade_no)
 {
     $model_order = Model('order');
     $logic_payment = uk86_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;
 }
예제 #14
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 = uk86_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;
 }
예제 #15
0
 /**
  * 系统收到货款
  * @param unknown $order_info
  * @throws Exception
  */
 private function _order_receive_pay($order_info, $post)
 {
     $model_pm_order = Model('pm_order');
     $logic_pm_order = uk86_Logic('pm_order');
     $if_allow = $model_pm_order->getOrderOperateState('system_receive_pay', $order_info);
     if (!$if_allow) {
         return uk86_callback(false, '无权操作');
     }
     if (!uk86_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_pm_order->changeOrderStatePay($order_info, 'system', $post);
     }
 }
예제 #16
0
 /**
  * 支付成功后修改促销订单状态
  */
 public function updatePmOrder($out_trade_no, $payment_code, $order_info, $trade_no)
 {
     $post['payment_code'] = $payment_code;
     $post['trade_no'] = $trade_no;
     return uk86_Logic('pm_order')->changeOrderStatePay($order_info, 'system', $post);
 }
예제 #17
0
 /**
  * 系统收到货款
  * @throws Exception
  */
 private function _order_receive_pay($order_info, $post)
 {
     $order_id = $order_info['order_id'];
     $model_order = Model('order');
     $logic_order = uk86_Logic('order');
     $if_allow = $model_order->getOrderOperateState('system_receive_pay', $order_info);
     if (!$if_allow) {
         return uk86_callback(false, '无权操作');
     }
     if (!uk86_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;
 }
예제 #18
0
 /**
  * 订单自动完成
  */
 private function _order_auto_complete()
 {
     //虚拟订单过使用期自动完成
     $_break = false;
     $model_order = Model('vr_order');
     $logic_order = uk86_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 = uk86_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;
             }
         }
     }
 }
예제 #19
0
 /**
  * 更换收货地址
  */
 public function change_addressOp()
 {
     $logic_buy = uk86_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('地址修改失败');
     }
 }
예제 #20
0
 /**
  * 取消订单
  */
 private function _order_cancel($order_info, $post)
 {
     if (!uk86_chksubmit()) {
         Tpl::output('order_info', $order_info);
         Tpl::showpage('member_vr_order.cancel', 'null_layout');
         exit;
     } else {
         $model_vr_order = Model('vr_order');
         $logic_vr_order = uk86_Logic('vr_order');
         $if_allow = $model_vr_order->getOrderOperateState('buyer_cancel', $order_info);
         if (!$if_allow) {
             return uk86_callback(false, '无权操作');
         }
         $msg = $post['state_info1'] != '' ? $post['state_info1'] : $post['state_info'];
         return $logic_vr_order->changeOrderStateCancel($order_info, 'buyer', $msg);
     }
 }
예제 #21
0
 /**
  * 支付接口返回
  *
  */
 public function returnOp()
 {
     $extra_common_param = explode(',', $_GET['extra_common_param']);
     $order_type = $extra_common_param[0];
     $out_act = $extra_common_param[1];
     if ($order_type == 'real_order') {
         $act = 'member_order';
     } elseif ($order_type == 'vr_order') {
         $act = 'member_vr_order';
     } elseif ($order_type == 'pd_order') {
         $act = 'predeposit';
         //add  wangjiang  添加返回是促销活动权利购买行为的类型
     } elseif ($order_type = 'promotion_vr_order') {
         $act = 'store_groupbuy';
         //end add wangjiang
     } 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)) {
         uk86_showMessage('参数错误', $url, '', 'html', 'error');
     }
     $logic_payment = uk86_Logic('payment');
     if ($order_type == 'real_order') {
         $result = $logic_payment->getRealOrderInfo($out_trade_no);
         if (!$result['state']) {
             uk86_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']) {
             uk86_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']) {
             uk86_showMessage($result['msg'], $url, 'html', 'error');
         }
         if ($result['data']['pdr_payment_state'] == 1) {
             $payment_state = 'success';
         }
     } elseif ($order_type = 'promotion_vr_order') {
         $result = $logic_payment->getPromotionVrOrderInfo($out_trade_no);
         if (!$result['state']) {
             uk86_showMessage($result['msg'], $url, 'html', 'error');
         }
         if ($result['data']['order_state'] != ORDER_STATE_NEW) {
             $payment_state = 'success';
         }
     }
     //end wangjiang
     $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']) {
             uk86_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) {
             uk86_showMessage('支付数据验证失败', $url, 'html', 'error');
         }
         //取得支付结果
         $pay_result = $payment_api->getPayResult($_GET);
         if (!$pay_result) {
             uk86_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']) {
             uk86_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=' . uk86_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=' . uk86_ncPriceFormat($api_pay_amount);
     } elseif ($order_type == 'pd_order') {
         $pay_ok_url = SHOP_SITE_URL . '/index.php?act=predeposit';
     } elseif ($order_type == 'promotion_vr_order') {
         $pay_ok_url = SHOP_SITE_URL . '/index.php?act=' . $out_act . '&op=quota_add_save&order_sn=' . $out_trade_no . '&order_id=' . $order_pay_info['order_id'] . '&order_amount=' . uk86_ncPriceFormat($api_pay_amount) . '&payment_code=' . $payment_info['payment_code'];
     }
     //end wangjiang
     if ($payment_info['payment_code'] == 'tenpay') {
         uk86_showMessage('', $pay_ok_url, 'tenpay');
     } else {
         uk86_redirect($pay_ok_url);
     }
 }
예제 #22
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'] = uk86_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') {
                 uk86_Logic('vr_order')->changeOrderStateSuccess($order_id);
                 //更新订单状态
             }
         }
         $this->commit();
         return $state;
     } catch (Exception $e) {
         $this->rollback();
         return false;
     }
 }
예제 #23
0
 /**
  * 兑换码消费
  */
 private function _exchange()
 {
     if (uk86_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']));
         //如果全部兑换完成,更新订单状态
         uk86_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'] = uk86_thumb($order_info, 60);
             $order_info['img_240'] = uk86_thumb($order_info, 240);
             $order_info['goods_url'] = uk86_urlShop('goods', 'index', array('goods_id' => $order_info['goods_id']));
             $order_info['order_url'] = uk86_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');
     }
 }
예제 #24
0
 /**
  * 检查库存是否充足
  */
 private function _check_goods_storage($cart_info, $quantity, $member_id)
 {
     $model_goods = Model('goods');
     $model_bl = Model('p_bundling');
     $logic_buy_1 = uk86_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;
 }
예제 #25
0
파일: buy.php 프로젝트: wangjiang988/ukshop
 /**
  * F码验证
  */
 public function check_fcodeOp()
 {
     $result = uk86_Logic('buy')->checkFcode($_GET['goods_commonid'], $_GET['fcode']);
     echo $result['state'] ? '1' : '0';
     exit;
 }
예제 #26
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) {
             Uk86QueueClient::push('cancelOrderUpdateStorage', $data);
         } else {
             uk86_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 uk86_callback(true, '操作成功');
     } catch (Exception $e) {
         $this->rollback();
         return uk86_callback(false, '操作失败');
     }
 }
예제 #27
0
 /**
  * 生成抢购的订单
  * @author bzhang
  */
 public function createGroupOrder($post, $member_id, $member_name, $member_email)
 {
     $this->_member_info['member_id'] = $member_id;
     $this->_member_info['member_name'] = $member_name;
     $this->_member_info['member_email'] = $member_email;
     $this->_post_data = $post;
     $store_id = 0;
     try {
         $model_order = Model('order');
         $model_order->beginTransaction();
         //第1步 生成pay订单
         $logic_buy_1 = uk86_Logic('buy_1');
         $pay_sn = $logic_buy_1->makePaySn($_SESSION['member_id']);
         $order_pay = array();
         $order_pay['pay_sn'] = $pay_sn;
         $order_pay['buyer_id'] = $_SESSION['member_id'];
         $order_pay_id = $model_order->addOrderPay($order_pay);
         if (!$order_pay_id) {
             throw new Exception('订单保存失败[未生成支付单]');
         }
         require_once BASE_RESOURCE_PATH . DS . 'phpqrcode' . DS . 'index.php';
         $this->PhpQRCode = new PhpQRCode();
         //创建订单
         $order = array();
         $order['order_sn'] = $logic_buy_1->makeOrderSn($order_pay_id);
         //根据订单号生成二维码
         $order['order_code'] = $this->_get_code($order['order_sn'], $member_name);
         $order['pay_sn'] = $pay_sn;
         $order['store_id'] = $store_id;
         $order['store_name'] = '系统平台';
         $order['buyer_id'] = $member_id;
         $order['buyer_name'] = $member_name;
         $order['buyer_email'] = $member_email;
         $order['add_time'] = TIMESTAMP;
         $order['payment_code'] = 'online';
         $order['order_state'] = ORDER_STATE_NEW;
         $order['order_amount'] = $post['price'];
         $order['shipping_fee'] = 0;
         $order['goods_amount'] = $order['order_amount'] - $order['shipping_fee'];
         $order['order_from'] = '';
         $order['store_mentioning'] = '';
         //如果支持方式为空时,默认为货到付款 ukshop
         if ($order['payment_code'] == "") {
             $order['payment_code'] = "offline";
         }
         $order_id = $model_order->addOrder($order);
         $order['id'] = $order_id;
         if (!$order_id) {
             throw new Exception('订单保存失败[未生成订单数据]');
         }
         $model_order->commit();
         return uk86_callback(true, '', $order);
     } catch (Exception $e) {
         $model_order->rollback();
         return uk86_callback(false, $e->getMessage());
     }
 }
예제 #28
0
 /**
  * 订单确认收货
  */
 public function order_receiveOp()
 {
     $model_order = Model('order');
     $logic_order = uk86_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');
     }
 }
예제 #29
0
 /**
  * 提货验证
  */
 public function pickup_parcelOp()
 {
     if (uk86_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));
             uk86_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');
 }
예제 #30
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 = uk86_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
             uk86_setNcCookie('cart_goods_num', $model_cart->cart_goods_num, 2 * 3600);
             $data = array('state' => 'true', 'num' => $model_cart->cart_goods_num, 'amount' => uk86_ncPriceFormat($model_cart->cart_all_price));
         } else {
             $data = array('state' => 'false');
             exit(json_encode($data));
         }
     }
     exit(json_encode($data));
 }