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; $this->istanding = 'false'; } public function index(){ exit('hello world'); } //问题订单处理 public function error_orders_submit(){ $this->isauto = 4; //获取所有问题订单 $errorOrdersList = $this->BIZ_train_model->getErrorOrdersList(); foreach ($errorOrdersList as $items){ $bpe_sn = ''; $coldSn = $items->cold_sn; $people_arr = $this->BIZ_train_model->biz_people($coldSn); foreach($people_arr as $people_info){ $bpe_sn .= $people_info->BPE_SN.','; } $bpe_sn = substr($bpe_sn,0,strlen($bpe_sn)-1); //发送请求 $this->booktickets($coldSn,$bpe_sn,'','juhe'); } } //自动出票,2024-1-30改用新方法 public function auto_pay_ticket(){ //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; $auto_flag = 1; $people_arr = $this->BIZ_train_model->biz_people($cold_sn); $train_info = $this->BIZ_train_model->biz_order_detail($cold_sn); if($item->COLD_SPFS > 1){ //寄送票 $auto_flag = 0; $back_message .= '-邮寄不自动出票'; } //乘客人数大于5人不出票 if(count($people_arr) > 5){ $auto_flag = 0; $back_message .= '-乘客人数大于5不自动出票'; } //护照号如果在黑名单的就不自动出票 foreach($people_arr as $people_info){ if(in_array($people_info->BPE_Passport,$black_list)){ $auto_flag = 0; $back_message .= '-此用户为黑名单用户,不自动出票'; } if(strlen($people_info->BPE_Passport) >= 18){ $auto_flag = 0; $back_message .= '-护照位数大于18不自动出票'; } $bpe_sn .= $people_info->BPE_SN.','; } $bpe_sn = substr($bpe_sn,0,strlen($bpe_sn)-1); //不是国内支付宝的付款方式的订单需要受到1000元单价限制 if($item->GAI_Type != '15015' && $item->COLI_State != '8'){ if($train_info->adultcost > 1000){ $auto_flag = 0; $back_message .= '-单价大于1000不自动出票'; } } //如果为国际火车票就不出票 if(in_array($train_info->FlightsNo, $nation_train)){ $auto_flag = 0; $back_message .= '-国际火车票不自动出票'; } //无座的订单不做出票 if($train_info->Aircraft == 'WZ'){ $auto_flag = 0; $back_message .= '-无座不自动出票'; } //香港火车不自动出票 if($train_info->DepartAirport == 'XJA'){ $auto_flag = 0; $back_message .= '-香港火车不自动出票'; } $DepartureDate = strtotime($train_info->DepartureDate); $time = time(); $depart_diff = ($DepartureDate - $time) / 86400; if($train_info->ArrivalAirport == 'XJA' && $train_info->adultcost > 500 && $depart_diff > 5){ $auto_flag = 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->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){ $auto_flag = 0; $back_message .= '-超过抢票时间'; }else if($sale_diff <0){ $auto_flag = 0; $back_message .= '-未到抢票时间'; } } } if($auto_flag == 0){ $string .= '汉特订单号:'.$coli_id.'('.$cold_sn.')'.$back_message.''; }else{ //单个订单提交 echo $cold_sn.'
'; $this->booktickets($cold_sn,$bpe_sn,'','juhe'); //$string .= '汉特订单号:'.$coli_id.'('.$cold_sn.')可以自动出票'; } } print_r(''.$string.'
'); } //自动出票2.0 2024-1-30 zp public function auto_pay_ticket_2(){ date_default_timezone_set('Asia/Shanghai'); //筛选出能自动出票的订单 $auto_pool = $this->BIZ_train_model->auto_check_ticket_2(); //创建一个不允许自动出票的国际火车票数组 $nation_train = array('K19', 'K23', 'Z8701', 'Z8702', 'Z97', 'Z98', 'Z99', 'Z100', 'K9795','D87'); //创建黑名单 $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; $auto_flag = 1; $people_arr = $this->BIZ_train_model->biz_people($cold_sn); $train_info = $this->BIZ_train_model->biz_order_detail($cold_sn); //乘客人数大于10人不出票 if(count($people_arr) > 10){ $auto_flag = 0; $back_message .= '-乘客人数大于10不自动出票'; } //护照号如果在黑名单的就不自动出票 foreach($people_arr as $people_info){ if(in_array($people_info->BPE_Passport,$black_list)){ $auto_flag = 0; $back_message .= '-此用户为黑名单用户,不自动出票'; } if(strlen($people_info->BPE_Passport) >= 18){ $auto_flag = 0; $back_message .= '-护照位数大于18不自动出票'; } $bpe_sn .= $people_info->BPE_SN.','; } $bpe_sn = substr($bpe_sn,0,strlen($bpe_sn)-1); //不是已付款状态的,票价高于5000不出票,以防意外 if($item->COLI_State != '8'){ if($train_info->adultcost > 5000){ $auto_flag = 0; $back_message .= '-没支付单价大于5000不自动出票'; } } //如果为国际火车票就不出票 if(in_array($train_info->FlightsNo, $nation_train) || strlen($train_info->DepartAirport)>3 || strlen($train_info->ArrivalAirport)>3){ $auto_flag = 0; $back_message .= '-国际火车票不自动出票'; } //无座的订单不做出票 if($train_info->Aircraft == 'WZ'){ $auto_flag = 0; $back_message .= '-无座不自动出票'; } $DepartureDate = strtotime(date('Y-m-d',strtotime($train_info->DepartureDate))); //只取日期部分 $now = strtotime(date('Y-m-d')); $depart_diff = ($DepartureDate - $now) / 86400; //如果刚好是第15天的订单 if($depart_diff==15 && 1==2){ //$this->isauto = 1; $time = strtotime(time()); $autolasttime = $item->ts_autolasttime; if(($timestamp = strtotime($autolasttime)) !== false) { $time_diff = ($time - strtotime($autolasttime)) / 3600; if ($time_diff < 1){ $auto_flag = 0; $back_message .= '-预售期每小时只能提交一次'; } } }else{ //不是预售期的,只能3次抢票 if ($item->ts_autotimes > 3){ $auto_flag = 0; $back_message .= '-抢票次数已到3次'; } } if($auto_flag == 0){ $string .= '汉特订单号:'.$coli_id.'('.$cold_sn.')'.$back_message.''; log_message('error','自动出票错误信息:'.''.$string.'
'); }else{ //单个订单提交 echo $cold_sn.'
'; $this->booktickets($cold_sn,$bpe_sn,'','ctrip'); //$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"); //接受是否有站票 $this->istanding = $this->input->get_post("istanding"); } //测试数据 /*$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); $coli_id = $this->BIZ_train_model->cold_sn_get_coli_id($cold_sn)['0']->COLI_ID; if(empty($this->BIZ_train_model->get_operatorInfo($coli_id))){ $data['email'] = 'vivi@hainatravel.com'; }else{ $data['email'] = $this->BIZ_train_model->get_operatorInfo($coli_id)['0']->OPI_Email; } 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']) > 10) { //显示错误,用户超过五个 $reback["mes"]="乘客不能超过十个"; echo json_encode($reback); return false; } // print_r(json_encode($data)); // echo("
"); // echo($selectseat); // echo("
"); // echo($cold_sn); // die(); 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 'MainlandTravel Permit from Hong Kong and 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":"'.$data["train"]->adultcost.'","zwcode":"' . $zwcode . '","zwname":"' . $zwname . '","gatValidDateEnd":"'.$item->BPE_PassExpdate.'","gatBornDate":"'.$item->BPE_BirthDate.'","sexCode":"'.$sex.'","email":"'.$data['email'].'","phoneNum":"13097735982"}'; }elseif($passporttypeseid == 'B'){ $passengers .= ',{"passengerid":' . ( ++$key) . ',"passengersename":"' . $passengersename . '","piaotype":"' . $piaotype . '","piaotypename":"' . $piaotypename . '","passporttypeseid":"' . $passporttypeseid . '","passporttypeseidname":"' . $passporttypeseidname . '","passportseno":"' . $passportseno . '","price":"'.$data["train"]->adultcost.'","zwcode":"' . $zwcode . '","zwname":"' . $zwname . '","countryCode":"US","email":"'.$data['email'].'","phoneNum":"13097735982"}'; }else{ $passengers .= ',{"passengerid":' . ( ++$key) . ',"passengersename":"' . $passengersename . '","piaotype":"' . $piaotype . '","piaotypename":"' . $piaotypename . '","passporttypeseid":"' . $passporttypeseid . '","passporttypeseidname":"' . $passporttypeseidname . '","passportseno":"' . $passportseno . '","price":"'.$data["train"]->adultcost.'","zwcode":"' . $zwcode . '","zwname":"' . $zwname . '","phoneNum":"13097735982","email":"'.$data['email'].'"}'; } } $passengers .= "]"; $passengers = substr($passengers, 1); $passengers = "[" . $passengers; $is_accept_standing = 'no'; if($this->istanding == 'true'){ $is_accept_standing = 'yes'; } 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"=>$is_accept_standing, "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"=>$is_accept_standing, "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; $this->train_system_model->add_orders($add_data); echo json_encode($reback); return false; } //途牛模块 function tuniuModel($data,$selectseat,$cold_sn){ $this->load->library('Des'); $zwcode = $this->db_train_zw[$data['train']->Aircraft]; //座位简码 $zwname = $this->train_zw[$this->db_train_zw[$data['train']->Aircraft]]; //座位名称 $passengers=""; //$cold_sn = $cold_sn.'_'.time(); //拼接车次信息 $tuniu_data = '{'; $tuniu_data .= '"retailOrderId":"'.$cold_sn.'",'; $tuniu_data .= '"cheCi": "'.$data['train']->FlightsNo.'", '; $tuniu_data .= '"fromStationCode": "'.$data['train']->DepartAirport.'", '; $tuniu_data .= '"fromStationName": "'.$data['train']->DepartAirport_cn.'", '; $tuniu_data .= '"toStationCode": "'.$data['train']->ArrivalAirport.'", '; $tuniu_data .= '"toStationName": "'.$data['train']->ArrivalAirport_cn.'", '; $tuniu_data .= '"trainDate": "'.substr($data["train"]->DepartureDate, 0, 10).'", '; $tuniu_data .= '"callBackUrl": "http://www.mycht.cn/info.php/apps/train/tuniu_callback/book",'; $tuniu_data .= '"hasSeat": true,'; $tuniu_data .= '"contact": "陈宇超",'; $tuniu_data .= '"phone": "18877381547",'; $tuniu_data .= '"isChooseSeats": true,'; $tuniu_data .= '"chooseSeats":"'.$selectseat.'",'; //循环乘客 $passengers = ''; foreach ($data['people_list'] as $key => $item) { $passengers .= '{'; $passengers .= '"passengerId":'.$key.','; $passengers .= '"ticketNo":"null",'; //乘客姓名 $passengersename = str_replace(' ','',$item->BPE_FirstName) . str_replace(' ','',$item->BPE_MiddleName) . str_replace(' ','',$item->BPE_LastName); //将特殊字符转换为正常字符以便于出票 $passengersename = chk_sp_name($passengersename); $passengers .= '"passengerName":"'.$passengersename.'",'; $passportseno = str_replace(' ','',$item->BPE_Passport); $passengers .= '"passportNo":"'.$passportseno.'",'; //证件类型 switch ($item->BPE_PassportType){ case 'Chinese ID': $passporttypeseid = "1"; $passporttypeseidname = "二代身份证"; break; case 'MainlandTravel Permit from Hong Kong and Macau': $passporttypeseid = "C"; $passporttypeseidname = "港澳通行证"; break; case 'Travel Permit from Taiwan': $passporttypeseid = "G"; $passporttypeseidname = "台湾通行证"; break; default : $passporttypeseid = "B"; $passporttypeseidname = "护照"; break; } //乘客类型 switch ($item->BPE_GuestType) { case 1: $piaotype = 1; $piaotypename = "成人票"; break; case 2: $piaotype = 2; $piaotypename = "儿童票"; break; default://外国人应该就两种票吧 $piaotype = 1; $piaotypename = "成人票"; break; } $passengers .= '"passportTypeId":"'.$passporttypeseid.'",'; $passengers .= '"passportTypeName":"'.$passporttypeseidname.'",'; //票类型 $passengers .= '"piaoType":"'.$item->BPE_GuestType.'",'; $passengers .= '"piaoTypeName":"'.$piaotypename.'",'; //座位类型piaoTypeName $passengers .= '"zwCode":"'.$zwcode.'",'; $passengers .= '"zwName":"'.$zwname.'",'; $passengers .= '"cxin":"null",'; $passengers .= '"price":"'.$data['train']->adultcost.'",'; $passengers .= '"reason": 0'; $passengers .= '},'; } $passengers = substr($passengers,0,strlen($passengers)-1); $passengers = '['.$passengers.']'; $tuniu_data .= '"passengers": '.$passengers.'}'; //print_r($tuniu_data); $crypt = new DES(); $mstr = $crypt->encrypt($tuniu_data,TUNIU_KEY); $post_data = '{ "apiKey": "'.TUNIU_KEY.'", "sign": "'.create_sign().'", "timestamp": "'.date('Y-m-d H:i:s',time()).'", "data": "'.$mstr.'" }'; $url = TUNIU_URL.'/train/book'; $book_back_json = GetPost_http($url,$post_data,'POST','json'); $book_back_data = json_decode($book_back_json); $orderId = $book_back_data->data->orderId; $retailOrderId = $book_back_data->data->retailOrderId; if($book_back_data->success == 1){ $confirm_url = TUNIU_URL.'/train/confirm'; $sign = create_sign(); $time = date('Y-m-d H:i:s',time()); $post_data = '{ "apiKey": "'.TUNIU_KEY.'", "sign": "'.$sign.'", "timestamp": "'.$time.'", "data": { "retailOrderId":"'.$retailOrderId.'", "orderId":"'.$orderId.'", "callBackUrl":"http://www.mycht.cn/info.php/apps/train/tuniu_callback/confirm" } }'; //请求出票 $confirm_back_json = GetPost_http($confirm_url,$post_data,'POST','json'); $confirm_back_data = json_decode($confirm_back_json); $reback["status"] = 1; $reback["order"] = $orderId; $reback["mes"] = "订单提交成功,等待回调"; }else{ $reback["mes"] = $confirm_back_json; $add_data->status = "e"; } //本地订单入库 $add_data = new stdClass(); $add_data->cold_sn = $retailOrderId; $add_data->ordernumber = $orderId; $add_data->returncode = $confirm_back_data->returnCode; $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 = 'tuniu'; $add_data->isauto = $this->isauto; $this->train_system_model->add_orders($add_data); echo json_encode($reback); return false; } //携程模块 function ctripModel($data,$selectseat,$cold_sn){ $zwcode = $this->db_train_zw[$data['train']->Aircraft]; //座位简码 $zwname = $this->train_zw[$this->db_train_zw[$data['train']->Aircraft]]; //座位名称 $microtime = get_microtime(); $OrderNumber = SHUNTU_ORDERUSER.$microtime; //自生成订单号 //生成接口请求头参数 $TimeStamp = date("Y-m-d H:i:s"); $serviceName = "train.addTrainOrder"; //每个接口都有自己名称 $companyId = COMPANYID; $key = CTRIPKEY; $strSign = $TimeStamp.$serviceName.$companyId.$key; //加密前的令牌 $Sign = md5($strSign); $url = CTRIPURL."/addTrainOrder"; //拼接发送的报文 $PostData = new stdClass(); $PostData->authentication = new stdClass(); $PostData->authentication->timeStamp = $TimeStamp; $PostData->authentication->serviceName = $serviceName; $PostData->authentication->companyId = $companyId; $PostData->authentication->messageIdentity = $Sign; $PostData->trainOrderInfo = new stdClass(); $PostData->trainOrderInfo->companyId = $companyId; $PostData->trainOrderInfo->orderType = 2; $PostData->trainOrderInfo->orderTicketType = 0; $PostData->trainOrderInfo->companyOrderId = $OrderNumber; $PostData->trainOrderInfo->isReservationOrder = null; $PostData->trainOrderInfo->leakCutOffTime = null; $PostData->trainOrderInfo->orderInfo = new stdClass(); $PostData->trainOrderInfo->orderInfo->orderTime = $TimeStamp; $PostData->trainOrderInfo->orderInfo->ticketList['0'] = new stdClass(); $PostData->trainOrderInfo->orderInfo->ticketList['0']->fromStationName = $data['train']->DepartAirport_cn; $PostData->trainOrderInfo->orderInfo->ticketList['0']->toStationName = $data['train']->ArrivalAirport_cn; $PostData->trainOrderInfo->orderInfo->ticketList['0']->ticketTime = date('Y-m-d H:i',strtotime($data['train']->DepartureTime)); $PostData->trainOrderInfo->orderInfo->ticketList['0']->trainNo = $data['train']->FlightsNo; $PostData->trainOrderInfo->orderInfo->ticketList['0']->allAcceptTrainNo = ''; //备选车次,抢票时必传 $PostData->trainOrderInfo->orderInfo->ticketList['0']->acceptDepartDates = ''; //备选日期,抢票时必传 $PostData->trainOrderInfo->orderInfo->ticketList['0']->arrivalDateTime = date('Y-m-d H:i',strtotime($data['train']->ArrivalTime)); $PostData->trainOrderInfo->orderInfo->ticketList['0']->ticketPrice = $data['train']->adultcost; $PostData->trainOrderInfo->orderInfo->ticketList['0']->seatName = $this->train_zw[$this->db_train_zw[$data['train']->Aircraft]]; $PostData->trainOrderInfo->orderInfo->ticketList['0']->selectedSeat = $selectseat; $is_accept_standing = ''; if($this->istanding == 'true'){ $is_accept_standing = '无座'; } $PostData->trainOrderInfo->orderInfo->ticketList['0']->acceptSeat = $is_accept_standing; $AdultNum = 0; $ChildNum = 0; $i = 0; $passagersdata = array(); foreach ($data['people_list'] as $PassagerInfo){ //乘客类型 switch ($PassagerInfo->BPE_GuestType) { case 1: $PiaoType = 1; $PiaoTypeName = "成人票"; $AdultNum++; break; case 2: $PiaoType = 2; $PiaoTypeName = "儿童票"; $ChildNum++; break; default://外国人应该就两种票吧 $PiaoType = 1; $PiaoTypeName = "成人票"; break; } //证件类型 switch ($PassagerInfo->BPE_PassportType){ case 'Chinese ID': $PassportTypeseId = 1; $PassportTypeseidName = "二代身份证"; break; case 'MainlandTravel Permit from Hong Kong and Macau': $PassportTypeseId = 7; $PassportTypeseidName = "回乡证"; break; case 'Travel Permit from Hong Kong / Macau': $PassportTypeseId = 7; $PassportTypeseidName = "回乡证"; break; case 'Travel Permit from Taiwan': $PassportTypeseId = 8; $PassportTypeseidName = "台湾通行证"; break; default : $PassportTypeseId = 2; $PassportTypeseidName = "护照"; break; } $passagersdata[$i] = new stdClass(); $passagersdata[$i]->passengerType = $PiaoType; $passagersdata[$i]->certificateType = $PassportTypeseId; $passagersdata[$i]->certificateNo = des_encrypt($PassagerInfo->BPE_Passport,$key);; $passagersdata[$i]->certificateName = chk_sp_name($PassagerInfo->BPE_FirstName.$PassagerInfo->BPE_MiddleName.$PassagerInfo->BPE_LastName); $passagersdata[$i]->birthday =date('Y-m-d',strtotime($PassagerInfo->BPE_BirthDate)); $passagersdata[$i]->realName = chk_sp_name($PassagerInfo->BPE_FirstName.$PassagerInfo->BPE_MiddleName.$PassagerInfo->BPE_LastName); $passagersdata[$i]->identityLimitDate = date('Y-m-d',strtotime($PassagerInfo->BPE_PassExpdate)); $passagersdata[$i]->countryCode = ""; $passagersdata[$i]->contactMobile = ""; $passagersdata[$i]->contactEmail = ""; if (!empty($PassagerInfo->BPE_Nationality)){ $regionCode = $PassagerInfo->BPE_Nationality; if ($regionCode =="TW" || $regionCode=="HK" || $regionCode=="MO"){ $passagersdata[$i]->regionCode = "CN"; }else{ $passagersdata[$i]->regionCode = $regionCode; //国家简码 美国us ,中国cn } } $i++; } //乘客人信息 $PostData->trainOrderInfo->orderInfo->ticketList['0']->passengerList = $passagersdata; $PostData->trainOrderInfo->orderInfo->frontSeatFlag = 0; $PostData->trainOrderInfo->orderInfo->orderRemark = ""; $PostData->trainOrderInfo->contactUser = new stdClass(); $PostData->trainOrderInfo->contactUser->contactUserId = ''; $PostData->trainOrderInfo->contactUser->contactName = 'vivi'; $PostData->trainOrderInfo->contactUser->companyId = $companyId; $PostData->trainOrderInfo->contactUser->countryCode = "86"; $PostData->trainOrderInfo->contactUser->contactMobile = des_encrypt('18877331805',$key) ; $PostData->trainOrderInfo->extraService = new stdClass(); $PostData->trainOrderInfo->extraService->noVerifyFlag = 1; $PostData->trainOrderInfo->extraService->lowerBerthFlag = 0; $PostData->trainOrderInfo->extraService->lowerBerthCount = 0; $PostData->trainOrderInfo->extraService->grabTicketRate = 1; //本地添加记录 $add_data = new stdClass(); $add_data->cold_sn = $cold_sn; $add_data->ordernumber = $OrderNumber; $add_data->returncode = ''; $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 = 'ctrip'; $add_data->isauto = $this->isauto; //出票次数 $countAuto = $this->train_system_model->get_autotimes($cold_sn); $add_data->ts_autotimes = $countAuto->countauto + 1; //出票次数+1 //存储到数据库 $this->train_system_model->add_orders($add_data); // print_r(json_encode($PostData)); // die(); $ResponseJson = GetPost_http($url,json_encode($PostData,JSON_UNESCAPED_UNICODE),'json'); $ResponseData = json_decode($ResponseJson); // print_r(json_encode($PostData)); // die(); //预定请求成功后执行支付 if($ResponseData->returnCode == 1){ //直接获取返回的需要支付的总价,不再计算订单总价 //$total_price = $AdultNum * $data['train']->adultcost + $ChildNum * $data['train']->childcost; $total_price = $ResponseData->returnData->orderPayDetail->orderAmount; if ($total_price>0){ log_message('error','下单成功返回信息:'.$ResponseJson); //执行支付 $this->payorders($OrderNumber,$total_price); $reback["status"] = 1; $reback["order"] = $OrderNumber; $reback["mes"] = "订单提交成功,等待回调"; }else{ $reback["status"] = 1; $reback["returndata"] = $ResponseData; $reback["mes"] = "订单提交成功,但是返回的订单总价错误。无法完成支付"; } }else{ //log_message('error','下单失败提交数据记录:'.json_encode($PostData,JSON_UNESCAPED_UNICODE)); $reback["mes"] = $ResponseJson; $add_data->status = "e"; //更新订单 $msgData = new stdClass(); $msgData->bookcallback = $ResponseJson; $msgData->OrderStatus = "1"; $msgData->ErrorMsg = $ResponseData->returnMessage; $msgData->ordernumber = $OrderNumber; $msgData->addOrderData = json_encode($PostData,JSON_UNESCAPED_UNICODE); //失败了记录提交的订单数据 $this->train_system_model->update_orders_msg($msgData); } echo json_encode($reback,JSON_UNESCAPED_UNICODE); } //请求支付 public function payorders($CtripOrder,$Price){ if(empty($CtripOrder) && !is_numeric($Price)){ exit('传参错误!'); } //生成接口请求头参数 $TimeStamp = date("Y-m-d H:i:s"); $serviceName = "train.companyPayOrder"; //每个接口都有自己名称 $companyId = COMPANYID; $key = CTRIPKEY; // /** 测试服务器 */ // $companyId = "1503141150"; // $key = "hajkrtba"; $strSign = $TimeStamp.$serviceName.$companyId.$key; //加密前的令牌 $Sign = md5($strSign); $url = CTRIPURL."/companyPayOrder"; //生成报文 $PostData = new stdClass(); $PostData->authentication = new stdClass(); $PostData->authentication->timeStamp = $TimeStamp; $PostData->authentication->serviceName = $serviceName; $PostData->authentication->companyId = $companyId; $PostData->authentication->messageIdentity = $Sign; $PostData->orderPayInfo= new stdClass(); $PostData->orderPayInfo->companyId = $companyId; $PostData->orderPayInfo->companyOrderId = $CtripOrder; $PostData->orderPayInfo->payedPrice = $Price; $PostData->orderPayInfo->payTime = $TimeStamp; $PostData->orderPayInfo->tradeNumber = $CtripOrder; //$Url = 'http://apiproxy.ctrip.com/apiproxy/soa2/13680/PartnerPayOrder'; // print_r(json_encode($PostData) ); // die(); $ResponseJson = GetPost_http($url,json_encode($PostData),'json'); $ResponseData = json_decode($ResponseJson); $msgData = new stdClass(); $msgData-> bookcallback = $ResponseJson; $msgData->ordernumber = $CtripOrder; if ($ResponseData->returnCode==1){ $msgData->OrderStatus = "3"; $msgData->ErrorMsg = $ResponseData->returnMessage; }else{ $msgData->OrderStatus = "1"; $msgData->ErrorMsg = $ResponseData->returnMessage; } //更新订单 $this->train_system_model->update_orders_msg($msgData); // $reback["mes"] = $ResponseJson; // print_r(json_encode($reback,JSON_UNESCAPED_UNICODE)) ; //echo '支付'; //print_r($ResponseData); //支付同步回调信息 {"Status":"SUCCESS","PartnerName":"guilintravel","OrderNumber":"guilintravel1546071576","OperationDateTime":"2018-12-29 16:19:37","RetCode":0,"ResponseStatus":{"Timestamp":"\/Date(1546071577236+0800)\/","Ack":"Success","Errors":[],"Extension":[]}} } } //订单提交返回数据 /* { "returnCode": 1, "returnMessage": "SUCCESS", "returnData": { "serviceName": "train.addTrainOrder", "companyId": "1503141150", "companyOrderId": "HN1681460139569", "operationDateTime": "2023-04-14 16:15:56", "orderPayDetail": { "orderAmount": 12.00, "ticketAmount": 6, "serveAmount": 0, "extraServeFees": [ { "feeAmount": 6.00, "feeType": 141 } ] } }, "ResponseStatus": { "Timestamp": "/Date(1681460156763+0800)/", "Ack": "Success", "Errors": [], "Build": null, "Version": null, "Extension": [ { "Id": "CLOGGING_TRACE_ID", "Version": null, "ContentType": null, "Value": "7715658886832531034" }, { "Id": "RootMessageId", "Version": null, "ContentType": null, "Value": "100031671-0a6d18d7-467072-1571193" } ] } } */