顺途火车票2。0版 。站站查询,出票。 20%。

master
赵鹏 1 year ago
parent 3061fba829
commit a17e06e06b

@ -1113,6 +1113,318 @@ class addorders extends CI_Controller{
echo json_encode($reback,JSON_UNESCAPED_UNICODE);
}
//顺途模块携程新2.0
function shuntuModel($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 = SHUNTU_ID;
$key = SHUNTU_KEY;
$strSign = $TimeStamp.$serviceName.$companyId.$key; //加密前的令牌
$Sign = md5($strSign);
$url = "http://ctrip.21kv.com/train/ticket/create/order";
//拼接发送的报文
$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->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']->fromStationCode = $data['train']->DepartAirport;
$PostData->trainOrderInfo->orderInfo->ticketList['0']->toStationCode = $data['train']->ArrivalAirport;
$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']->allQDeparture = ''; //发车备选时间,抢票时必传
// $PostData->trainOrderInfo->orderInfo->ticketList['0']->allQArrivalTime = ''; //到达时间,抢票时必传
$PostData->trainOrderInfo->orderInfo->ticketList['0']->qorderStartTime = ''; //抢票任务开始时间,抢票时必传
$PostData->trainOrderInfo->orderInfo->ticketList['0']->qorderEndTime = ''; //抢票任务结束时间,抢票时必传
//acceptInfoList 抢票可接受信息,最多支持三个日期 //不传
$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;
$PostData->trainOrderInfo->orderInfo->ticketList['0']->forceExtra = false; //是否必须满足选座
$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);
if ($PassagerInfo->BPE_SEX =="100001"){
$sex = "M"; //男
}else if ($PassagerInfo->BPE_SEX =="100003"){
$sex = "F";
}else{
$sex = "";
}
$passagersdata[$i]->sex = $sex; //20250107新接口新增性别 F女M男)
$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]->country = "CN";
}
else if ($regionCode=="UK" || $regionCode=="GB"){
$passagersdata[$i]->country = "GB"; //英国传GB
}else{
$passagersdata[$i]->country = $regionCode; //国家简码 美国us ,中国cn
}
}
$i++;
}
//乘客人信息
$PostData->trainOrderInfo->orderInfo->ticketList['0']->passengerList = $passagersdata;
//目前产品列表包括免核验、指定下铺订单类型为2时可用
$PostData->trainOrderInfo->orderInfo->ticketList['0']->extraService = new stdClass();
$PostData->trainOrderInfo->orderInfo->ticketList['0']->extraService->noVerifyFlag = 1;
$PostData->trainOrderInfo->orderInfo->ticketList['0']->extraService->lowerBerthFlag = 0;
$PostData->trainOrderInfo->orderInfo->ticketList['0']->extraService->lowerBerthCount = 0;
$PostData->trainOrderInfo->orderInfo->frontSeatFlag = 0; //前置扣位标记前置扣位传值为1普通代购传0
$PostData->trainOrderInfo->orderInfo->orderRemark = ""; //订单备注,80字符
$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) ;
//本地添加记录
$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
$add_data->lanhaiData = ""; //途牛默认澜海数据为空
// print_r(json_encode($PostData));
// die();
//存储到数据库
$this->train_system_model->add_orders($add_data);
$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->shuntu_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 shuntu_payorders($CtripOrder,$Price){
if(empty($CtripOrder) && !is_numeric($Price)){
exit('传参错误!');
}
//生成接口请求头参数
$TimeStamp = date("Y-m-d H:i:s");
$serviceName = "train.companyPayOrder"; //每个接口都有自己名称
$companyId = SHUNTU_ID;
$key = SHUNTU_KEY;
// /** 测试服务器 */
// $companyId = "1503141150";
// $key = "hajkrtba";
$strSign = $TimeStamp.$serviceName.$companyId.$key; //加密前的令牌
$Sign = md5($strSign);
$url = "http://ctrip.21kv.com/train/ticket/ticket/pay";
//生成报文
$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":[]}}
}
}

@ -680,20 +680,6 @@ class innerTrainSearch extends CI_Controller{
$iseven = true;
}
//转换三字码为中文
$this->load->model("ctrip_model");
$FromName = $this->ctrip_model->ReplaceCodeToName($from);
$ToName = $this->ctrip_model->ReplaceCodeToName($to);
if(!$FromName || !$ToName){
header("HTTP/1.1 404 Not Found");
exit('{"httpstatus":404,"data":{"seven":false,"cache":false,"result":[],"map":{}}}');
}else{
$FromName = $FromName->station_name;
$ToName = $ToName->station_name;
}
//生成请求链接
$TimeStamp = date("Y-m-d H:i:s");
$serviceName = "train.searchTrainsBetweenStations"; //每个接口都有自己名称
@ -710,10 +696,10 @@ class innerTrainSearch extends CI_Controller{
$post_data->authentication->messageIdentity = $Sign;
$post_data->searchTrainsParam = new stdClass();
$post_data->searchTrainsParam->departDate = $date;
$post_data->searchTrainsParam->fromStationCode = "";
$post_data->searchTrainsParam->toStationCode = "";
$post_data->searchTrainsParam->fromStationName = $FromName;
$post_data->searchTrainsParam->toStationName = $ToName;
$post_data->searchTrainsParam->fromStationCode = $from;
$post_data->searchTrainsParam->toStationCode = $to;
$post_data->searchTrainsParam->fromStationName = "";
$post_data->searchTrainsParam->toStationName = "";
$post_data->searchTrainsParam->trainNo = "";
$api_start_time = microtime(true);
@ -728,7 +714,7 @@ class innerTrainSearch extends CI_Controller{
$ResponseData = json_decode($ResponseJson);
echo($ResponseJson);
//echo($ResponseJson);
$api_responsive_time = $api_end_time - $api_start_time;
@ -870,9 +856,9 @@ class innerTrainSearch extends CI_Controller{
//print_r($ResponseData);die();
$ReturnData->data->map = (object)$obj;
if($return){
return json_encode($ReturnData);
return json_encode($ReturnData,JSON_UNESCAPED_UNICODE);
}else{
echo json_encode($ReturnData);
echo json_encode($ReturnData,JSON_UNESCAPED_UNICODE);
}
}

Loading…
Cancel
Save