config->load('config'); $this->order_status_msg=$this->config->item('train_order_status_msg'); $this->key=JUHE_TRAIN_API_KEY; $this->cx_api=JUHE_TRAIN_CX_API; $this->dp_api=JUHE_TRAIN_DP_API; $this->qxdd_api=JUHE_TRAIN_CANCEL_API; $this->pay_api=JUHE_TRAIN_PAY_API; $this->refund_api=JUHE_TRAIN_REFUND_API; $this->status_api=JUHE_TRAIN_STATUS_API; $this->code_zw=$this->config->item('train_zw'); $this->piaotype=$this->config->item('train_piaotype'); $this->passportty=$this->config->item('train_passportty'); $this->balance_api = "http://op.juhe.cn/trainTickets/balance.php";//余额 $this->load->model("BIZ_train_model");//加载模型 } //index public function index(){ echo 'index'; //print_r($black_list); } //用于自动发送确认信 public function send_confirmmail(){ //header('Location: http://www.mycht.cn/info.php/apps/trainsystem/api/send_confirmmail'); die(); $mailarr = $this->BIZ_train_model->auto_sendmail(); foreach($mailarr as $obj){ $coli_id = $this->BIZ_train_model->cold_sn_get_coli_id($obj->JOL_COLD_SN); $coli_id = $coli_id[0]->COLI_ID; $juhe_order = $obj->JOL_JuheOrder; $this->send_mail_to_guest($coli_id,$juhe_order); } } //用于自动出票 public function auto_pay_ticket(){ //header('Location: http://www.mycht.cn/info.php/apps/trainsystem/addorders/auto_pay_ticket'); die(); date_default_timezone_set('Asia/Shanghai'); //$this->BIZ_train_model->auto_add(); //判断账户余额,如果小于1000自动退出。 $post_data=array("key"=>$this->key); $back_data=$this->post_data($this->balance_api,$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->ticketype = 1; $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); //print_r($train_info); 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不自动出票'; } } //单张票价不能大于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->ticketype = 3; $time_obj = $this->BIZ_train_model->get_saletime($train_info['0']->DepartAirport_cn); //print_r($time_obj); if(!empty($time_obj)){ $saletime = strtotime($time_obj->TST_saletime); //echo $saletime; $sale_diff = (time() - $saletime) / 3600; 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.')'.$back_message.''; }else{ //单个订单提交 $this->submit_juhe_order($cold_sn,$coli_id); //$string .= '汉特订单号:'.$coli_id.'('.$cold_sn.')可以自动出票'; } } print_r(''.$string.'
'); } //根据汉特订单明细表SN来获取车次,乘客信息,拼接成聚合提交订单的url public function submit_juhe_order($cold_sn,$coli_id) { // $cold_sn=$this->input->get("order"); $data = array(); $reback=array();//返回数据 $reback["status"]=0; $reback["mes"]=""; // $reback["order"] = "123"; // return $reback;die; if(!is_numeric($cold_sn)){ $reback["mes"]="订单号是数字"; echo json_encode($reback); return false; } $data['train'] = $this->BIZ_train_model->biz_order_detail($cold_sn); if (empty($data['train'])) { //显示错误,找不到车次 $reback["mes"]="找不到车次"; echo json_encode($reback); return false; } //选座功能 $selectseat = ''; $train_select = $data['train']->FOI_SelectedSeat; $obj = explode(',',$train_select); foreach($obj as $value){ $selectseat .= $value; } $data['people_list'] = $this->BIZ_train_model->biz_people($cold_sn); 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; } $db_train_zw = $this->config->item('db_train_zw'); $train_zw = $this->config->item('train_zw'); $passengers=''; foreach ($data['people_list'] as $key => $item) { $zwcode = $db_train_zw[$data['train']->Aircraft]; //座位简码 $zwname = $train_zw[$db_train_zw[$data['train']->Aircraft]]; //座位名称 //乘客姓名(聚合要求名字中不能出现空格字符) $passengersename = str_replace(' ','',$item->BPE_FirstName) . str_replace(' ','',$item->BPE_MiddleName) . str_replace(' ','',$item->BPE_LastName); //将/替换掉 $passengersename = str_replace('/','',$passengersename); $passengersename = $this->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 'Travel Permit from Hong Kong / Macau': $passporttypeseid = "C"; $passporttypeseidname = "港澳通行证"; break; case 'Travel Permit from Taiwan': $passporttypeseid = "G"; $passporttypeseidname = "台湾通行证"; break; default : $passporttypeseid = "B"; $passporttypeseidname = "护照"; break; } $passportseno = str_replace(' ','',$item->BPE_Passport); $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; $url=$this->dp_api; $post_data=array( "key"=>$this->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 ); $arr = ''; foreach($post_data as $key=>$value){ $arr .= $key.'='.$value.';'; } //return '汉特订单号:'.$coli_id.'-可以自动出票---'.$arr; //echo '
'; //print_r($url); //print_r($post_data); //echo '
'; //print_r($post_data); //die(); $bakc_json=$this->post_data($url,$post_data); $bakc=json_decode($bakc_json);//json=>obj $add_data=new StdClass(); $add_data->JOL_COLD_SN=(int)$cold_sn; $add_data->JOL_Status="0"; $add_data->JOL_RebackMsg=$bakc->reason; $add_data->JOL_FromStation=$data["train"]->DepartAirport_cn; $add_data->JOL_ToStation=$data["train"]->ArrivalAirport_cn; $add_data->JOL_FromStationCode=$data["train"]->DepartAirport; $add_data->JOL_ToStationCode=$data["train"]->ArrivalAirport; $add_data->JOL_TrainCode=$data["train"]->FlightsNo; $add_data->JOL_BackTxt=$bakc_json; if(!$bakc->error_code){ $add_data->JOL_JuheOrder=$bakc->result->orderid; $reback["status"]=1; $reback["order"]=$bakc->result->orderid; $reback["mes"]="订单提交成功,等待回调"; //$this->send_mail_to_wl("订单:{$coli_id} 提交成功","翰特订单号:{$coli_id} ;聚合订单号:{$bakc->result->orderid}",$coli_id); }else{ $add_data->JOL_JuheOrder=null; $reback["mes"]= $bakc_json; $add_data->JOL_Status="e"; // $this->send_mail_to_wl("订单:{$coli_id} 提交失败","翰特订单号:{$coli_id}",$coli_id); } //聚合返回数据之后记录到聚合订单表 $add_back_data=$this->BIZ_train_model->add_biz_jol($add_data,$this->ticketype); return $reback; } public function ticket_status($coli_sn="",$jh_id=""){ if(empty($coli_sn)){ $coli_sn = $this->input->get("sn"); } if(empty($jh_id)){ $jh_id = $this->input->get("reback"); } if(empty($coli_sn) or empty($jh_id)){ echo "error"; return false; } $jh_id = explode(",", $jh_id); $cold_sn = $this->BIZ_train_model->get_cold_sn($coli_sn); $cols_id = $this->BIZ_train_model->coli_sn_get_coli_id($coli_sn); if(empty($cold_sn)){ echo "error"; return false; }else{ $list=new StdClass; $list->info=array(); foreach ($cold_sn as $key => $v) { $list->info[$key]=new StdClass; $list->info[$key]->people=$this->BIZ_train_model->biz_people($v->COLD_SN); $list->info[$key]->train=$this->BIZ_train_model->get_biz_foi($v->COLD_SN); foreach ($jh_id as $jh_id_v) { $list->info[$key]->order_info = $this->BIZ_train_model->get_biz_jol_info($v->COLD_SN,$jh_id_v); if(!empty($list->info[$key]->order_info)) break; } } } $list->cols_id = $cols_id[0]->COLI_ID; $this->load->view("ticket_status",$list); } //发邮件给外联 public function send_mail_to_wl($subject,$body,$coli_id){ //$subject = 'autopay ticket'; //$body = 'this is autopay ticket'; $this->load->model("Sendmail_model"); $fromName = "cyc"; $fromEmail = "cyc@hainatravel.com"; //获取该订单的操作员的邮箱以及姓名 $info = $this->BIZ_train_model->get_operatorInfo($coli_id); $toName = $info[0]->OPI_Name; $toEmail = $info[0]->OPI_Email; $this->Sendmail_model->SendMailToTable($fromName,$fromEmail,$toName,$toEmail,$subject,$body); } //发邮件给客人(测试) public function send_mail_to_guest_old($coli_id,$jh_order){ $this->load->model("Sendmail_model"); $info = $this->BIZ_train_model->get_user_info($jh_order); $guest = $this->BIZ_train_model->get_guest_info($coli_id); //print_r($guest); $operator_info = $this->BIZ_train_model->get_operatorInfo($coli_id); $fromName = $operator_info[0]->Name; $fromEmail = $operator_info[0]->OPI_Email; $toName = $guest[0]->GUT_LastName.$guest[0]->GUT_FirstName; $toEmail = $guest[0]->GUT_Email;// $data['coli_id'] = $coli_id; $data['toname'] = $toName; $data['adult'] = $info->COLD_PersonNum; $data['chlid'] = $info->COLD_ChildNum; $data['baby'] = $info->COLD_BabyNum; $data['price'] = $this->BIZ_train_model->get_paypal($coli_id); $data['allpeople'] = $this->BIZ_train_model->biz_people($info->COLD_SN); $data['train_info'] = $this->BIZ_train_model->get_biz_foi($info->COLD_SN); $differtime = (strtotime($data['train_info'][0]->DepartureTime) - time()) / 3600; $obj = $this->BIZ_train_model->get_biz_jol_info($info->COLD_SN,$jh_order); $data['juhe_info'] = json_decode($obj->JOL_BackTxt); $status = $obj->JOL_Status; $data['operator'] = $operator_info; $data['emailarr'] = explode(';',$operator_info[0]->Email); $coach = array(); $seats = array(); $string = ''; foreach($data['juhe_info']->passengers as $item){ foreach(explode(',',$item->cxin) as $item){ if(strpos($item,'车厢')){ $item = str_replace('车厢','',$item); array_push($coach,$item); }else{ $find = array('座上铺','座中铺','座下铺','座'); $replace = array(' upper',' middle',' lower',''); $item = str_replace($find,$replace,$item); array_push($seats,$item); } } } //判断车厢是否唯一,如果不唯一的话,分成两个车厢 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.','; } $data['seatinfo'] = substr($string,0,strlen($string)-1); if($status == '4' && $differtime > 0){ $subject = "Got payment and issued train ticket(s), Order No $coli_id"; $body = $this->load->view('email',$data,true); print_r($body); //$this->send_mail_to_wl("订单:{$coli_id} 出票成功","翰特订单号:{$coli_id};聚合订单号:{$jh_order}",$coli_id); //发送邮件给客人 //$flag = $this->Sendmail_model->SendMailToTable($fromName,$fromEmail,$toName,$toEmail,$subject,$body); }else if($status == '1' && $differtime < 18 && $differtime > 0){ $subject = "The train ticket(s) will be issued manually, Order No $coli_id"; $body = $this->load->view('email_fault',$data,true); print_r($body); //$this->send_mail_to_wl("订单:{$coli_id} 出票失败","翰特订单号:{$coli_id};聚合订单号:{$jh_order}",$coli_id); //测试阶段,将失败邮件发送一份给操作外联。 //$flag = $this->Sendmail_model->SendMailToTable($fromName,$fromEmail,$fromName,$fromEmail,$subject,$body); //测试阶段,将失败邮件发送一份给操作外联。 //$this->Sendmail_model->SendMailToTable($fromName,$fromEmail,$toName,$toEmail,$subject,$body); }else{ echo $jh_order.'不需要发邮件
'; //$this->BIZ_train_model->update_biz_jol(array("JOL_JuheOrder"=>$jh_order),array("JOL_SendMail"=>2)); $flag = false; } if($flag){ //$this->BIZ_train_model->update_biz_jol(array("JOL_JuheOrder"=>$jh_order),array("JOL_SendMail"=>1,"JOL_M_SN"=>$flag)); } } //发邮件给客人 public function send_mail_to_guest($coli_id,$jh_order){ $this->load->model("Sendmail_model"); $info = $this->BIZ_train_model->get_user_info($jh_order); $guest = $this->BIZ_train_model->get_guest_info($coli_id); //print_r($guest); $operator_info = $this->BIZ_train_model->get_operatorInfo($coli_id); $fromName = $operator_info[0]->Name; $fromEmail = $operator_info[0]->OPI_Email; $toName = $guest[0]->GUT_LastName.$guest[0]->GUT_FirstName; $toEmail = $guest[0]->GUT_Email;// $data['coli_id'] = $coli_id; $data['toname'] = $toName; $data['adult'] = $info->COLD_PersonNum; $data['chlid'] = $info->COLD_ChildNum; $data['baby'] = $info->COLD_BabyNum; $data['price'] = $this->BIZ_train_model->get_paypal($coli_id); $data['allpeople'] = $this->BIZ_train_model->biz_people($info->COLD_SN); $data['train_info'] = $this->BIZ_train_model->get_biz_foi($info->COLD_SN); $differtime = (strtotime($data['train_info'][0]->DepartureTime) - time()) / 3600; $obj = $this->BIZ_train_model->get_biz_jol_info($info->COLD_SN,$jh_order); $data['juhe_info'] = json_decode($obj->JOL_BackTxt); $status = $obj->JOL_Status; $data['operator'] = $operator_info; $data['emailarr'] = explode(';',$operator_info[0]->Email); $coach = array(); $seats = array(); $string = ''; foreach($data['juhe_info']->passengers as $item){ foreach(explode(',',$item->cxin) as $item){ if(strpos($item,'车厢')){ $item = str_replace('车厢','',$item); array_push($coach,$item); }else{ $find = array('座上铺','座中铺','座下铺','座'); $replace = array(' upper',' middle',' lower',''); $item = str_replace($find,$replace,$item); array_push($seats,$item); } } } //判断车厢是否唯一,如果不唯一的话,分成两个车厢 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.','; } $data['seatinfo'] = substr($string,0,strlen($string)-1); if($status == '4' && $differtime > 0){ $subject = "Got payment and issued train ticket(s), Order No $coli_id"; $body = $this->load->view('email',$data,true); $this->send_mail_to_wl("订单:{$coli_id} 出票成功","翰特订单号:{$coli_id};聚合订单号:{$jh_order}",$coli_id); //发送邮件给客人 $flag = $this->Sendmail_model->SendMailToTable($fromName,$fromEmail,$toName,$toEmail,$subject,$body); $this->BIZ_train_model->update_biz_jol(array("JOL_JuheOrder"=>$jh_order),array("JOL_SendMail"=>1,"JOL_M_SN"=>$flag)); }else if($status == '1' && $differtime < 18 && $differtime > 0){ $subject = "The train ticket(s) will be issued manually, Order No $coli_id"; $body = $this->load->view('email_fault',$data,true); $this->send_mail_to_wl("订单:{$coli_id} 出票失败","翰特订单号:{$coli_id};聚合订单号:{$jh_order}",$coli_id); //测试阶段,将失败邮件发送一份给操作外联。 $flag = $this->Sendmail_model->SendMailToTable($fromName,$fromEmail,$fromName,$fromEmail,$subject,$body); //测试阶段,将失败邮件发送一份给操作外联。 $this->Sendmail_model->SendMailToTable($fromName,$fromEmail,$toName,$toEmail,$subject,$body); $this->BIZ_train_model->update_biz_jol(array("JOL_JuheOrder"=>$jh_order),array("JOL_SendMail"=>1,"JOL_M_SN"=>$flag)); }else{ echo $jh_order.'不需要发邮件
'; $this->BIZ_train_model->update_biz_jol(array("JOL_JuheOrder"=>$jh_order),array("JOL_SendMail"=>2)); $flag = false; } } //存储火车票开售时间 public function add_sale_time(){ $time = '18:00'; $str = ''; $station_arr = explode('、',$str); foreach($station_arr as $station){ $this->BIZ_train_model->sale_time_station($station,$time); } } public function update_sale_time(){ $this->BIZ_train_model->test(); } function my_post($url,$post_data){ // $url = "http://op.juhe.cn/trainTickets/cityCode"; // $post_from = array("stationName" => $from,"key"=>"79f03107b921ef31310bd40a1415c1cb"); // $post_to = array("stationName" => $to,"key"=>"79f03107b921ef31310bd40a1415c1cb"); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // post数据 curl_setopt($ch, CURLOPT_POST, 1); // post的变量 curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); $output = curl_exec($ch); curl_close($ch); $output=json_decode($output,TRUE);//json => array return $output; } function get_data($url){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); $output = curl_exec($ch); curl_close($ch); return $output; } function post_data($url,$post_data){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // post数据 curl_setopt($ch, CURLOPT_POST, 1); // post的变量 curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); $output = curl_exec($ch); curl_close($ch); // $output=json_decode($output,TRUE);//json => array return $output; } function chk_sp_name($name){ $name = str_replace( array('á', 'é', 'è', 'í', 'ó', 'ú', 'ñ', 'Á', 'É', 'Í', 'Ó', 'Ú', 'Ñ',' ','/',' ',','), array('a', 'e', 'e', 'i', 'o', 'u', 'n', 'A', 'E', 'I', 'O', 'U', 'N','','','',''), $name ); return substr(strtoupper($name),0,30); } }