123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379 |
- <?php
- /**
- * 我的订单
- *
- *
- *
- *
- */
- //use Shopnc\Tpl;
- defined('InShopNC') or exit('Access Invalid!');
- class member_orderControl extends mbMemberControl
- {
- public function __construct()
- {
- parent::__construct();
- }
- /**
- * 订单列表
- */
- public function order_listOp()
- {
- $token = trim($_GET['key']);
- if (false == $this->checkToken($token)) {
- return joutput_error($this->err_code);
- }
- $model_order = Model('order');
- $condition = array();
- $condition['buyer_id'] = $this->member_info['member_id'];
- $order_list_array = $model_order->getNormalOrderList($condition, 30, '*', 'order_id desc', '', array('order_address', 'order_goods'));
- $order_group_list = array();
- $order_pay_sn_array = array();
- foreach ($order_list_array as $value) {
- //显示取消订单
- $value['if_cancel'] = $model_order->getOrderOperateState('buyer_cancel', $value);
- //显示收货
- $value['if_receive'] = $model_order->getOrderOperateState('receive', $value);
- //显示锁定中
- $value['if_lock'] = $model_order->getOrderOperateState('lock', $value);
- //显示物流跟踪
- $value['if_deliver'] = $model_order->getOrderOperateState('deliver', $value);
- //商品图
- foreach ($value['extend_order_goods'] as $k => $goods_info) {
- $value['extend_order_goods'][$k]['goods_image_url'] = cthumb($goods_info['goods_image'], 240, $value['store_id']);
- }
- $order_group_list[$value['pay_sn']]['order_list'][] = $value;
- //如果有在线支付且未付款的订单则显示合并付款链接
- if ($value['order_state'] == ORDER_STATE_NEW) {
- $order_group_list[$value['pay_sn']]['pay_amount'] += $value['order_amount'] - $value['rcb_amount'] - $value['pd_amount'];
- }
- $order_group_list[$value['pay_sn']]['add_time'] = $value['add_time'];
- //记录一下pay_sn,后面需要查询支付单表
- $order_pay_sn_array[] = $value['pay_sn'];
- }
- $new_order_group_list = array();
- foreach ($order_group_list as $key => $value) {
- $value['pay_sn'] = strval($key);
- $new_order_group_list[] = $value;
- }
- $page_count = $model_order->gettotalpage();
- $array_data = array('order_group_list' => $new_order_group_list);
- if (isset($_GET['getpayment']) && $_GET['getpayment'] == "true") {
- $model_mb_payment = Model('mb_payment');
- $payment_list = $model_mb_payment->getMbPaymentOpenList();
- $payment_array = array();
- if (!empty($payment_list)) {
- foreach ($payment_list as $value) {
- $payment_array[] = array('payment_code' => $value['payment_code'], 'payment_name' => $value['payment_name']);
- }
- }
- $array_data['payment_list'] = $payment_array;
- }
- joutput_data($array_data, mobile_page($page_count));
- }
- /**
- * 订单信息
- */
- public function order_infoOp()
- {
- $token = trim($_GET['key']);
- if (false == $this->checkToken($token)) {
- return joutput_error($this->err_code);
- }
- $model_order = Model('order');
- $condition = array();
- $condition['buyer_id'] = $this->member_info['member_id'];
- $condition['pay_sn'] = $_POST['pay_sn'];
- $order_list_array = $model_order->getNormalOrderList($condition, $this->page, '*', 'order_id desc', '', array('order_address', 'order_goods'));
- $array_data = array();
- foreach ($order_list_array as $value) {
- //显示取消订单
- $value['if_cancel'] = $model_order->getOrderOperateState('buyer_cancel', $value);
- //显示收货
- $value['if_receive'] = $model_order->getOrderOperateState('receive', $value);
- //显示锁定中
- $value['if_lock'] = $model_order->getOrderOperateState('lock', $value);
- //显示物流跟踪
- $value['if_deliver'] = $model_order->getOrderOperateState('deliver', $value);
- foreach ($value['extend_order_goods'] as $k => $goods_info) {
- $value['extend_order_goods'][$k]['goods_image_url'] = cthumb($goods_info['goods_image'], 240, $value['store_id']);
- }
- $array_data[] = $value;
- }
- joutput_data(array("order_list" => $array_data));
- }
- /**
- * 取消订单
- */
- public function order_cancelOp()
- {
- $token = trim($_GET['key']);
- if (false == $this->checkToken($token)) {
- return joutput_error($this->err_code);
- }
- $condition = array();
- if (!empty($_POST['order_id'])) {
- $order_id = intval($_POST['order_id']);
- $condition['order_id'] = $order_id;
- } else if (!empty($_POST['order_sn'])) {
- $condition['order_sn'] = trim($_POST['order_sn']);
- } else {
- return joutput_error(errcode::ErrParamter, "请传入order_sn.");
- }
- $model_order = Model('order');
- $logic_order = Logic('order');
- $condition['buyer_id'] = $this->member_info['member_id'];
- Log::record("buyer_id = {$condition['buyer_id']}", Log::DEBUG);
- $order_info = $model_order->getOrderInfo($condition);
- // $if_allow = $model_order->getOrderOperateState('buyer_cancel', $order_info);
- // if (!$if_allow) {
- // return joutput_error(errcode::ErrOrder, '无权操作');
- // }
- if ($order_info['order_state'] != ORDER_STATE_NEW) {
- Log::record("order_state = {$order_info['order_state']}.", Log::ERR);
- return joutput_error(errcode::ErrOrder, "已支付和已发货订单不能取消.");
- }
- $result = $logic_order->changeOrderStateCancel($order_info, 'buyer', $this->member_info['member_name'], '其它原因');
- if (!$result['state']) {
- return joutput_error(errcode::ErrOrder, $result['msg']);
- } else {
- joutput_data(array('result' => '1'));
- }
- }
- /**
- * 订单确认收货
- */
- public function order_receiveOp()
- {
- $token = trim($_GET['key']);
- if (false == $this->checkToken($token)) {
- return joutput_error($this->err_code);
- }
- $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) {
- return joutput_error(errcode::ErrOrder, '无权操作');
- }
- $result = $logic_order->changeOrderStateReceive($order_info, 'buyer', $this->member_info['member_name']);
- if (!$result['state']) {
- return joutput_error(errcode::ErrOrder, $result['msg']);
- } else {
- joutput_data(array('result' => '1'));
- }
- }
- /**
- * 物流跟踪
- */
- public function search_deliverOp()
- {
- $token = trim($_GET['key']);
- if (false == $this->checkToken($token)) {
- return joutput_error($this->err_code);
- }
- $order_id = intval($_POST['order_id']);
- if ($order_id <= 0) {
- return joutput_error(errcode::ErrOrder, '订单不存在');
- }
- $model_order = Model('order');
- $condition['order_id'] = $order_id;
- $condition['buyer_id'] = $this->member_info['member_id'];
- $order_info = $model_order->getOrderInfo($condition, array('order_common', 'order_goods'));
- if (empty($order_info) || !in_array($order_info['order_state'], array(ORDER_STATE_SEND, ORDER_STATE_SUCCESS))) {
- return joutput_error(errcode::ErrOrder, '订单不存在');
- }
- $express = rkcache('express', true);
- $e_code = $express[$order_info['extend_order_common']['shipping_express_id']]['e_kdn_code'];
- $e_name = $express[$order_info['extend_order_common']['shipping_express_id']]['e_name'];
- $key = "express_" . $order_info['shipping_code'];
- $deliver_info = rkcache($key);
- if(empty($deliver_info))
- {
- //$deliver_info = $this->getOrderTracesByJson('STO', '3304699247030');
- $deliver_info = $this->_get_express($e_code, $order_info['shipping_code']);
- if ($deliver_info === false) {
- return;
- }
- wkcache($key,$deliver_info,3600);
- }
- $deliver_info = json_decode($deliver_info, true);
- $routes = $deliver_info['Traces'];
- krsort($routes);
- switch ($deliver_info['State']) {
- case '1':
- break;
- case '2':
- $msg = '在途中';
- break;
- case '3':
- $msg = '已签收';
- break;
- case '4':
- $msg = '问题件';
- break;
- }
- Tpl::output('msg_statu', $msg);
- Tpl::output('LogisticCode', $deliver_info['LogisticCode']);
- Tpl::output('routes', $routes);
- Tpl::showpage('express_info');
- }
- /**
- * 从第三方取快递信息
- *
- */
- public function _get_express($e_code, $shipping_code)
- {
- $url = 'http://www.kuaidi100.com/query?type=' . $e_code . '&postid=' . $shipping_code . '&id=1&valicode=&temp=' . random(4) . '&sessionid=&tmp=' . random(4);
- import('function.ftp');
- $content = dfsockopen($url);
- $content = json_decode($content, true);
- if ($content['status'] != 200) {
- joutput_error(errcode::ErrOrder, '物流信息查询失败');
- return false;
- }
- $content['data'] = array_reverse($content['data']);
- $output = array();
- if (is_array($content['data'])) {
- foreach ($content['data'] as $k => $v) {
- if ($v['time'] == '') continue;
- $output[] = $v['time'] . ' ' . $v['context'];
- }
- }
- if (empty($output)) exit(json_encode(false));
- if (strtoupper(CHARSET) == 'GBK') {
- $output = Language::getUTF8($output);//网站GBK使用编码时,转换为UTF-8,防止json输出汉字问题
- }
- return $output;
- }
- /**
- * 获取不同状态下订单数量
- */
- public function orderCountStateOp()
- {
- $token = trim($_GET['key']);
- if (false == $this->checkToken($token)) {
- return joutput_error($this->err_code);
- }
- $condition = array();
- $condition['buyer_id'] = $this->member_info['member_id'];
- $result = Model()->table('order')->field('order_state, count(*) as count')->where($condition)->group('order_state')->select();
- joutput_data(array('order_count' => $result));
- }
- /**
- * 快递鸟接口方式
- * Json方式 查询订单物流轨迹
- */
- public function getOrderTracesByJson($shipperCode, $logisticCode)
- {
- $requestData = "{\"OrderCode\":\"\",\"ShipperCode\":\"" . $shipperCode . "\",\"LogisticCode\":\"" . $logisticCode . "\"}";
- $datas = array(
- 'EBusinessID' => '1256051',
- 'RequestType' => '1002',
- 'RequestData' => urlencode($requestData),
- 'DataType' => '2',
- );
- $datas['DataSign'] = $this->encrypt($requestData, '6718d260-e2b6-4329-ad78-daff173309ac');
- $result = $this->sendPost('http://api.kdniao.cc/Ebusiness/EbusinessOrderHandle.aspx', $datas);
- return $result;
- }
- /**
- * 快递鸟接口方式
- * post提交数据
- * @param string $url 请求Url
- * @param array $datas 提交的数据
- * @return url响应返回的html
- */
- public function sendPost($url, $datas)
- {
- $temps = array();
- foreach ($datas as $key => $value) {
- $temps[] = sprintf('%s=%s', $key, $value);
- }
- $post_data = implode('&', $temps);
- $url_info = parse_url($url);
- $httpheader = "POST " . $url_info['path'] . " HTTP/1.0\r\n";
- $httpheader .= "Host:" . $url_info['host'] . "\r\n";
- $httpheader .= "Content-Type:application/x-www-form-urlencoded\r\n";
- $httpheader .= "Content-Length:" . strlen($post_data) . "\r\n";
- $httpheader .= "Connection:close\r\n\r\n";
- $httpheader .= $post_data;
- $fd = fsockopen($url_info['host'], 80);
- fwrite($fd, $httpheader);
- $gets = "";
- while (!feof($fd)) {
- if (($header = @fgets($fd)) && ($header == "\r\n" || $header == "\n")) {
- break;
- }
- }
- while (!feof($fd)) {
- $gets .= fread($fd, 128);
- }
- fclose($fd);
- return $gets;
- }
- /**
- * 快递鸟接口方式
- * 电商Sign签名生成
- * @param data
- * @param appkey Appkey
- * @return DataSign签名
- */
- public function encrypt($data, $appkey)
- {
- return urlencode(base64_encode(md5($data . $appkey)));
- }
- }
|