load->model("BIZ_train_model"); $this->load->model("train_system_model"); $this->load->helper('train'); $this->db_train_zw = $this->config->item('db_train_zw'); $this->train_zw = $this->config->item('train_zw'); $this->black_list = $this->config->item('black_list'); $this->isauto = 0; } public function index(){ //$this->BIZ_train_model->delete_other(); } //1903241050 public function check_autotickets(){ log_message('error','auto ticket'); date_default_timezone_set('Asia/Shanghai'); //判断账户余额,如果小于1000自动退出。 $post_data = array("key"=>JUHE_TRAIN_API_KEY); $back_data = GetPost_http("http://op.juhe.cn/trainTickets/balance.php",$post_data); $price = json_decode($back_data)->result; print_r('账户余额:'.$price); if($price < 1000){ exit('账户余额不足'); } //筛选出能自动出票的订单 $auto_pool = $this->BIZ_train_model->auto_check_ticket(); //创建一个不允许自动出票的国际火车票数组 $nation_train = array('K19', 'K23', 'Z8701', 'Z8702', 'Z97', 'Z98', 'Z99', 'Z100', 'K9795'); //创建黑名单 $black_list = $this->config->item('black_list'); $string = ''; foreach($auto_pool as $item){ $this->isauto = 1; $bpe_sn = ''; $back_message = ''; $cold_sn = $item->COLD_SN; $coli_id = $item->coli_id; $back_data = 1; $people_arr = $this->BIZ_train_model->biz_people($cold_sn); $train_info = $this->BIZ_train_model->get_biz_foi($cold_sn); if($item->COLD_SPFS > 1){ //寄送票 $back_data = 0; $back_message .= '-邮寄不自动出票'; } //乘客人数大于5人不出票 if(count($people_arr) > 5){ $back_data = 0; $back_message .= '-乘客人数大于5不自动出票'; } //护照号如果在黑名单的就不自动出票 foreach($people_arr as $people_info){ if(in_array($people_info->BPE_Passport,$black_list)){ $back_data = 0; $back_message .= '-此用户为黑名单用户,不自动出票'; } if(strlen($people_info->BPE_Passport) >= 18){ $back_data = 0; $back_message .= '-护照位数大于18不自动出票'; } $bpe_sn .= $people_info->BPE_SN.','; } $bpe_sn = substr($bpe_sn,0,strlen($bpe_sn)-1); //单张票价不能大于1000人民币 if($train_info[0]->adultcost > 1000){ $back_data = 0; $back_message .= '-单价大于1000不自动出票'; } //如果为国际火车票就不出票 if(in_array($train_info[0]->FlightsNo, $nation_train)){ $back_data = 0; $back_message .= '-国际火车票不自动出票'; } //无座的订单不做出票 if($train_info[0]->Aircraft == 'WZ'){ $back_data = 0; $back_message .= '-无座不自动出票'; } //香港火车不自动出票 if($train_info[0]->DepartAirport == 'XJA'){ $back_data = 0; $back_message .= '-香港火车不自动出票'; } $DepartureDate = strtotime($train_info[0]->DepartureDate); $time = time(); $depart_diff = ($DepartureDate - $time) / 86400; if($train_info[0]->ArrivalAirport == 'XJA' && $train_info[0]->adultcost > 500 && $depart_diff > 5){ $back_data = 0; $back_message .= '-内地香港火车金额大于500超过五天不自动出票'; } //print_r($train_info); //如果刚好是第三十天的订单 if(($item->COLI_State == '8' || $item->COLI_State == '63')){ $this->isauto = 3; $time_obj = $this->BIZ_train_model->get_saletime($train_info['0']->DepartAirport_cn); if(!empty($time_obj)){ $saletime = strtotime(date('Y-m-d').' '.$time_obj->TST_saletime); //echo $saletime; $sale_diff = (time() - $saletime) / 3600; echo $cold_sn.'_'.date('Y-m-d').' '.$time_obj->TST_saletime.'/'.$saletime.'
'; if($sale_diff > 1){ $back_data = 0; $back_message .= '-超过抢票时间'; }else if($sale_diff <0){ $back_data = 0; $back_message .= '-未到抢票时间'; } } } if($back_data == 0){ $string .= '汉特订单号:'.$coli_id.'('.$cold_sn.'/'.$this->isauto.')'.$back_message.''; }else{ //单个订单提交 echo $cold_sn.'
'; //$this->booktickets($cold_sn,$bpe_sn,'','juhe'); //$string .= '汉特订单号:'.$coli_id.'('.$cold_sn.')可以自动出票'; } } print_r(''.$string.'
'); } //创建一个方法用于接收所有的出票请求 public function booktickets($cold_sn=null,$bpe_sn=null,$selectseat=null,$type=null){ if(empty($cold_sn) && empty($bpe_sn)){ //接收子表订单号 $cold_sn = $this->input->get_post('order'); //接收客人表sn $bpe_sn = $this->input->get_post("people"); //接收选座字符串 $selectseat = $this->input->get_post("selectseat"); //接收出票接口 $type = $this->input->get_post("type"); } //测试数据 /*$cold_sn = '488121613'; $bpe_sn = '473183645,473183646,473183647'; $selectseat = ''; $type = 'juhe';*/ if(!is_numeric($cold_sn)){ $reback["mes"]="订单号是数字"; echo json_encode($reback); return false; } if(empty($bpe_sn)){ $reback["mes"]="请选择乘客"; echo json_encode($reback); return false; } $data['train'] = $this->BIZ_train_model->biz_order_detail($cold_sn); $data['people_list']=$this->BIZ_train_model->in_bpesn_people_info($bpe_sn); if($selectseat == ''){ $selectseat = ''; $train_select = $data['train']->FOI_SelectedSeat; $obj = explode(',',$train_select); foreach($obj as $value){ $selectseat .= $value; } } if (empty($data['train'])) { //显示错误,找不到车次 $reback["mes"]="找不到车次"; echo json_encode($reback); return false; } if (empty($data['people_list'])) { //显示错误,找不到用户信息 $reback["mes"]="找不到乘客信息"; echo json_encode($reback); return false; } if (count($data['people_list']) > 5) { //显示错误,用户超过五个 $reback["mes"]="乘客不能超过五个"; echo json_encode($reback); return false; } switch ($type){ case 'juhe': $this->juheModel($data,$selectseat,$cold_sn); break; case 'tuniu': $this->tuniuModel($data,$selectseat,$cold_sn); break; case 'ctrip': $this->ctripModel($data,$selectseat,$cold_sn); break; } } function juheModel($data=null,$selectseat=null,$cold_sn=null){ $zwcode = $this->db_train_zw[$data['train']->Aircraft]; //座位简码 $zwname = $this->train_zw[$this->db_train_zw[$data['train']->Aircraft]]; //座位名称 //进行提交字符串的拼接 $passengers = ""; foreach ($data['people_list'] as $key => $item) { //乘客姓名 $passengersename = $item->BPE_FirstName.$item->BPE_MiddleName.$item->BPE_LastName; //将特殊字符转换为正常字符以便于出票 $passengersename = chk_sp_name($passengersename); //乘客类型 switch ($item->BPE_GuestType) { case 1: $piaotype = 1; $piaotypename = "成人票"; break; case 2: $piaotype = 2; $piaotypename = "儿童票"; break; default://外国人应该就两种票吧 $piaotype = 1; $piaotypename = "成人票"; break; } //证件类型 switch ($item->BPE_PassportType){ case 'Chinese ID': $passporttypeseid = "1"; $passporttypeseidname = "二代身份证"; break; case 'Travel Permit from Hong Kong / Macau': $passporttypeseid = "C"; $passporttypeseidname = "港澳通行证"; break; case 'Travel Permit from Taiwan': $passporttypeseid = "G"; $passporttypeseidname = "台湾通行证"; break; default : $passporttypeseid = "B"; $passporttypeseidname = "护照"; break; } switch ($item->BPE_SEX){ case '100003': $sex = 'F'; break; case '100001': $sex = 'M'; break; } $passportseno = str_replace(' ','',$item->BPE_Passport); //添加一个判断护照号是否在黑名单 if(in_array($passportseno,$this->black_list)){ $reback["mes"] = "乘客为黑名单用户"; echo json_encode($reback); return false; } if($passporttypeseid == 'G'){ $passengers .= ',{"passengerid":' . (++$key) . ',"passengersename":"' . $passengersename . '","piaotype":"' . $piaotype . '","piaotypename":"' . $piaotypename . '","passporttypeseid":"' . $passporttypeseid . '","passporttypeseidname":"' . $passporttypeseidname . '","passportseno":"' . $passportseno . '","price":"1","zwcode":"' . $zwcode . '","zwname":"' . $zwname . '","gatValidDateEnd":"'.$item->BPE_PassExpdate.'","gatBornDate":"'.$item->BPE_BirthDate.'","sexCode":"'.$sex.'"}'; }else{ $passengers .= ',{"passengerid":' . ( ++$key) . ',"passengersename":"' . $passengersename . '","piaotype":"' . $piaotype . '","piaotypename":"' . $piaotypename . '","passporttypeseid":"' . $passporttypeseid . '","passporttypeseidname":"' . $passporttypeseidname . '","passportseno":"' . $passportseno . '","price":"1","zwcode":"' . $zwcode . '","zwname":"' . $zwname . '"}'; } } $passengers .= "]"; $passengers = substr($passengers, 1); $passengers = "[" . $passengers; if(empty($selectseat)){ $post_data=array( "key"=>JUHE_TRAIN_API_KEY, "user_orderid"=>$cold_sn,//自定义订单号 "train_date"=>substr($data["train"]->DepartureDate, 0, 10), "is_accept_standing"=>"no", "from_station_name"=>$data["train"]->DepartAirport_cn, "from_station_code"=>$data["train"]->DepartAirport, "to_station_code"=>$data["train"]->ArrivalAirport, "to_station_name"=>$data["train"]->ArrivalAirport_cn, "passengers"=>$passengers, "checi"=>$data["train"]->FlightsNo ); }else{ $post_data=array( "key"=>JUHE_TRAIN_API_KEY, "user_orderid"=>$cold_sn,//自定义订单号 "train_date"=>substr($data["train"]->DepartureDate, 0, 10), "is_accept_standing"=>"no", "choose_seats"=>$selectseat, "from_station_name"=>$data["train"]->DepartAirport_cn, "from_station_code"=>$data["train"]->DepartAirport, "to_station_code"=>$data["train"]->ArrivalAirport, "to_station_name"=>$data["train"]->ArrivalAirport_cn, "passengers"=>$passengers, "checi"=>$data["train"]->FlightsNo ); } //发起请求 /*$add_data = new stdClass(); $back_json = GetPost_http('http://op.juhe.cn/trainTickets/submit',$post_data); $back_data = json_decode($back_json); if(!$back_data->error_code){ $add_data->ordernumber = $back_data->result->orderid; $reback["status"] = 1; $reback["order"] = $back_data->result->orderid; $reback["mes"] = "订单提交成功,等待回调"; }else{ $add_data->ordernumber=null; $reback["mes"] = $back_json; $add_data->status = "e"; }*/ //本地订单入库 $add_data->cold_sn = $cold_sn; $add_data->returncode = $back_data->error_code; $add_data->status = '2'; $add_data->errormsg = '预定中'; $add_data->checi = $data['train']->FlightsNo; $add_data->fromstationame = $data['train']->DepartAirport_cn; $add_data->fromstationcode = $data['train']->DepartAirport; $add_data->tostationame = $data['train']->ArrivalAirport_cn; $add_data->tostationcode = $data['train']->ArrivalAirport; $add_data->startdate = date('Y-m-d',strtotime($data['train']->DepartureDate)); $add_data->startime = date('H:i',strtotime($data['train']->DepartureTime)); $add_data->endtime = date('H:i',strtotime($data['train']->ArrivalTime)); $add_data->runtime = (strtotime($data['train']->ArrivalTime) - strtotime($data['train']->DepartureTime)) / 60; $add_data->channel = 'juhe'; $add_data->isauto = $this->isauto; print_r($add_data); /*$this->train_system_model->add_orders($add_data); echo json_encode($reback); return false;*/ } public function test_add(){ $add_data->cold_sn = '123123'; $add_data->returncode = '123123'; $add_data->status = '2'; $add_data->errormsg = '预定中'; $add_data->checi = 'G89'; $add_data->fromstationame = '北京'; $add_data->fromstationcode = 'BJP'; $add_data->tostationame = '上海'; $add_data->tostationcode = 'SHH'; $add_data->startdate = '2019-02-09'; $add_data->startime = '14:00'; $add_data->endtime = '19:00'; $add_data->runtime = '300'; $add_data->channel = 'juhe'; $add_data->isauto = 3; print_r($add_data); $this->train_system_model->add_orders($add_data); } public function juhecallback(){ /*$data_post = $this->input->post(); if(empty($data_post)){ header("HTTP/1.1 404 Not Found"); exit('{"reason":"empty infos","status":"404"}'); }*/ //调试代码 $test_post = '{"data":"{\"from_station_name\":\"\u5e7f\u5dde\u5357\",\"from_station_code\":\"IZQ\",\"to_station_name\":\"\u9999\u6e2f\u897f\u4e5d\u9f99\",\"to_station_code\":\"XJA\",\"train_date\":\"2019-04-29\",\"orderid\":\"JH155651319519711\",\"user_orderid\":\"488132483\",\"orderamount\":\"374.00\",\"ordernumber\":\"E244376926\",\"checi\":\"G6537\",\"msg\":\"\u51fa\u7968\u6210\u529f\",\"status\":\"4\",\"passengers\":[{\"passengerid\":1,\"passengersename\":\"PRIETORAMOSJORGECLAUDIO\",\"piaotype\":\"1\",\"piaotypename\":\"\u6210\u4eba\u7968\",\"passporttypeseid\":\"B\",\"passporttypeseidname\":\"\u62a4\u7167\",\"passportseno\":\"AAC408307\",\"price\":\"187.0\",\"zwcode\":\"O\",\"zwname\":\"\u4e8c\u7b49\u5ea7\",\"ticket_no\":\"E244376926111013D\",\"cxin\":\"11\u8f66\u53a2,13D\u5ea7\",\"reason\":0},{\"passengerid\":2,\"passengersename\":\"SALAZARNATALIAGISELA\",\"piaotype\":\"1\",\"piaotypename\":\"\u6210\u4eba\u7968\",\"passporttypeseid\":\"B\",\"passporttypeseidname\":\"\u62a4\u7167\",\"passportseno\":\"AAC419811\",\"price\":\"187.0\",\"zwcode\":\"O\",\"zwname\":\"\u4e8c\u7b49\u5ea7\",\"ticket_no\":\"E244376926111013F\",\"cxin\":\"11\u8f66\u53a2,13F\u5ea7\",\"reason\":0}],\"refund_money\":null,\"sign\":\"831c146e2ce223a5437ed78db0ec8c25\"}"}'; $data_post["data"] = json_decode($test_post)->data; log_message('error','聚合回调:'.json_encode($data_post)); $data = json_decode($data_post["data"]); $update_data = new StdClass(); $update_data->OrderStatus = $data->status; $update_data->ordernumber = $data->orderid; $update_data->OrderTotleFee = $data->orderamount; $update_data->seatsinfo = ''; $update_data->TicketCheck = ''; $update_data->bookcallback = ''; $update_data->confirmcallback = ''; $update_data->returncallback = ''; $update_data->ElectronicOrderNumber = $data->ordernumber; $update_data->reschedulecallback = ''; $update_data->ErrorMsg = $data->msg; //如果返回2则发送出票请求 if($data->status == "1"){ $update_data->bookcallback = $data_post["data"]; }elseif($data->status == "2"){ $coach = array(); $seats = array(); $string = ''; $passagers = $data->passengers; foreach($passagers as $item){ foreach(explode(',',$item->cxin) as $item_seat){ if(strpos($item_seat,'车厢')){ $item_seat = str_replace('车厢','',$item_seat); array_push($coach,$item_seat); }else{ $find = array('座上铺','座中铺','座下铺','座'); $replace = array(' upper',' middle',' lower',''); $item_seat = str_replace($find,$replace,$item_seat); array_push($seats,$item_seat); } } //对订票乘客进行存储 $data_passager->ordernumber = $data->orderid; $data_passager->realname = $item->passengersename; $data_passager->identitytype = $item->passporttypeseidname; $data_passager->numberid = $item->passportseno; $data_passager->ticketype = $item->piaotypename; $data_passager->ticketprice = $item->price; $data_passager->seatype = $item->zwname; $data_passager->seatdetail = $item->cxin; $data_passager->status = '4'; $this->train_system_model->add_passagers($data_passager); } //判断车厢是否唯一,如果不唯一的话,分成两个车厢 if(count(array_unique($coach)) == 1){ $onlycoach = array_unique($coach); $string .= 'Coach '.$onlycoach[0].','; }else{ foreach (array_unique($coach) as $item_coach){ $string .= 'Coach '.$item_coach.','; } } $string .= 'Seat '; foreach($seats as $item_seat){ $string .= $item_seat.','; } $seatinfo = substr($string,0,strlen($string)-1); $update_data->seatsinfo = $seatinfo; $post_data = array( "key"=>JUHE_TRAIN_API_KEY, "orderid"=>$data->orderid ); $back_json = GetPost_http(JUHE_TRAIN_PAY_API,$post_data); $update_data->bookcallback = $data_post["data"]; }elseif($data->status == "4"){ $add_train_order_data->TOC_Memo = $data->orderid." 聚合出票"; $add_train_order_data->TOC_COLD_SN = $data->user_orderid; $add_train_order_data->TOC_TrainNumber = $data->checi; $add_train_order_data->TOC_DepartureDate = $data->train_date; $add_train_order_data->TOC_TicketCost = $data->orderamount; $add_train_order_data->poundage = (count($data->passengers)*2)."";//手续费,每人两块,转换成字符串 $add_train_order_data->FOI_TrainNetOrderNo = $data->ordernumber; $this->BIZ_train_model->add_train_payment($add_train_order_data); $update_data->confirmcallback = $data_post["data"]; $this->BIZ_train_model->update_cold_planvei_sn($data->user_orderid); }elseif($data->status=="7"){ //退票成功 写入TOC表 $newtime = "";//记录最新操作时间 $refund_passportseno = "";//退票人护照号 $refund_money = "";//退票金额 foreach ($data->passengers as $p) { if(isset($p->returntickets)){ $refund_passportseno = $p->refundTimeline[count($p->refundTimeline)-1]->detail->passportseno; $refund_money = $p->refundTimeline[count($p->refundTimeline)-1]->detail->returnmoney; //退票时还需要单独对对每个乘客存储回调信息 $passpager_info = new stdClass(); $passpager_info->returncallback = $data_post["data"]; $passpager_info->status = '7'; $passpager_info->ordernumber = $data->orderid; $passpager_info->realname = $p->refundTimeline[count($p->refundTimeline)-1]->detail->passengername; $passpager_info->numberid = $refund_passportseno; print_r($passpager_info); $this->train_system_model->update_passpager_info($passpager_info); //添加退款记录 $add_train_order_data->TOC_COLD_SN = $data->user_orderid; $add_train_order_data->TOC_Memo = $data->orderid." ".$refund_passportseno; $add_train_order_data->ordernumber = $data->user_orderid; $add_train_order_data->TOC_TrainNumber = $data->checi; $add_train_order_data->TOC_DepartureDate = $data->train_date; $add_train_order_data->TOC_TicketCost = -$refund_money; $add_train_order_data->FOI_TrainNetOrderNo = null;//退票不用更新取票号,以此在模型里面判断是否为退票消息 $this->BIZ_train_model->add_train_payment($add_train_order_data); }else{ //有可能提交了退票或者还没有退票 } } $update_data->returncallback = $data_post["data"]; } //print_r($update_data);die(); //更新订单信息(出票系统) $this->train_system_model->update_orders($update_data); } }