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->load->model("BIZ_train_model");//加载模型 } //用于自动出票,接收COLI_SN public function auto_pay_ticket(){ date_default_timezone_set('Asia/Shanghai'); // $coli_sn="473013018"; $coli_sn = $this->input->post("coli_sn"); $list=new StdClass; $back_data = 1; if(!empty($coli_sn)){ $cold_sn=$this->BIZ_train_model->get_cold_sn($coli_sn); $coli_id = $this->BIZ_train_model->coli_sn_get_coli_id($coli_sn); $i = 0; $list->info=array(); foreach ($cold_sn as $v) { if($v->COLD_SPFS > 1){ //寄送票 $back_data = 0; break; } $list->info[$i]=new StdClass; $list->info[$i]->people=$this->BIZ_train_model->biz_people($v->COLD_SN); $list->info[$i]->train=$this->BIZ_train_model->get_biz_foi($v->COLD_SN); $list->info[$i]->status=$this->BIZ_train_model->get_biz_jol($v->COLD_SN); if(count($list->info[$i]->people) > 5){ $back_data = 0; break; }; if((strtotime($list->info[$i]->train[0]->DepartureTime) - time())/3600 < 3 or (strtotime($list->info[$i]->train[0]->DepartureTime) - time())/24/3600 >29){ $back_data = 0; break; } if($list->info[$i]->train[0]->adultcost > 1000){ $back_data = 0; break; } $i++; } if($back_data == 0){ echo 0; return false; }else{ foreach ($cold_sn as $v) { $reback = $this->submit_juhe_order($v->COLD_SN,$coli_id[0]->COLI_ID); if($reback["status"] && !empty($reback["order"])){ $back_data .= ",".$reback["order"]; } } } $back_data = substr($back_data, 2); if($back_data){ //这里 $back_data 还有可能没数据,所以判断一下 echo $back_data; }else{ echo 0; } return false; } } //根据汉特订单明细表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; } $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 = trim($item->BPE_FirstName) . trim($item->BPE_MiddleName) . trim($item->BPE_LastName); //乘客类型 switch ($item->BPE_GuestType) { case 1: $piaotype = 1; $piaotypename = "成人票"; break; case 2: $piaotype = 2; $piaotypename = "儿童票"; break; default://外国人应该就两种票吧 $piaotype = 1; $piaotypename = "成人票"; break; } $passporttypeseid = "B"; //护照 $passporttypeseidname = "护照"; $passportseno = $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), "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 ); // $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}"); }else{ $add_data->JOL_JuheOrder=null; $reback["mes"]= $bakc_json; $add_data->JOL_Status="e"; $this->send_mail_to_wl("订单:{$coli_id} 提交失败","翰特订单号:{$coli_id}"); } $add_back_data=$this->BIZ_train_model->add_biz_jol($add_data); 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){ $this->load->model("Sendmail_model"); $fromName = "csk"; $fromEmail = "csk@hainatravel.com"; $toName = "ethel"; $toEmail = "ethel@chinahighlights.com"; $this->Sendmail_model->SendGuest($fromName,$fromEmail,$toName,$toEmail,$subject,$body); } //发邮件给客人 public function send_mail_to_guest($coli_id,$jh_order){ $this->load->model("Sendmail_model"); $guest = $this->BIZ_train_model->get_guest_info($coli_id); $fromName = "sharon"; $fromEmail = "sharon@chinahighlights.com"; $toName = $guest[0]->GUT_LastName; $toEmail = $guest[0]->GUT_Email; $subject = "auto pay test $jh_order"; $body = "csk test train ticket $jh_order"; $this->Sendmail_model->SendGuest($fromName,$fromEmail,$toName,$toEmail,$subject,$body); } // public function sub_callback(){ $data_post=$this->input->post(); // $data_post["data"]='{"from_station_name":"桂林北","from_station_code":"GBZ","to_station_name":"柳州","to_station_code":"LZZ","train_date":"2017-01-05","orderid":"111111H","user_orderid":"488015272","orderamount":null,"ordernumber":null,"checi":"K457","msg":"没有余票","status":"4","passengers":[{"passengerid":1,"passengersename":"CSK","piaotype":"1","piaotypename":"成人票","passporttypeseid":"B","passporttypeseidname":"护照","passportseno":"E132124","price":"1","zwcode":"1","zwname":"硬座"},{"passengerid":2,"passengersename":"TW","piaotype":"1","piaotypename":"成人票","passporttypeseid":"B","passporttypeseidname":"护照","passportseno":"E02030609","price":"1","zwcode":"1","zwname":"硬座"}],"refund_money":null,"sign":"a5bc2ac8ef2b3a4c1bca323c3898e748"}'; $data=json_decode($data_post["data"]); $this->load->model("order_people_model","op"); $update_data=new StdClass(); $update_data->JOL_BackTxt=$data_post["data"]; $update_data->JOL_RebackMsg=$data->msg; $update_data->JOL_Status=$data->status; $update_data->JOL_JuheOrder=$data->orderid; $update_data->JOL_Price=$data->passengers[0]->price; $coli_id = $this->BIZ_train_model->cold_sn_get_coli_id($data->user_orderid); $add_train_order_data = new StdClass; if($data->status=="2"){ $post_data=array( "key"=>$this->key, "orderid"=>$data->orderid ); $back_json=$this->my_post($this->pay_api,$post_data); $back=json_decode($back_json); $update_data->JOL_BackTxt=$back_json; $update_data->JOL_RebackMsg=$back->reason; }elseif($data->status=="4"){ //付款成功 写入TOC表 $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->op->add_train_order($add_train_order_data); $this->send_mail_to_wl("订单:{$coli_id[0]->COLI_ID} 出票成功","翰特订单号:{$coli_id[0]->COLI_ID};聚合订单号:{$data->orderid}"); $this->send_mail_to_guest($coli_id[0]->COLI_ID,$data->orderid); }elseif($data->status=="7"){ //退票成功 写入TOC表 $newtime="";//记录最新操作时间 $refund_passportseno="";//退票人护照号 $refund_money="";//退票金额 foreach ($data->passengers as $p) { //找出退票人,规则:操作时间最新的 if($p->refundTimeline){//是否有退票操作 //$p->refundTimeline[count($p->refundTimeline)-1] 最新操作 if($p->refundTimeline[count($p->refundTimeline)-1]->time > $newtime){ $newtime=$p->refundTimeline[count($p->refundTimeline)-1]->time; $refund_passportseno=$p->refundTimeline[count($p->refundTimeline)-1]->detail->passportseno; $refund_money=$p->refundTimeline[count($p->refundTimeline)-1]->detail->returnmoney; } } } $add_train_order_data->TOC_Memo=$data->orderid." ".$refund_passportseno; $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=-$refund_money; $add_train_order_data->FOI_TrainNetOrderNo=null;//退票不用更新取票号,以此在模型里面判断是否为退票消息 $this->op->add_train_order($add_train_order_data); }else{ $this->send_mail_to_wl("订单:{$coli_id[0]->COLI_ID} 出票失败","翰特订单号:{$coli_id[0]->COLI_ID};聚合订单号:{$data->orderid};返回信息:{$data->msg}"); } $this->op->update_jh_order($update_data); echo "success"; } 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; } }