load->helper('train'); $this->load->model("train_system_model"); $this->load->model("BIZ_train_model"); } public function juhecallback(){ $data_post = $this->input->post(); if(empty($data_post)){ header("HTTP/1.1 404 Not Found"); exit('{"reason":"empty infos","status":"404"}'); } //调试代码 /*$test_post = '{"data":"{\"from_station_name\":\"\u5357\u4eac\",\"from_station_code\":\"NJH\",\"to_station_name\":\"\u4e0a\u6d77\",\"to_station_code\":\"SHH\",\"train_date\":\"2019-08-03\",\"orderid\":\"JH156315443048530\",\"user_orderid\":\"468046527\",\"orderamount\":\"418.50\",\"ordernumber\":\"EE33125907\",\"checi\":\"G7013\",\"msg\":\"\u51fa\u7968\u5931\u8d25\",\"status\":\"5\",\"passengers\":[{\"passengerid\":1,\"passengersename\":\"YUKITAKE\u3000KOICHI\",\"piaotype\":\"1\",\"piaotypename\":\"\u6210\u4eba\u7968\",\"passporttypeseid\":\"B\",\"passporttypeseidname\":\"\u62a4\u7167\",\"passportseno\":\"TR7398798\",\"price\":\"139.5\",\"zwcode\":\"O\",\"zwname\":\"\u4e8c\u7b49\u5ea7\",\"ticket_no\":\"EE33125907102005B\",\"cxin\":\"02\u8f66\u53a2,05B\u5ea7\",\"reason\":0},{\"passengerid\":2,\"passengersename\":\"HOSHINOHIROMI\",\"piaotype\":\"1\",\"piaotypename\":\"\u6210\u4eba\u7968\",\"passporttypeseid\":\"B\",\"passporttypeseidname\":\"\u62a4\u7167\",\"passportseno\":\"TR5942140\",\"price\":\"139.5\",\"zwcode\":\"O\",\"zwname\":\"\u4e8c\u7b49\u5ea7\",\"ticket_no\":\"EE33125907102005C\",\"cxin\":\"02\u8f66\u53a2,05C\u5ea7\",\"reason\":0},{\"passengerid\":3,\"passengersename\":\"TEZUKATAKANORI\",\"piaotype\":\"1\",\"piaotypename\":\"\u6210\u4eba\u7968\",\"passporttypeseid\":\"B\",\"passporttypeseidname\":\"\u62a4\u7167\",\"passportseno\":\"TK1662102\",\"price\":\"139.5\",\"zwcode\":\"O\",\"zwname\":\"\u4e8c\u7b49\u5ea7\",\"ticket_no\":\"EE33125907102005D\",\"cxin\":\"02\u8f66\u53a2,05D\u5ea7\",\"reason\":0}],\"refund_money\":null,\"sign\":\"97c6b02c625bfd5ade3e76118c20af38\"}"}'; $data_post["data"] = json_decode($test_post)->data;*/ log_message('error','聚合回调:'.json_encode($data_post)); $data = json_decode($data_post["data"]); $update_data = new StdClass(); $update_data->OrderStatus = $data->status; $update_data->ordernumber = $data->orderid; $update_data->OrderTotleFee = $data->orderamount; $update_data->seatsinfo = ''; $update_data->TicketCheck = ''; $update_data->bookcallback = ''; $update_data->confirmcallback = ''; $update_data->returncallback = ''; $update_data->ElectronicOrderNumber = $data->ordernumber; $update_data->reschedulecallback = ''; $update_data->ErrorMsg = $data->msg; //如果返回2则发送出票请求 if($data->status == "1"){ $update_data->bookcallback = $data_post["data"]; }elseif($data->status == "2"){ $coach = array(); $seats = array(); $string = ''; $passagers = $data->passengers; foreach($passagers as $item){ foreach(explode(',',$item->cxin) as $item_seat){ if(strpos($item_seat,'车厢')){ $item_seat = str_replace('车厢','',$item_seat); array_push($coach,$item_seat); }else{ $find = array('座上铺','座中铺','座下铺','座'); $replace = array(' upper',' middle',' lower',''); $item_seat = str_replace($find,$replace,$item_seat); array_push($seats,$item_seat); } } //对订票乘客进行存储 $data_passager = new stdClass(); $data_passager->ordernumber = $data->orderid; $data_passager->realname = $item->passengersename; $data_passager->identitytype = $item->passporttypeseidname; $data_passager->numberid = $item->passportseno; $data_passager->ticketype = $item->piaotypename; $data_passager->ticketprice = $item->price; $data_passager->seatype = $item->zwname; $data_passager->seatdetail = $item->cxin; $data_passager->status = '4'; $this->train_system_model->add_passagers($data_passager); } //判断车厢是否唯一,如果不唯一的话,分成两个车厢 if(count(array_unique($coach)) == 1){ $onlycoach = array_unique($coach); $string .= 'Coach '.$onlycoach[0].',Seat '; foreach($seats as $item_seat){ $string .= $item_seat.','; } }else{ for ($i=0;$iseatsinfo = substr($string,0,strlen($string)-1); $post_data = array( "key"=>JUHE_TRAIN_API_KEY, "orderid"=>$data->orderid ); $back_json = GetPost_http(JUHE_TRAIN_PAY_API,$post_data); $update_data->bookcallback = $data_post["data"]; }elseif($data->status == "4"){ $add_train_order_data = new stdClass(); $add_train_order_data->TOC_Memo = $data->orderid." 聚合出票"; $add_train_order_data->TOC_COLD_SN = $data->user_orderid; $add_train_order_data->TOC_TrainNumber = $data->checi; $add_train_order_data->TOC_DepartureDate = $data->train_date; $add_train_order_data->TOC_TicketCost = $data->orderamount; $add_train_order_data->poundage = (count($data->passengers)*2)."";//手续费,每人两块,转换成字符串 $add_train_order_data->FOI_TrainNetOrderNo = $data->ordernumber; $this->BIZ_train_model->add_train_payment($add_train_order_data); $update_data->confirmcallback = $data_post["data"]; $this->BIZ_train_model->update_cold_planvei_sn($data->user_orderid); }elseif($data->status=="5"){ $update_data->confirmcallback = $data_post["data"]; }elseif($data->status=="7"){ //退票成功 写入TOC表 $newtime = "";//记录最新操作时间 $refund_passportseno = "";//退票人护照号 $refund_money = "";//退票金额 foreach ($data->passengers as $p) { if(isset($p->returntickets)){ $refund_passportseno = $p->refundTimeline[count($p->refundTimeline)-1]->detail->passportseno; $refund_money = $p->refundTimeline[count($p->refundTimeline)-1]->detail->returnmoney; //退票时还需要单独对对每个乘客存储回调信息 $passpager_info = new stdClass(); $passpager_info->returncallback = $data_post["data"]; $passpager_info->status = '7'; $passpager_info->ordernumber = $data->orderid; $passpager_info->realname = $p->refundTimeline[count($p->refundTimeline)-1]->detail->passengername; $passpager_info->numberid = $refund_passportseno; $this->train_system_model->update_passpager_info($passpager_info); //添加退款记录 $add_train_order_data = new stdClass(); $add_train_order_data->TOC_COLD_SN = $data->user_orderid; $add_train_order_data->TOC_Memo = $data->orderid." ".$refund_passportseno; $add_train_order_data->ordernumber = $data->user_orderid; $add_train_order_data->TOC_TrainNumber = $data->checi; $add_train_order_data->TOC_DepartureDate = $data->train_date; $add_train_order_data->TOC_TicketCost = -$refund_money; $add_train_order_data->FOI_TrainNetOrderNo = null;//退票不用更新取票号,以此在模型里面判断是否为退票消息 $this->BIZ_train_model->add_train_payment($add_train_order_data); }else{ //有可能提交了退票或者还没有退票 } } $update_data->returncallback = $data_post["data"]; } //print_r($update_data);die(); //更新订单信息(出票系统) $this->train_system_model->update_orders($update_data); } public function ctripcallback(){ $back_json = file_get_contents('php://input'); log_message('error','携程回调信息:'.$back_json); $back_json = '{"@attributes":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance"},"Authentication":{"TimeStamp":"2019-08-05 14:02:42","ServiceName":"web.order.notifyTicket","MessageIdentity":"90D9B095D5E08277BBA115D1F2E99CC8","PartnerName":"tieyou"},"TrainOrderService":{"OrderInfo":{"OrderNumber":"guilintravel1564984816236","ElectronicOrderNumber":"EH75665590","OrderType":"\u7535\u5b50","OrderTotleFee":"2940.00","TicketInfo":{"OrderTicketFromStation":"\u5317\u4eac\u897f","OrderTicketToStation":"\u5357\u5b81","OrderTicketYMD":"20190815","OrderTicketTime":"16:09","OrderTicketCheci":"Z5","OrderTicketPrice":"735.00","OrderAcceptSeat":{"0":"\n "},"OrderTicketSeat":"\u8f6f\u5367","SeatNumber":"06\u8f66\u53a201\u53f7\u4e0b\u94fa,06\u8f66\u53a203\u53f7\u4e0b\u94fa,06\u8f66\u53a202\u53f7\u4e0a\u94fa,06\u8f66\u53a204\u53f7\u4e0a\u94fa","railwayTip":{"0":"\n "},"AuditTicketCount":"4","ChildTicketCount":"0","Passengers":{"Passenger":[{"RealName":"MATILDE SOARES SAMPAIO","IdentityType":"\u62a4\u7167","NumberID":"N755614","TicketType":"\u6210\u4eba\u7968","Birth":{"0":"\n "},"InsuranceCount":"0"},{"RealName":"NUNO BERNARDO NOBRE SOARES","IdentityType":"\u62a4\u7167","NumberID":"P668714","TicketType":"\u6210\u4eba\u7968","Birth":{"0":"\n "},"InsuranceCount":"0"},{"RealName":"NUNO BERNARDO NOBRE SOARES","IdentityType":"\u62a4\u7167","NumberID":"P668715","TicketType":"\u6210\u4eba\u7968","Birth":{"0":"\n "},"InsuranceCount":"0"},{"RealName":"ANA SOFIA ROCIO CRESPO NOBRE","IdentityType":"\u62a4\u7167","NumberID":"N751936","TicketType":"\u6210\u4eba\u7968","Birth":{"0":"\n "},"InsuranceCount":"0"}]}},"TicketInfoFinal":{"OrderTicketFromStation":"\u5317\u4eac\u897f","OrderTicketToStation":"\u5357\u5b81","ChildBillid":{"0":"\n "},"ElectronicOrderNumber":"EH75665590","Result":"2","NoTicketReasons":{"0":"\n "},"OrderTicketYMD":"20190815","OrderTicketTime":"16:09","OrderTicketCheci":"Z5","OrderTicketPrice":"735.00","SeatNumber":"06\u8f66\u53a201\u53f7\u4e0b\u94fa","railwayTip":{"0":"\n "},"TicketCheck":{"0":"\n "},"IsUserAcount":"0","ReturnFlag":"0","RescheduleFlag":"0","Tickets":{"Ticket":[{"OrderTicketSeat":"\u8f6f\u5367","TicketType":"\u6210\u4eba\u7968","OrderTicketPrice":"751.50","TicketCount":"2","DetailInfos":{"DetailInfo":[{"PassengerName":"MATILDE SOARES SAMPAIO","IdentityType":"\u62a4\u7167","NumberID":"N755614","SeatNo":"06\u8f66\u53a201\u53f7\u4e0b\u94fa"},{"PassengerName":"NUNO BERNARDO NOBRE SOARES","IdentityType":"\u62a4\u7167","NumberID":"P668714","SeatNo":"06\u8f66\u53a203\u53f7\u4e0b\u94fa"}]}},{"OrderTicketSeat":"\u8f6f\u5367","TicketType":"\u6210\u4eba\u7968","OrderTicketPrice":"718.50","TicketCount":"2","DetailInfos":{"DetailInfo":[{"PassengerName":"NUNO BERNARDO NOBRE SOARES","IdentityType":"\u62a4\u7167","NumberID":"P668715","SeatNo":"06\u8f66\u53a202\u53f7\u4e0a\u94fa"},{"PassengerName":"ANA SOFIA ROCIO CRESPO NOBRE","IdentityType":"\u62a4\u7167","NumberID":"N751936","SeatNo":"06\u8f66\u53a204\u53f7\u4e0a\u94fa"}]}}]}}}}}'; $ctrip_backdata = json_decode($back_json); //print_r($ctrip_backdata); if(!empty($ctrip_backdata)){ $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 = ''; if($update_data->ServiceName == 'web.order.notifyTicket'){ $update_data->OrderStatus = '4'; $update_data->ErrorMsg = '出票成功'; $update_data->ordernumber = $ctrip_backdata->TrainOrderService->OrderInfo->OrderNumber; $update_data->OrderTotleFee = $ctrip_backdata->TrainOrderService->OrderInfo->OrderTotleFee; $update_data->ElectronicOrderNumber = $ctrip_backdata->TrainOrderService->OrderInfo->ElectronicOrderNumber; $update_data->bookcallback = $back_json; $update_data->OrderTicketTime = $ctrip_backdata->TrainOrderService->OrderInfo->TicketInfo->OrderTicketTime; //新添加检票口信息 if(isset($ctrip_backdata->TrainOrderService->OrderInfo->TicketInfoFinal->TicketCheck)){ if(!is_object($ctrip_backdata->TrainOrderService->OrderInfo->TicketInfoFinal->TicketCheck)){ $update_data->TicketCheck = $ctrip_backdata->TrainOrderService->OrderInfo->TicketInfoFinal->TicketCheck; } } $person_num = $ctrip_backdata->TrainOrderService->OrderInfo->TicketInfo->AuditTicketCount + $ctrip_backdata->TrainOrderService->OrderInfo->TicketInfo->ChildTicketCount; //存储座位信息 转换为英文 $coach_arr = array(); $seats_arr = array(); $seatsinfo_arr = array(); $find = array('车厢','号','上铺','中铺','下铺'); $replace = array('coach','',' upper',' middle',' lower'); $seatsinfo = str_replace($find,$replace,$ctrip_backdata->TrainOrderService->OrderInfo->TicketInfo->SeatNumber); $seatsinfo_arr = explode(',',$seatsinfo); foreach($seatsinfo_arr as $item){ $coach = mb_substr($item,0,strpos($item,'coach')); array_push($coach_arr,$coach); $seat = mb_substr($item,strpos($item,'coach')+5,mb_strlen($item,'UTF8')); array_push($seats_arr,$seat); } $update_data->seatsinfo = ''; if(count(array_unique($coach_arr)) == 1){ $onlycoach = array_unique($coach_arr); $update_data->seatsinfo .= 'Coach '.$onlycoach[0].',seat '; foreach ($seats_arr as $seat_items){ $update_data->seatsinfo .= $seat_items .','; } }else{ for($i=0;$iseatsinfo .= 'Coach '.$coach_arr[$i].',Seat '.$seats_arr[$i].','; }else{ if($coach_arr[$i] == $coach_arr[$i-1]){ $update_data->seatsinfo .= $seats_arr[$i].','; }else{ $update_data->seatsinfo .= 'Coach '.$coach_arr[$i].',Seat '.$seats_arr[$i].','; } } } } $update_data->seatsinfo = substr($update_data->seatsinfo,0,strlen($update_data->seatsinfo)-1); $data_passager = new stdClass(); if($person_num > 1){ //对订票乘客进行存储 $data_passager->status = '4'; $data_passager->ordernumber = $ctrip_backdata->TrainOrderService->OrderInfo->OrderNumber; if(is_array($ctrip_backdata->TrainOrderService->OrderInfo->TicketInfoFinal->Tickets->Ticket)){ foreach($ctrip_backdata->TrainOrderService->OrderInfo->TicketInfoFinal->Tickets->Ticket as $tickets_item){ if(is_array($tickets_item->DetailInfos->DetailInfo)){ foreach($tickets_item->DetailInfos->DetailInfo as $ticket_item2){ $data_passager->realname = $ticket_item2->PassengerName; $data_passager->identitytype = $ticket_item2->IdentityType; $data_passager->numberid = $ticket_item2->NumberID; $data_passager->ticketype = $tickets_item->TicketType; $data_passager->ticketprice = $tickets_item->OrderTicketPrice; $data_passager->seatype = $tickets_item->OrderTicketSeat; $data_passager->seatdetail = $ticket_item2->SeatNo; $this->train_system_model->add_passagers($data_passager); } }else{ $data_passager->realname = $tickets_item->DetailInfos->DetailInfo->PassengerName; $data_passager->identitytype = $tickets_item->DetailInfos->DetailInfo->IdentityType; $data_passager->numberid = $tickets_item->DetailInfos->DetailInfo->NumberID; $data_passager->ticketype = $tickets_item->TicketType; $data_passager->ticketprice = $tickets_item->OrderTicketPrice; $data_passager->seatype = $tickets_item->OrderTicketSeat; $data_passager->seatdetail = $tickets_item->DetailInfos->DetailInfo->SeatNo; $this->train_system_model->add_passagers($data_passager); } } }else{ foreach($ctrip_backdata->TrainOrderService->OrderInfo->TicketInfoFinal->Tickets->Ticket->DetailInfos->DetailInfo as $items){ //对订票乘客进行存储 $data_passager->status = '4'; $data_passager->ordernumber = $ctrip_backdata->TrainOrderService->OrderInfo->OrderNumber; $data_passager->realname = $items->PassengerName; $data_passager->identitytype = $items->IdentityType; $data_passager->numberid = $items->NumberID; $data_passager->ticketype = $ctrip_backdata->TrainOrderService->OrderInfo->TicketInfoFinal->Tickets->Ticket->TicketType; $data_passager->ticketprice = $ctrip_backdata->TrainOrderService->OrderInfo->TicketInfoFinal->Tickets->Ticket->OrderTicketPrice; $data_passager->seatype = $ctrip_backdata->TrainOrderService->OrderInfo->TicketInfoFinal->Tickets->Ticket->OrderTicketSeat; $data_passager->seatdetail = $items->SeatNo; $this->train_system_model->add_passagers($data_passager); } } }else{ //对订票乘客进行存储 $data_passager->status = '4'; $data_passager->ordernumber = $ctrip_backdata->TrainOrderService->OrderInfo->OrderNumber; $data_passager->realname = $ctrip_backdata->TrainOrderService->OrderInfo->TicketInfoFinal->Tickets->Ticket->DetailInfos->DetailInfo->PassengerName; $data_passager->identitytype = $ctrip_backdata->TrainOrderService->OrderInfo->TicketInfoFinal->Tickets->Ticket->DetailInfos->DetailInfo->IdentityType; $data_passager->numberid = $ctrip_backdata->TrainOrderService->OrderInfo->TicketInfoFinal->Tickets->Ticket->DetailInfos->DetailInfo->NumberID; $data_passager->ticketype = $ctrip_backdata->TrainOrderService->OrderInfo->TicketInfoFinal->Tickets->Ticket->TicketType; $data_passager->ticketprice = $ctrip_backdata->TrainOrderService->OrderInfo->TicketInfoFinal->Tickets->Ticket->OrderTicketPrice; $data_passager->seatype = $ctrip_backdata->TrainOrderService->OrderInfo->TicketInfoFinal->Tickets->Ticket->OrderTicketSeat; $data_passager->seatdetail = $ctrip_backdata->TrainOrderService->OrderInfo->TicketInfoFinal->Tickets->Ticket->DetailInfos->DetailInfo->SeatNo; $this->train_system_model->add_passagers($data_passager); } /****************************************************************************************/ //添加支付记录 $add_train_payment_data = new stdClass(); $add_train_payment_data->TOC_Memo = $update_data->ordernumber; //根据订单号获取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 = $ctrip_backdata->TrainOrderService->OrderInfo->TicketInfo->OrderTicketCheci; $add_train_payment_data->TOC_DepartureDate = date('Y-m-d',strtotime($ctrip_backdata->TrainOrderService->OrderInfo->TicketInfo->OrderTicketYMD)); $add_train_payment_data->TOC_TicketCost = $update_data->OrderTotleFee; $add_train_payment_data->poundage = ($person_num*5)."";//手续费,每人五块,转换成字符串 $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); }else if($update_data->ServiceName == 'web.order.notifyNoTicket'){ $update_data->ordernumber = $ctrip_backdata->TrainOrderService->OrderInfo->OrderNumber; $update_data->OrderStatus = '1'; $update_data->ErrorMsg = $ctrip_backdata->TrainOrderService->OrderInfo->NoTicketReasons; $update_data->confirmcallback = $back_json; }else if($update_data->ServiceName == 'web.order.returnTicketNotice'){ $update_data->ordernumber = $ctrip_backdata->TrainOrderService->OrderNumber; $update_data->OrderStatus = '7'; $update_data->ErrorMsg = $ctrip_backdata->TrainOrderService->refundTicket->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->refundTicket->realName; $passpager_info->numberid = $ctrip_backdata->TrainOrderService->refundTicket->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; } //更新订单信息(出票系统) $this->train_system_model->update_orders($update_data); } } }