From a17e06e06bd455f87a5f6286df7b167851d6c279 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E9=B9=8F?= Date: Wed, 8 Jan 2025 09:56:58 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A1=BA=E9=80=94=E7=81=AB=E8=BD=A6=E7=A5=A82?= =?UTF-8?q?=E3=80=820=E7=89=88=20=E3=80=82=E7=AB=99=E7=AB=99=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=EF=BC=8C=E5=87=BA=E7=A5=A8=E3=80=82=2020%=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../trainsystem/controllers/addorders.php | 312 ++++++++++++++++++ .../controllers/innerTrainSearch.php | 28 +- 2 files changed, 319 insertions(+), 21 deletions(-) diff --git a/application/third_party/trainsystem/controllers/addorders.php b/application/third_party/trainsystem/controllers/addorders.php index 7f122aa8..cc20bb27 100644 --- a/application/third_party/trainsystem/controllers/addorders.php +++ b/application/third_party/trainsystem/controllers/addorders.php @@ -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":[]}} + } } diff --git a/application/third_party/trainsystem/controllers/innerTrainSearch.php b/application/third_party/trainsystem/controllers/innerTrainSearch.php index 244b7021..a7e4c628 100644 --- a/application/third_party/trainsystem/controllers/innerTrainSearch.php +++ b/application/third_party/trainsystem/controllers/innerTrainSearch.php @@ -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); } }