From 9abcb8c0d38ab446b142baed21629141f6cf424c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E9=B9=8F?= Date: Sat, 8 Feb 2025 16:47:49 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A1=BA=E9=80=94=E6=96=B0=E7=89=88=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E5=9B=9E=E8=B0=83=E5=AE=8C=E6=88=90=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../trainsystem/controllers/callback.php | 349 ++++++++++++++++++ 1 file changed, 349 insertions(+) diff --git a/application/third_party/trainsystem/controllers/callback.php b/application/third_party/trainsystem/controllers/callback.php index 7df96b8c..c1e58ec2 100644 --- a/application/third_party/trainsystem/controllers/callback.php +++ b/application/third_party/trainsystem/controllers/callback.php @@ -217,6 +217,355 @@ class callback extends CI_Controller{ $update_data->operateTradeNo =""; + if($update_data->ServiceName == 'notice.ticketresult'){ + if ( $ctrip_backdata->ticketResult->resultCode == 1){ + $update_data->OrderStatus = '4'; + if (isset($ctrip_backdata->ticketResult->resultMsg)){ + $update_data->ErrorMsg = $ctrip_backdata->ticketResult->resultMsg; + } else { + $update_data->ErrorMsg = '出票成功'; + } + }else{ + $update_data->OrderStatus = '5'; + if (isset($ctrip_backdata->ticketResult->resultMsg)){ + $update_data->ErrorMsg = $ctrip_backdata->ticketResult->resultMsg; + }else{ + $update_data->ErrorMsg = '出票失败'; + } + } + $update_data->ordernumber = $ctrip_backdata->ticketResult->companyOrderId; + if (isset($ctrip_backdata->ticketResult->orderMasterInfo->totalPayAmount)){ + $update_data->OrderTotleFee = $ctrip_backdata->ticketResult->orderMasterInfo->totalPayAmount; //总价 + } + if (isset($ctrip_backdata->ticketResult->operateTradeNo)) { + $update_data->operateTradeNo = $ctrip_backdata->ticketResult->operateTradeNo; //操作流水号 如产生差额退款或者无票退款,退款通知里会有相同的操作流水号做对应。 + } + + $update_data->ticketresultcallback = $back_json; + //$update_data->OrderTicketTime = $ctrip_backdata->TrainOrderService->OrderInfo->TicketInfo->OrderTicketTime; + + //新接口数据,不一定保存到数据库里面,原订单已有,做个记录 + if (isset( $ctrip_backdata->ticketResult->ticketSuccTime)){ + $update_data->ticketSuccTime = $ctrip_backdata->ticketResult->ticketSuccTime; //出票成功时间 + } + $update_data->orderType = $ctrip_backdata->ticketResult->orderMasterInfo->orderType; //订单类型 0电子票 1配送票 2人工客票 3抢票订单 + $update_data->contactName = $ctrip_backdata->ticketResult->orderMasterInfo->contactName; //联系人 + $update_data->mobileNo = des_decrypt($ctrip_backdata->ticketResult->orderMasterInfo->mobileNo,$key); //联系电话 (DES加密) + + //人员及车票 + $data_passager = new stdClass(); + + foreach ( $ctrip_backdata->ticketResult->passengerInfoList as $pItems) { + $data_passager->ordernumber = $ctrip_backdata->ticketResult->companyOrderId; + //人员列表 + $data_passager->status = '4'; + $certificateType = $this->train_certificateType[ $pItems->certificateType]; //证件类型,身份证传1、护照2、回乡证7、台胞证8、外国人永久居留身份证28、港澳台居民居住证32; + $data_passager->identitytype = $certificateType; + $data_passager->realname = $pItems->certificateName; + $data_passager->numberid = des_decrypt($pItems->certificateNo,$key) ; //证件号码 (DES加密) + $data_passager->birthday = $pItems->birthday; + if ($pItems->passengerType==2){ + $passengerType = "儿童"; + }else{ + $passengerType = "成人"; + } + $data_passager->ticketype = $passengerType; //乘客类型 1成人 2儿童 + $passengerId = $pItems->passengerId; + foreach ( $ctrip_backdata->ticketResult->orderRouteInfoList as $rItems ){ + //行程,目前我们都是单程提交,所以这里应该只有单程 + $routeId = $rItems->routeId; + + if (isset($rItems->elecNo)){ + $elecNo = $rItems->elecNo; //电子订单号,即12306取票号 + $update_data->ElectronicOrderNumber = $elecNo ; + } + if (isset($rItems->checkWindow)){ + $checkWindow = $rItems->checkWindow; //检票口 + $update_data->TicketCheck = $checkWindow; + } + $data_passager->seatype = $rItems->ticketSeat; + + $update_data->trainNo = $rItems->trainNo; //车次 + $update_data->departTime = $rItems->departTime; //车次出发时间 + + + $orderTicketInfoList = $ctrip_backdata->ticketResult->orderTicketInfoList ; + if (!empty($orderTicketInfoList)){ + foreach ($orderTicketInfoList as $tItems) { + //对应的车票列表 + if ($passengerId == $tItems->passengerId && $routeId==$tItems->routeId){ + + $data_passager->ticketprice = $tItems->realTicketPrice; + $SeatNo = ""; + if (isset($tItems->carriageNo)){ + $SeatNo.=$tItems->carriageNo."车厢"; + } + if (isset($tItems->seatNo)){ + $SeatNo.=$tItems->seatNo; + } + $data_passager->seatdetail = $SeatNo; + $data_passager->longtrainno = $tItems->longElecNo; + $data_passager->lanhaiData = ""; //对应澜海那边的数据,这边设置为空 + + //入库 + $this->train_system_model->add_passagers($data_passager); + } + } + } + + } + + + } + + + /****************************************************************************************/ + //添加支付记录 + $add_train_payment_data = new stdClass(); + $add_train_payment_data->TOC_Memo = $update_data->ordernumber.'出票费'; + $add_train_payment_data->TOC_VEI_SN = "28209"; + + //根据订单号获取cold_sn + $order_info = $this->train_system_model->get_order_info($update_data->ordernumber); + $cold_sn = $order_info->ts_cold_sn; + $add_train_payment_data->TOC_COLD_SN = $cold_sn; + $add_train_payment_data->TOC_TrainNumber = $update_data->trainNo; + $add_train_payment_data->TOC_DepartureDate = date('Y-m-d',strtotime($update_data->departTime )); + $add_train_payment_data->TOC_TicketCost = $update_data->OrderTotleFee; + $add_train_payment_data->poundage = "0"; + $add_train_payment_data->FOI_TrainNetOrderNo = $update_data->ElectronicOrderNumber; //电子票号 + //print_r($add_train_order_data);die(); + $this->BIZ_train_model->add_train_payment($add_train_payment_data); + //记录供应商(瀚特) + $this->BIZ_train_model->update_cold_planvei_sn($cold_sn,'28209'); + }else if($update_data->ServiceName == 'notice.ordercancel'){ //订单取消 + $update_data->ordernumber = $ctrip_backdata->cancelResult->companyOrderId; + $update_data->OrderStatus = '12'; + $update_data->ErrorMsg = '订单取消'.$ctrip_backdata->cancelResult->cancelTime; + $update_data->confirmcallback = $back_json; + }else if($update_data->ServiceName == 'notice.refundresult'){ //退款通知 + $refundType = $ctrip_backdata->refundResult->refundType; //退款类型int + $reason = $ctrip_backdata->refundResult->reason; //退款原因 + $refundTime = $ctrip_backdata->refundResult->refundTime; //退款时间 + $return_money = $ctrip_backdata->refundResult->refundAmount; //退款金额 + + $update_data->ordernumber = $ctrip_backdata->refundResult->companyOrderId; + if ($refundType=="1"){ + $update_data->OrderStatus = '10'; + }else{ + $update_data->OrderStatus = '11'; + } + $update_data->ErrorMsg = '退款:'.$this->train_refundType[$refundType]." 金额:".$return_money." time:". $refundTime; + $update_data->refundcallback = $back_json; + + //翰特添加退款记录 + $refund_train_payment = new stdClass(); + $return_order = $ctrip_backdata->refundResult->companyOrderId; + + $refund_train_payment->TOC_VEI_SN = "28209"; + + //根据订单号获取cold_sn + $order_info = $this->train_system_model->get_order_info($return_order); + $cold_sn = $order_info->ts_cold_sn; + //print_r($order_info); + + //获取longElecNo(长电子订单号)用来判断是否是多张票退款 + $longElecNo=""; + if (isset($ctrip_backdata->refundResult->refundDetailInfoList)){ + $refundDetailInfoList = $ctrip_backdata->refundResult->refundDetailInfoList; + $longElecNo = $refundDetailInfoList[0]->longElecNo; + } + + + $memo = $return_order.'_'.$this->train_refundType[$refundType].'_长电子订单号:'. $longElecNo . '_' . $refundTime; //退款集合信息 + $refund_train_payment->TOC_Memo = $memo; + $refund_train_payment->TOC_COLD_SN = $cold_sn; + $refund_train_payment->TOC_TrainNumber = $order_info->ts_checi; + $refund_train_payment->TOC_DepartureDate = $order_info->ts_startdate; + $refund_train_payment->TOC_TicketCost = -$return_money; + //print_r($add_train_payment_data);die(); + $this->BIZ_train_model->refund_train_payment($refund_train_payment); + + }else if($update_data->ServiceName == 'notice.returnresult'){ //退票 + $update_data->ordernumber = $ctrip_backdata->returnResult->companyOrderId; + $resultCode = $ctrip_backdata->returnResult->resultCode; + $update_data->ErrorMsg = $ctrip_backdata->returnResult->resultMsg; + $longElecNo = $ctrip_backdata->returnResult->longElecNo; + $returnSuccTime = $ctrip_backdata->returnResult->returnSuccTime; //退票成功时间 yyyy-MM-dd hh:mm:ss + $printStatus = $ctrip_backdata->returnResult->printStatus; //1 已取票 2未取票 0未知 + $preRefundAmount = $ctrip_backdata->returnResult->preRefundAmount; // 预计退票退款 + $sxfAmount= $ctrip_backdata->returnResult->sxfAmount; //退票手续费 + $operateTradeNo = $ctrip_backdata->returnResult->operateTradeNo; //操作流水号 退款通知里会有相同的操作流水号做对应。 + $update_data->operateTradeNo=$operateTradeNo; + + $passpager_info = new stdClass(); + $passpager_info->returncallback = $back_json; + $passpager_info->ordernumber = $ctrip_backdata->returnResult->companyOrderId; + $passpager_info->longElecNo = $longElecNo; + if ($resultCode=="1"){ + //退票成功 + $update_data->OrderStatus = '7'; + //退票时还需要单独对对每个乘客存储回调信息 + $passpager_info->status = '7'; + //保存退票成功信息到trainsystem + if ($printStatus==1){ + $pintmsg="已取票"; + }else if($printStatus==2){ + $pintmsg="未取票"; + }else{ + $pintmsg=""; + } + $msg = "退票成功:".$ctrip_backdata->returnResult->resultMsg."(".$returnSuccTime.",".$pintmsg.",预计退票退款:".$preRefundAmount.",手续费:".$sxfAmount.")"; + $update_data->ErrorMsg=$msg; + + //退票手续费保存到数据库 + //翰特添加退款记录 + $returnticket = new stdClass(); + $return_order = $ctrip_backdata->returnResult->companyOrderId; + + $returnticket->TOC_VEI_SN = "28209"; + + //根据订单号获取cold_sn + $order_info = $this->train_system_model->get_order_info($return_order); + $cold_sn = $order_info->ts_cold_sn; + //print_r($order_info); + + //获取longElecNo(长电子订单号)用来判断是否是多张票 + $longElecNo=$ctrip_backdata->returnResult->longElecNo; + $returnSuccTime = $ctrip_backdata->returnResult->returnSuccTime; + + $memo = $return_order.'_长电子订单号:'. $longElecNo . '_' . $returnSuccTime; //退款集合信息 + $returnticket->TOC_Memo = $memo; + $returnticket->TOC_COLD_SN = $cold_sn; + $returnticket->TOC_TrainNumber = $order_info->ts_checi; + $returnticket->TOC_DepartureDate = $order_info->ts_startdate; + $returnticket->TOC_TicketCost = -$sxfAmount>0?$sxfAmount:15; + //print_r($add_train_payment_data);die(); + $this->BIZ_train_model->returnticket_train($returnticket); + + + }else{ + //退票失败 + $update_data->OrderStatus = '8'; + //失败也保存下信息 + $passpager_info->status = '8'; + + } + $this->train_system_model->return_update_passpager_info($passpager_info); + $update_data->returncallback = $back_json; + + + }elseif($update_data->ServiceName == 'web.order.returnRescheduleResult'){ + $update_data->ordernumber = $ctrip_backdata->TrainOrderService->OrderNumber; + $update_data->OrderStatus = '7'; + $update_data->ErrorMsg = $ctrip_backdata->TrainOrderService->refundRescheduleTicket->reason; + $update_data->returncallback = $back_json; + + $passpager_info = new stdClass(); + $passpager_info->returncallback = $back_json; + $passpager_info->status = '7'; + $passpager_info->ordernumber = $ctrip_backdata->TrainOrderService->OrderNumber; + $passpager_info->realname = $ctrip_backdata->TrainOrderService->refundRescheduleTicket->realName; + $passpager_info->numberid = $ctrip_backdata->TrainOrderService->refundRescheduleTicket->passport; + $this->train_system_model->update_passpager_info($passpager_info); + }else if($update_data->ServiceName == 'web.order.requestRefund'){ + // $return_order = $ctrip_backdata->TrainOrderService->OrderInfo->OrderNumber; + // $return_money = $ctrip_backdata->TrainOrderService->TotalRefundAmount; + + // //根据订单号获取cold_sn + // $order_info = $this->train_system_model->get_order_info($return_order); + // $cold_sn = $order_info->ts_cold_sn; + // //print_r($order_info); + + // $add_train_payment_data->TOC_Memo = $return_order.'_'.$ctrip_backdata->TrainOrderService->OrderInfo->OrderTid; + // $add_train_payment_data->TOC_COLD_SN = $cold_sn; + // $add_train_payment_data->TOC_TrainNumber = $order_info->ts_checi; + // $add_train_payment_data->TOC_DepartureDate = $order_info->ts_startdate; + // $add_train_payment_data->TOC_TicketCost = -$ctrip_backdata->TrainOrderService->TotalRefundAmount; + // $add_train_payment_data->FOI_TrainNetOrderNo=null; + // //print_r($add_train_payment_data);die(); + // $this->BIZ_train_model->add_train_payment($add_train_payment_data); + // return false; + }else if ($update_data->ServiceName == 'web.order.rescheduleResult'){ + $update_data->ordernumber = $ctrip_backdata->TrainOrderService->OrderInfo->OrderNumber; + $reschedule_status = $ctrip_backdata->TrainOrderService->OrderInfo->RescheduleTicketInfo->RescheduleTickets->RescheduleTicket->status; + if($reschedule_status){ + $update_data->OrderStatus = '9'; + $update_data->ErrorMsg = '改签成功'; + + $passpager_info = new stdClass(); + $passpager_info->returncallback = $back_json; + $passpager_info->status = '9'; + $passpager_info->ordernumber = $ctrip_backdata->TrainOrderService->OrderInfo->OrderNumber; + $passpager_info->realname = $ctrip_backdata->TrainOrderService->OrderInfo->RescheduleTicketInfo->RescheduleTickets->RescheduleTicket->passportName; + $passpager_info->numberid = $ctrip_backdata->TrainOrderService->OrderInfo->RescheduleTicketInfo->RescheduleTickets->RescheduleTicket->passport; + $this->train_system_model->update_passpager_info($passpager_info); + }else{ + $update_data->OrderStatus = '5'; + $update_data->ErrorMsg = '改签失败'; + } + $update_data->reschedulecallback = $back_json; + } + //更新订单信息(出票系统) + $this->train_system_model->update_orders($update_data); + + // //返回结果 + // $returnResult = new stdClass(); + // $returnResult->returnCode = 1; + // $returnResult->returnMsg = ""; + // echo(json_encode($returnResult)); + } + } + + ///回调地址:http://www.mycht.cn/info.php/apps/trainsystem/callback/shuntucallback2025/ + public function shuntucallback2025(){ + $back_json = file_get_contents('php://input'); + log_message('error','顺途2回调信息:'.$back_json); + + + $ctrip_backdata = json_decode($back_json); + // print_r($ctrip_backdata); + // die(); + + if(!empty($ctrip_backdata)){ + + //判断回调信息是否正确,主要判断是否是本企业的回调信息 + $TimeStamp = $ctrip_backdata->authentication->timeStamp; + $serviceName = $ctrip_backdata->authentication->serviceName; //每个接口都有自己名称 + $companyId = SHUNTU_ID; + $key = SHUNTU_KEY; + + /** 测试服务器 */ + $strSign = $TimeStamp.$serviceName.$companyId.$key; //加密前的令牌 + $Sign = md5($strSign); + $messageIdentity = $ctrip_backdata->authentication->messageIdentity; + $ResultNoticeResponse = new stdClass(); + if ($Sign == $messageIdentity){ + $ResultNoticeResponse->returnCode = 1; + $ResultNoticeResponse->returnMsg = "success"; + }else { + $ResultNoticeResponse->returnCode = 0; + $ResultNoticeResponse->returnMsg = "messageIdentity is error!"; + } + echo json_encode($ResultNoticeResponse); + + //处理回调的内容,保存到本地及翰特 + $update_data = new stdClass(); + $update_data->ServiceName = $ctrip_backdata->authentication->serviceName; + $update_data->ordernumber = ''; + $update_data->seatsinfo = ''; + $update_data->TicketCheck = ''; + $update_data->bookcallback = ''; + $update_data->confirmcallback = ''; + $update_data->returncallback = ''; + $update_data->OrderTotleFee = 0; + $update_data->ElectronicOrderNumber = ''; + $update_data->reschedulecallback = ''; + $update_data->OrderTicketTime = ''; + //新字段 + $update_data->operateTradeNo =""; + + if($update_data->ServiceName == 'notice.ticketresult'){ if ( $ctrip_backdata->ticketResult->resultCode == 1){ $update_data->OrderStatus = '4';