You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
information-system/application/third_party/trainsystem/controllers/callback.php

407 lines
22 KiB
PHP

<?php
if (!defined('BASEPATH'))
exit('No direct script access allowed');
class callback extends CI_Controller{
public function __construct(){
parent::__construct();
$this->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\":\"\u897f\u5b89\u5317\",\"from_station_code\":\"EAY\",\"to_station_name\":\"\u6210\u90fd\u4e1c\",\"to_station_code\":\"ICW\",\"train_date\":\"2019-08-28\",\"orderid\":\"JH156560045168263\",\"user_orderid\":\"488142637\",\"orderamount\":\"526.00\",\"ordernumber\":\"EF88544299\",\"checi\":\"D1905\",\"msg\":\"\u51fa\u7968\u6210\u529f\",\"status\":\"4\",\"passengers\":[{\"passengerid\":1,\"passengersename\":\"SAIES ALLEN\",\"piaotype\":\"1\",\"piaotypename\":\"\u6210\u4eba\u7968\",\"passporttypeseid\":\"B\",\"passporttypeseidname\":\"\u62a4\u7167\",\"passportseno\":\"LT192822\",\"price\":\"263.0\",\"zwcode\":\"O\",\"zwname\":\"\u4e8c\u7b49\u5ea7\",\"ticket_no\":\"EF88544299108007A\",\"cxin\":\"08\u8f66\u53a2,07A\u5ea7\",\"reason\":0},{\"passengerid\":2,\"passengersename\":\"WOODCROFT\",\"piaotype\":\"1\",\"piaotypename\":\"\u6210\u4eba\u7968\",\"passporttypeseid\":\"B\",\"passporttypeseidname\":\"\u62a4\u7167\",\"passportseno\":\"516130469\",\"price\":\"263.0\",\"zwcode\":\"O\",\"zwname\":\"\u4e8c\u7b49\u5ea7\",\"ticket_no\":\"EF88544299102008F\",\"cxin\":\"02\u8f66\u53a2,08F\u5ea7\",\"reason\":0}],\"refund_money\":null,\"sign\":\"4c4a581e1f5205254e22e6ca1dde59bb\"}"}';
$data_post["data"] = json_decode($test_post)->data;*/
log_message('error','聚合回调:'.json_encode($data_post));
$data = json_decode($data_post["data"]);
//print_r($data);die();
$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;
$update_data->OrderTicketTime = '';
//如果返回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;$i<count($coach);$i++){
if($i == 0){
$string .= 'Coach '.$coach[$i].',Seat '.$seats[$i].',';
}else{
if($coach[$i] == $coach[$i-1]){
$string .= $seats[$i].',';
}else{
$string .= 'Coach '.$coach[$i].',Seat '.$seats[$i].',';
}
}
}
}
$update_data->seatsinfo = 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;
$add_train_order_data->TOC_VEI_SN = 30427;
$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,'30427');
//查询子订单状态,如果为41标记过问题订单的就把状态置位42,反之不操作
$coldState = $this->BIZ_train_model->getColdState($data->user_orderid);
if($coldState->COLD_State == 41){
$this->BIZ_train_model->updateColdState($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;//退票不用更新取票号,以此在模型里面判断是否为退票消息
$add_train_order_data->TOC_VEI_SN = 30427;
$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-11-13 10:31:00","ServiceName":"web.order.rescheduleResult","MessageIdentity":"31C01C2EC57C9B1D45C0727918B493AE","PartnerName":"tieyou"},"TrainOrderService":{"OrderInfo":{"OrderNumber":"guilintravel1573543590265","contactName":{},"contactMobile":{},"RescheduleTicketInfo":{"SubOrderId":"0","EOrderNumber":"EG59266341","ResFromStation":"\u6842\u6797","ResToStation":"\u6842\u6797\u5317","ResDepartTime":"2019-12-03 13:50:00","ResArriveTime":"2019-12-03 14:01:00","ResTrainNumber":"D2986","RescheduleTickets":{"RescheduleTicket":{"childBillId":{},"ResCarriageNo":"08","ResSeatNumber":"13F\u53f7","ResSeatName":"\u4e8c\u7b49\u5ea7","ResRealTicketPrice":"5.5","RescheduleLongTrainNum":"EG59266341208013F","eOrderType":"1","passport":"450302199208131039","passportName":"\u9648\u5b87\u8d85","realName":"\u9648\u5b87\u8d85","status":"1","ResFailReasons":{}}}}}}}';
$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 = mb_substr($seatsinfo,0,mb_strlen($seatsinfo,'UTF8')-1);
$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;$i<count($coach_arr);$i++){
if($i == 0){
$update_data->seatsinfo .= '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;
$data_passager->longtrainno = $ticket_item2->LongTrainNo;
$data_passager->TOC_VEI_SN = 28209;
$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;
$data_passager->longtrainno = $tickets_item->DetailInfos->DetailInfo->LongTrainNo;
$data_passager->TOC_VEI_SN = 28209;
$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;
$data_passager->longtrainno = $items->LongTrainNo;
$data_passager->TOC_VEI_SN = 28209;
$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;
$data_passager->longtrainno = $ctrip_backdata->TrainOrderService->OrderInfo->TicketInfoFinal->Tickets->Ticket->DetailInfos->DetailInfo->LongTrainNo;
$data_passager->TOC_VEI_SN = 28209;
$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,'28209');
}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);
}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);
}
}
}