|
|
@ -40,123 +40,162 @@ class Tuniu_train extends CI_Controller{
|
|
|
|
if(!$date || !$fromStation || !$toStation){
|
|
|
|
if(!$date || !$fromStation || !$toStation){
|
|
|
|
exit('传参错误!');
|
|
|
|
exit('传参错误!');
|
|
|
|
}else{
|
|
|
|
}else{
|
|
|
|
|
|
|
|
//做超过预售期的处理查询
|
|
|
|
|
|
|
|
$isCache = false;
|
|
|
|
|
|
|
|
$iseven = false;
|
|
|
|
|
|
|
|
$now_time = time();
|
|
|
|
|
|
|
|
$differ = (strtotime($date) - $now_time) / 86400;
|
|
|
|
|
|
|
|
if($differ > 29){
|
|
|
|
|
|
|
|
$date = date('Y-m-d',strtotime('+7day'));
|
|
|
|
|
|
|
|
$iseven = true;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//途牛报文拼接
|
|
|
|
$sign = $this->create_sign();
|
|
|
|
$sign = $this->create_sign();
|
|
|
|
$url = TUNIU_URL.'/train/search';
|
|
|
|
$url = TUNIU_URL.'/train/search';
|
|
|
|
$time = date('Y-m-d H:i:s',time());
|
|
|
|
$time = date('Y-m-d H:i:s',time());
|
|
|
|
$post_data = '{
|
|
|
|
$post_data = '{
|
|
|
|
"apiKey": "'.TUNIU_KEY.'",
|
|
|
|
"apiKey": "'.TUNIU_KEY.'",
|
|
|
|
"sign": "'.$sign.'",
|
|
|
|
"sign": "'.$sign.'",
|
|
|
|
"timestamp": "'.$time.'",
|
|
|
|
"timestamp": "'.$time.'",
|
|
|
|
"data": { "trainDate": "'.$date.'", "fromStation": "'.$fromStation.'", "toStation": "'.$toStation.'", "trainCode": "" }
|
|
|
|
"data": { "trainDate": "'.$date.'", "fromStation": "'.$fromStation.'", "toStation": "'.$toStation.'", "trainCode": "" }
|
|
|
|
}';
|
|
|
|
}';
|
|
|
|
$back_data = post_tuniu($url,$post_data,$method = 'POST');
|
|
|
|
$back_data = post_tuniu($url,$post_data,$method = 'POST');
|
|
|
|
if(empty(json_decode($back_data)->data)){
|
|
|
|
|
|
|
|
log_message('error','tuniu:'.json_encode($post_data));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
//print_r(json_decode($back_data));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$return_data = new stdClass();
|
|
|
|
//如果数据为空则调用缓存,有数据则进行数据存储
|
|
|
|
$return_data->returnCode = json_decode($back_data)->returnCode;
|
|
|
|
if(empty($back_data)){
|
|
|
|
//echo $return_data->returnCode;
|
|
|
|
log_message('error','tuniutrain 接口未响应|数据源:'.$fromStation.'|'.$toStation.'|'.$date);
|
|
|
|
$return_data->httpstatus = 200;
|
|
|
|
$trainCache = $this->tuniuprice_model->get_train_cache($fromStation,$toStation);
|
|
|
|
$return_data->data = new stdClass();
|
|
|
|
$back_data = $trainCache->tpc_content;
|
|
|
|
$return_data->data->result = array();
|
|
|
|
$isCache = true;
|
|
|
|
$return_data->data->map = new stdClass();
|
|
|
|
}else{
|
|
|
|
$obj = array();
|
|
|
|
if(empty(json_decode($back_data)->data)){
|
|
|
|
$i = 0;
|
|
|
|
$error = json_decode($back_data);
|
|
|
|
$pricestr = '';
|
|
|
|
$trainCache = $this->tuniuprice_model->get_train_cache($fromStation,$toStation);
|
|
|
|
if(!empty(json_decode($back_data)->data)){
|
|
|
|
if(!empty($trainCache)){
|
|
|
|
foreach (json_decode($back_data)->data as $value){
|
|
|
|
$back_data = $trainCache->tpc_content;
|
|
|
|
$obj[$value->fromStationCode] = $value->fromStationName;
|
|
|
|
$isCache = true;
|
|
|
|
$obj[$value->toStationCode] = $value->toStationName;
|
|
|
|
log_message('error','tuniutrain 查询出错|'.$error->errorMsg);
|
|
|
|
$seat_type = '';
|
|
|
|
}else{
|
|
|
|
if(isset($value->gjrwXiaPrice)){
|
|
|
|
$back_data = null;
|
|
|
|
if(is_numeric($value->gjrwXiaPrice)){
|
|
|
|
log_message('error','tuniutrain 缓存为空|'.$fromStation.'|'.$toStation.'|'.$date);
|
|
|
|
$gjrwXiaPrice = $value->gjrwXiaPrice * 10;
|
|
|
|
|
|
|
|
$seat_type .= '"6":"'.$gjrwXiaPrice.'","A6":"¥'.$value->gjrwXiaPrice.'",';
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}else{
|
|
|
|
|
|
|
|
$this->tuniuprice_model->addOrUpdate($fromStation,$toStation,$back_data);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if(isset($value->qtxbPrice)){
|
|
|
|
}
|
|
|
|
if(is_numeric($value->qtxbPrice)){
|
|
|
|
|
|
|
|
$seat_type .= '"H":"¥'.$value->qtxbPrice.'",';
|
|
|
|
//途牛数据格式转换
|
|
|
|
|
|
|
|
$return_data = new stdClass();
|
|
|
|
|
|
|
|
if(empty($back_data)){
|
|
|
|
|
|
|
|
$return_data->returnCode = '404';
|
|
|
|
|
|
|
|
}else{
|
|
|
|
|
|
|
|
$return_data->returnCode = json_decode($back_data)->returnCode;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$return_data->httpstatus = 200;
|
|
|
|
|
|
|
|
$return_data->data = new stdClass();
|
|
|
|
|
|
|
|
$return_data->data->seven = $iseven;
|
|
|
|
|
|
|
|
$return_data->data->cache = $isCache;
|
|
|
|
|
|
|
|
$return_data->data->result = array();
|
|
|
|
|
|
|
|
$return_data->data->map = new stdClass();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$obj = array();
|
|
|
|
|
|
|
|
$i = 0;
|
|
|
|
|
|
|
|
$pricestr = '';
|
|
|
|
|
|
|
|
if(!empty(json_decode($back_data)->data)){
|
|
|
|
|
|
|
|
foreach (json_decode($back_data)->data as $value){
|
|
|
|
|
|
|
|
$obj[$value->fromStationCode] = $value->fromStationName;
|
|
|
|
|
|
|
|
$obj[$value->toStationCode] = $value->toStationName;
|
|
|
|
|
|
|
|
$seat_type = '';
|
|
|
|
|
|
|
|
if(isset($value->gjrwXiaPrice)){
|
|
|
|
|
|
|
|
if(is_numeric($value->gjrwXiaPrice)){
|
|
|
|
|
|
|
|
$gjrwXiaPrice = $value->gjrwXiaPrice * 10;
|
|
|
|
|
|
|
|
$seat_type .= '"6":"'.$gjrwXiaPrice.'","A6":"¥'.$value->gjrwXiaPrice.'",';
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if(isset($value->qtxbPrice)){
|
|
|
|
if(isset($value->rwPrice)){
|
|
|
|
if(is_numeric($value->qtxbPrice)){
|
|
|
|
if(is_numeric($value->rwPrice)){
|
|
|
|
$seat_type .= '"H":"¥'.$value->qtxbPrice.'",';
|
|
|
|
$rwPrice = $value->rwPrice * 10;
|
|
|
|
}
|
|
|
|
$seat_type .= '"4":"'.$rwPrice.'","A4":"¥'.$value->rwPrice.'",';
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if(isset($value->rwPrice)){
|
|
|
|
if(isset($value->rzPrice)){
|
|
|
|
if(is_numeric($value->rwPrice)){
|
|
|
|
if(is_numeric($value->rzPrice)){
|
|
|
|
$rwPrice = $value->rwPrice * 10;
|
|
|
|
$rzPrice = $value->rzPrice * 10;
|
|
|
|
$seat_type .= '"4":"'.$rwPrice.'","A4":"¥'.$value->rwPrice.'",';
|
|
|
|
$seat_type .= '"2":"'.$rzPrice.'","A2":"¥'.$value->rzPrice.'",';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if(isset($value->rzPrice)){
|
|
|
|
if(isset($value->tdzPrice)){
|
|
|
|
if(is_numeric($value->rzPrice)){
|
|
|
|
if(is_numeric($value->tdzPrice)){
|
|
|
|
$rzPrice = $value->rzPrice * 10;
|
|
|
|
$seat_type .= '"P":"¥'.$value->tdzPrice.'",';
|
|
|
|
$seat_type .= '"2":"'.$rzPrice.'","A2":"¥'.$value->rzPrice.'",';
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if(isset($value->tdzPrice)){
|
|
|
|
if(isset($value->wzPrice)){
|
|
|
|
if(is_numeric($value->tdzPrice)){
|
|
|
|
if(is_numeric($value->wzPrice)){
|
|
|
|
$seat_type .= '"P":"¥'.$value->tdzPrice.'",';
|
|
|
|
$wzPrice = $value->wzPrice * 10;
|
|
|
|
}
|
|
|
|
$seat_type .= '"WZ":"¥'.$value->wzPrice.'",';
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if(isset($value->wzPrice)){
|
|
|
|
if(isset($value->ywPrice)){
|
|
|
|
if(is_numeric($value->wzPrice)){
|
|
|
|
if(is_numeric($value->ywPrice)){
|
|
|
|
$wzPrice = $value->wzPrice * 10;
|
|
|
|
$ywPrice = $value->ywPrice * 10;
|
|
|
|
$seat_type .= '"WZ":"¥'.$value->wzPrice.'",';
|
|
|
|
$seat_type .= '"3":"'.$ywPrice.'","A3":"¥'.$value->ywPrice.'",';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if(isset($value->ywPrice)){
|
|
|
|
if(isset($value->yzPrice)){
|
|
|
|
if(is_numeric($value->ywPrice)){
|
|
|
|
if(is_numeric($value->yzPrice)){
|
|
|
|
$ywPrice = $value->ywPrice * 10;
|
|
|
|
$yzPrice = $value->yzPrice * 10;
|
|
|
|
$seat_type .= '"3":"'.$ywPrice.'","A3":"¥'.$value->ywPrice.'",';
|
|
|
|
$seat_type .= '"1":"'.$yzPrice.'","A1":"¥'.$value->yzPrice.'",';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if(isset($value->yzPrice)){
|
|
|
|
if(isset($value->edzPrice)){
|
|
|
|
if(is_numeric($value->yzPrice)){
|
|
|
|
if(is_numeric($value->edzPrice)){
|
|
|
|
$yzPrice = $value->yzPrice * 10;
|
|
|
|
$seat_type .= '"O":"¥'.$value->edzPrice.'",';
|
|
|
|
$seat_type .= '"1":"'.$yzPrice.'","A1":"¥'.$value->yzPrice.'",';
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if(isset($value->edzPrice)){
|
|
|
|
if(isset($value->ydzPrice)){
|
|
|
|
if(is_numeric($value->edzPrice)){
|
|
|
|
if(is_numeric($value->ydzPrice)){
|
|
|
|
$seat_type .= '"O":"¥'.$value->edzPrice.'",';
|
|
|
|
$seat_type .= '"M":"¥'.$value->ydzPrice.'",';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if(isset($value->ydzPrice)){
|
|
|
|
if(isset($value->swzPrice)){
|
|
|
|
if(is_numeric($value->ydzPrice)){
|
|
|
|
if(is_numeric($value->swzPrice)){
|
|
|
|
$seat_type .= '"M":"¥'.$value->ydzPrice.'",';
|
|
|
|
$swzPrice = $value->swzPrice * 10;
|
|
|
|
}
|
|
|
|
$seat_type .= '"9":"'.$swzPrice.'","A9":"¥'.$value->swzPrice.'",';
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if(isset($value->swzPrice)){
|
|
|
|
$pricestr = $seat_type.'"train_no":'.'"'.$value->trainNo.'"';
|
|
|
|
if(is_numeric($value->swzPrice)){
|
|
|
|
|
|
|
|
$swzPrice = $value->swzPrice * 10;
|
|
|
|
|
|
|
|
$seat_type .= '"9":"'.$swzPrice.'","A9":"¥'.$value->swzPrice.'",';
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
$pricestr = $seat_type.'"train_no":'.'"'.$value->trainNo.'"';
|
|
|
|
|
|
|
|
|
|
|
|
//对余票数进行验证
|
|
|
|
//对返回的数据进行容错处理
|
|
|
|
$value->gjrwNum = isset($value->gjrwNum) ? ticket_exchange($value->gjrwNum) : '';
|
|
|
|
$value->gjrwNum = isset($value->gjrwNum) ? ticket_exchange($value->gjrwNum,$iseven) : '';
|
|
|
|
$value->rwNum = isset($value->rwNum) ? ticket_exchange($value->rwNum) : '';
|
|
|
|
$value->rwNum = isset($value->rwNum) ? ticket_exchange($value->rwNum,$iseven) : '';
|
|
|
|
$value->rzNum = isset($value->rzNum)?ticket_exchange($value->rzNum) : '';
|
|
|
|
$value->rzNum = isset($value->rzNum)?ticket_exchange($value->rzNum,$iseven) : '';
|
|
|
|
$value->tdzNum = isset($value->tdzNum)?ticket_exchange($value->tdzNum) : '';
|
|
|
|
$value->tdzNum = isset($value->tdzNum)?ticket_exchange($value->tdzNum,$iseven) : '';
|
|
|
|
$value->wzNum = isset($value->wzNum)?ticket_exchange($value->wzNum) : '';
|
|
|
|
$value->wzNum = isset($value->wzNum)?ticket_exchange($value->wzNum,$iseven) : '';
|
|
|
|
$value->ywNum = isset($value->ywNum)?ticket_exchange($value->ywNum) : '';
|
|
|
|
$value->ywNum = isset($value->ywNum)?ticket_exchange($value->ywNum,$iseven) : '';
|
|
|
|
$value->yzNum = isset($value->yzNum)?ticket_exchange($value->yzNum) : '';
|
|
|
|
$value->yzNum = isset($value->yzNum)?ticket_exchange($value->yzNum,$iseven) : '';
|
|
|
|
$value->edzNum = isset($value->edzNum)?ticket_exchange($value->edzNum) : '';
|
|
|
|
$value->edzNum = isset($value->edzNum)?ticket_exchange($value->edzNum,$iseven) : '';
|
|
|
|
$value->ydzNum = isset($value->ydzNum)?ticket_exchange($value->ydzNum) : '';
|
|
|
|
$value->ydzNum = isset($value->ydzNum)?ticket_exchange($value->ydzNum,$iseven) : '';
|
|
|
|
$value->swzNum = isset($value->swzNum)?ticket_exchange($value->swzNum) : '';
|
|
|
|
$value->swzNum = isset($value->swzNum)?ticket_exchange($value->swzNum,$iseven) : '';
|
|
|
|
$value->dwNum = isset($value->dwNum)?ticket_exchange($value->dwNum) : '';
|
|
|
|
$value->dwNum = isset($value->dwNum)?ticket_exchange($value->dwNum,$iseven) : '';
|
|
|
|
|
|
|
|
$value->runTime = isset($value->runTime)?$value->runTime : '';
|
|
|
|
|
|
|
|
|
|
|
|
//余票字符串
|
|
|
|
//余票字符串
|
|
|
|
$return_data->data->result[$i] = '|预定|'.$value->trainNo.'|'.$value->trainCode.'|'.$value->fromStationName.'|'.$value->toStationName.'|'.$value->fromStationCode.'|'.$value->toStationCode.'|'.$value->startTime.'|'.$value->arriveTime.'|'.$value->runTime.'|'.$value->canBuyNow.'||'.date('Ymd',strtotime($value->trainStartDate)).'||||||||'.$value->gjrwNum.'||'.$value->rwNum.'|'.$value->rzNum.'|'.$value->tdzNum.'|'.$value->wzNum.'||'.$value->ywNum.'|'.$value->yzNum.'|'.$value->edzNum.'|'.$value->ydzNum.'|'.$value->swzNum.'|'.$value->dwNum.'||';
|
|
|
|
$return_data->data->result[$i] = '|预定|'.$value->trainNo.'|'.$value->trainCode.'|'.$value->fromStationName.'|'.$value->toStationName.'|'.$value->fromStationCode.'|'.$value->toStationCode.'|'.$value->startTime.'|'.$value->arriveTime.'|'.$value->runTime.'|'.$value->canBuyNow.'||'.date('Ymd',strtotime($value->trainStartDate)).'||||||||'.$value->gjrwNum.'||'.$value->rwNum.'|'.$value->rzNum.'|'.$value->tdzNum.'|'.$value->wzNum.'||'.$value->ywNum.'|'.$value->yzNum.'|'.$value->edzNum.'|'.$value->ydzNum.'|'.$value->swzNum.'|'.$value->dwNum.'||';
|
|
|
|
$data = '{"validateMessagesShowId":"_validatorMessage","status":true,"httpstatus":200,"data":{'.$pricestr.'},"messages":[],"validateMessages":{}}';
|
|
|
|
$data = '{"validateMessagesShowId":"_validatorMessage","status":true,"httpstatus":200,"data":{'.$pricestr.'},"messages":[],"validateMessages":{}}';
|
|
|
|
$return_data->data->price[$i] = $data;
|
|
|
|
$return_data->data->price[$i] = $data;
|
|
|
|
$this->tuniuprice_model->addOrUpdate($value->trainNo,$value->trainCode,$value->fromStationCode,$value->toStationCode,json_encode($data));
|
|
|
|
$i++;
|
|
|
|
$i++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
$return_data->data->map = (object)$obj;
|
|
|
|
$return_data->data->map = (object)$obj;
|
|
|
|
print_r(json_encode($return_data));
|
|
|
|
print_r(json_encode($return_data));
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|