|
|
|
|
@ -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":[]}}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|