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.
320 lines
17 KiB
PHTML
320 lines
17 KiB
PHTML
6 years ago
|
<?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\":\"\u6b66\u6c49\",\"from_station_code\":\"WHN\",\"to_station_name\":\"\u897f\u5b89\u5317\",\"to_station_code\":\"EAY\",\"train_date\":\"2019-04-13\",\"orderid\":\"JH155317715892154\",\"user_orderid\":\"488123754\",\"orderamount\":\"1363.50\",\"ordernumber\":\"E946949845\",\"checi\":\"G856\",\"msg\":\"\u51fa\u7968\u6210\u529f\",\"status\":\"4\",\"passengers\":[{\"passengerid\":1,\"passengersename\":\"VENOSLEONARDA\",\"piaotype\":\"1\",\"piaotypename\":\"\u6210\u4eba\u7968\",\"passporttypeseid\":\"B\",\"passporttypeseidname\":\"\u62a4\u7167\",\"passportseno\":\"086925694\",\"price\":\"454.5\",\"zwcode\":\"O\",\"zwname\":\"\u4e8c\u7b49\u5ea7\",\"ticket_no\":\"E946949845102006A\",\"cxin\":\"02\u8f66\u53a2,06A\u5ea7\",\"reason\":0},{\"passengerid\":2,\"passengersename\":\"WAGENSTALLERSANDRA\",\"piaotype\":\"1\",\"piaotypename\":\"\u6210\u4eba\u7968\",\"passporttypeseid\":\"B\",\"passporttypeseidname\":\"\u62a4\u7167\",\"passportseno\":\"CF7NR17M7\",\"price\":\"454.5\",\"zwcode\":\"O\",\"zwname\":\"\u4e8c\u7b49\u5ea7\",\"ticket_no\":\"E946949845102006B\",\"cxin\":\"02\u8f66\u53a2,06B\u5ea7\",\"reason\":0},{\"passengerid\":3,\"passengersename\":\"WALDMANNSOPHIE\",\"piaotype\":\"1\",\"piaotypename\":\"\u6210\u4eba\u7968\",\"passporttypeseid\":\"B\",\"passporttypeseidname\":\"\u62a4\u7167\",\"passportseno\":\"CF26Y6FVK\",\"price\":\"454.5\",\"zwcode\":\"O\",\"zwname\":\"\u4e8c\u7b49\u5ea7\",\"ticket_no\":\"E946949845102006C\",\"cxin\":\"02\u8f66\u53a2,06C\u5ea7\",\"reason\":0}],\"refund_money\":null,\"sign\":\"f74013fa24115eeb9a807aa237054920\"}"}';
|
||
|
|
||
|
$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->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].',';
|
||
|
}else{
|
||
|
foreach (array_unique($coach) as $item_coach){
|
||
|
$string .= 'Coach '.$item_coach.',';
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$string .= 'Seat ';
|
||
|
foreach($seats as $item_seat){
|
||
|
$string .= $item_seat.',';
|
||
|
}
|
||
|
|
||
|
$seatinfo = substr($string,0,strlen($string)-1);
|
||
|
$update_data->seatsinfo = $seatinfo;
|
||
|
|
||
|
$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->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=="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;
|
||
|
print_r($passpager_info);
|
||
|
$this->train_system_model->update_passpager_info($passpager_info);
|
||
|
|
||
|
//添加退款记录
|
||
|
$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 = '{"Authentication":{"ServiceName":"web.order.returnTicketNotice","PartnerName":"tieyou","TimeStamp":"2019-1-18 11:35:22","MessageIdentity":"93F2BA3253829E8FAD29B5DEB7646A59"},"TrainOrderService":{"contactName":{},"contactMobile":{},"OrderNumber":"guilintravel1547778269","refundTicket":{"childBillId":{},"orderId":"8360041214","eOrderNumber":"EB59937931","eOrderType":"1","seatNumber":"01D\u53f7","passport":"544712454","passportName":"YANGFRANCISCHENG","realName":"YANGFRANCISCHENG","status":"1","reason":"\u9000\u7968\u6210\u529f\uff0c\u9000\u6b3e\u91d1\u989d:218.50\u5143"}}}';*/
|
||
|
$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 = '';
|
||
|
|
||
|
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;
|
||
|
|
||
|
//新添加检票口信息
|
||
|
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->TicketInfoFinal->Tickets->Ticket->TicketCount;
|
||
|
|
||
|
//存储座位信息 转换为英文
|
||
|
$coach_arr = array();
|
||
|
$seats_arr = array();
|
||
|
$data_passager = new stdClass();
|
||
|
$string = '';
|
||
|
$i = 0;
|
||
|
if($person_num > 1){
|
||
|
foreach ($ctrip_backdata->TrainOrderService->OrderInfo->TicketInfoFinal->Tickets->Ticket->DetailInfos->DetailInfo as $items){
|
||
|
if(strpos($items->SeatNo,'车厢')){
|
||
|
$coach = mb_substr($items->SeatNo,0,strpos($items->SeatNo,'车厢'));
|
||
|
array_push($coach_arr,$coach);
|
||
|
$seat = mb_substr($items->SeatNo,strpos($items->SeatNo,'车厢')+2,mb_strlen($items->SeatNo,'UTF8'));
|
||
|
$find = array('号');
|
||
|
$replace = array('');
|
||
|
$seat = str_replace($find,$replace,$seat);
|
||
|
array_push($seats_arr,$seat);
|
||
|
}
|
||
|
|
||
|
//对订票乘客进行存储
|
||
|
$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);
|
||
|
$i++;
|
||
|
}
|
||
|
|
||
|
}else{
|
||
|
$seatinfo_html = $ctrip_backdata->TrainOrderService->OrderInfo->TicketInfoFinal->Tickets->Ticket->DetailInfos->DetailInfo->SeatNo;
|
||
|
if(strpos($seatinfo_html,'车厢')){
|
||
|
$coach = mb_substr($seatinfo_html,0,strpos($seatinfo_html,'车厢'));
|
||
|
array_push($coach_arr,$coach);
|
||
|
$seat = mb_substr($seatinfo_html,strpos($seatinfo_html,'车厢')+2,mb_strlen($seatinfo_html,'UTF8'));
|
||
|
$find = array('号');
|
||
|
$replace = array('');
|
||
|
$seat = str_replace($find,$replace,$seat);
|
||
|
array_push($seats_arr,$seat);
|
||
|
}
|
||
|
|
||
|
//对订票乘客进行存储
|
||
|
$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);
|
||
|
}
|
||
|
|
||
|
if(count(array_unique($coach_arr)) == 1){
|
||
|
$onlycoach = array_unique($coach_arr);
|
||
|
$update_data->seatsinfo .= 'Coach '.$onlycoach[0].',';
|
||
|
}else{
|
||
|
foreach (array_unique($coach_arr) as $item_coach){
|
||
|
$update_data->seatsinfo .= 'Coach '.$item_coach.',';
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$update_data->seatsinfo .= 'Seat ';
|
||
|
foreach($seats_arr as $item_seat){
|
||
|
$update_data->seatsinfo .= $item_seat.',';
|
||
|
}
|
||
|
|
||
|
$update_data->seatsinfo = substr($update_data->seatsinfo,0,strlen($update_data->seatsinfo)-1);
|
||
|
|
||
|
$update_data->bookcallback = $back_json;
|
||
|
|
||
|
//添加支付记录
|
||
|
$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);
|
||
|
}
|
||
|
}
|
||
|
}
|