澜海火车票功能完成并测试完成。但还是测试接口。

master
赵鹏 11 months ago
parent d2ee307924
commit a6aabc22ab

@ -60,6 +60,10 @@ define("JUHE_TRAIN_EXPORT_API","http://op.juhe.cn/trainTickets/exportAccountChan
//http://op.juhe.cn/trainTickets/exportAccountChange?key=79f03107b921ef31310bd40a1415c1cb&since=2016-10-01 00:00&before=2016-10-30 00:00
//澜海接口(测试)
define("LANHAI_appId","3649601564");
define("LANHAI_KEY","999c1DtJJ4pEbcxeEqJBKw==");
define("LANHAI_URL","http://ctriptest.lhticket.com/");
//订单状态说明
$config["train_order_status_msg"]=array(

@ -396,6 +396,9 @@ class addorders extends CI_Controller{
case 'ctrip':
$this->ctripModel($data,$selectseat,$cold_sn);
break;
case 'lanhai':
$this->lanhaiModel($data,$selectseat,$cold_sn,$bpe_sn); //澜海多传用户SN列表
break;
}
}
@ -687,8 +690,8 @@ class addorders extends CI_Controller{
$reback["order"] = $orderId;
$reback["mes"] = "订单提交成功,等待回调";
}else{
$reback["mes"] = $confirm_back_json;
$add_data->status = "e";
// $reback["mes"] = $confirm_back_json;
// $add_data->status = "e";
}
//本地订单入库
@ -837,6 +840,7 @@ class addorders extends CI_Controller{
$i++;
}
//乘客人信息
$PostData->trainOrderInfo->orderInfo->ticketList['0']->passengerList = $passagersdata;
$PostData->trainOrderInfo->orderInfo->frontSeatFlag = 0;
@ -998,6 +1002,97 @@ class addorders extends CI_Controller{
//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":[]}}
}
//澜海请求出票
function lanhaiModel($data,$selectseat,$cold_sn,$bpe_sn){
$microtime = get_microtime();
$OrderNumber = SHUNTU_ORDERUSER.$microtime; //自生成订单号
//生成接口请求头参数
$mainOrderId = $OrderNumber;
$timestamp = $microtime;
$appId = LANHAI_appId;
$url = LANHAI_URL."api/open/push/order";
//拼接发送的报文
$PostData = new stdClass();
$PostData->mainOrderId = $mainOrderId;
$PostData->timestamp = $timestamp;
$PostData->appId = $appId;
//本地添加记录
$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 = 'lanhai';
$add_data->isauto = $this->isauto;
//出票次数
$countAuto = $this->train_system_model->get_autotimes($cold_sn);
$add_data->ts_autotimes = $countAuto->countauto + 1; //出票次数+1
//澜海数据
$lanhaiData = new stdClass();
$lanhaiData->selectseat = $selectseat;
$lanhaiData->bpe_sn = $bpe_sn;
$add_data->lanhaiData = json_encode($lanhaiData,JSON_UNESCAPED_UNICODE);
//存储到数据库
$this->train_system_model->add_orders($add_data);
//print_r(json_encode($PostData));
//die();
$ResponseJson = GetPost_http($url,json_encode($PostData,JSON_UNESCAPED_UNICODE),'json');
$ResponseData = json_decode($ResponseJson);
// print_r($ResponseJson);
// die();
//预定请求成功后执行支付
if($ResponseData->code == 0 && $ResponseData->success){
$reback["status"] = 1;
$reback["order"] = $OrderNumber;
$reback["mes"] = "订单提交成功,请等待澜海出票。在出票信息返回之前,千万不要改动汉特里面的订单数据,以免照成出票数据和订单数据不一致!!!!!".$ResponseData->msg ;
}else{
$reback["status"] = 0;
$reback["order"] = $OrderNumber;
$reback["mes"] = "订单提交失败,".$ResponseData->msg."。订单发送数据:".json_encode($PostData) ;
$add_data->status = "e";
//更新订单
$msgData = new stdClass();
$msgData->bookcallback = $ResponseJson;
$msgData->OrderStatus = "1";
if (isset($ResponseData->returnMessage)){
$msg = $ResponseData->returnMessage;
}else{
$msg = "没有错误信息!";
}
$msgData->ErrorMsg = $msg;
$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);
}
}

@ -304,6 +304,7 @@ class callback extends CI_Controller{
}
$data_passager->seatdetail = $SeatNo;
$data_passager->longtrainno = $tItems->longElecNo;
$data_passager->lanhaiData = ""; //对应澜海那边的数据,这边设置为空
//入库
$this->train_system_model->add_passagers($data_passager);

@ -0,0 +1,690 @@
<?php
use League\CLImate\TerminalObject\Basic\Json;
defined('BASEPATH') or exit('No direct script access allowed');
class LanHaiTicket extends CI_Controller
{
public function __construct()
{
parent::__construct();
$this->load->model("BIZ_train_model");
$this->load->model("train_system_model");
$this->load->helper('train');
$this->db_train_zw = $this->config->item('db_train_zw');
$this->train_zw = $this->config->item('train_zw');
$this->black_list = $this->config->item('black_list');
$this->load->library("lanhaidata");
$this->train_certificateType = $this->config->item('train_certificateType');
$this->train_refundType = $this->config->item('train_refundType');
}
public function index()
{
}
/**
* @description: 澜海获取锁单接口通过get方式获取参数mainOrderId订单号
* @return {*}
* @Date Changed:
* 网前地址https://www.mycht.cn/info.php/apps/trainsystem/lanhaiticket/pushorderdetail?mainOrderId=HN1720670129499
*/
public function pushOrderDetail()
{
//获取订单号
$mainOrderId = $this->input->get_post("mainOrderId");
$aes = $this->input->get_post("aes");
if (strpos($mainOrderId, 'HN') !== false) { //由于我们的订单号是HN开头的所以这里做下判断
//根据mainOrderId获取火车票的信息
$ticketfrom = $this->train_system_model->ticketfrom($mainOrderId);
if (!empty($ticketfrom)) {
$cold_sn = $ticketfrom->ts_cold_sn;
$lanhaiRecord = json_decode($ticketfrom->ts_lanhaiData); //澜海特殊数据字段保存了选择的出票人员Id
$data['train'] = $this->BIZ_train_model->biz_order_detail($cold_sn);
$coli_id = $this->BIZ_train_model->cold_sn_get_coli_id($cold_sn)['0']->COLI_ID;
if (empty($this->BIZ_train_model->get_operatorInfo($coli_id))) {
$data['email'] = 'vivi@hainatravel.com';
} else {
$data['email'] = $this->BIZ_train_model->get_operatorInfo($coli_id)['0']->OPI_Email;
}
//乘客信息
$bpe_sn = '';
if (!empty($lanhaiRecord)) {
$bpe_sn = $lanhaiRecord->bpe_sn;
}
if (!empty($bpe_sn)) {
$data['people_list'] = $this->BIZ_train_model->in_bpesn_people_info($bpe_sn);
} else {
//没有找到选择的人员列表,就查询整个订单的人员列表
$people_arr = $this->BIZ_train_model->biz_people($cold_sn);
//护照号如果在黑名单的就不自动出票
foreach ($people_arr as $people_info) {
$bpe_sn .= $people_info->BPE_SN . ',';
}
$bpe_sn = substr($bpe_sn, 0, strlen($bpe_sn) - 1);
$data['people_list'] = $this->BIZ_train_model->in_bpesn_people_info($bpe_sn);
}
$AdultNum = 0;
$ChildNum = 0;
$i = 0;
$lanhaiData = new lanhaiData();
$lanhaiCountryData = json_decode($lanhaiData->CountryData); //国家三字码基础信息
$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]->passengerName = chk_sp_name($PassagerInfo->BPE_FirstName . $PassagerInfo->BPE_MiddleName . $PassagerInfo->BPE_LastName);
$passagersdata[$i]->passengerType = $PiaoType; //乘客类型1 成人票2 儿童票
$passagersdata[$i]->passportType = $PassportTypeseId; //证件类型,身份证 1护照 2回乡证 7台胞证 8外国人永久居留身份证 9港澳通行证 10台湾通行证 22港澳台居民居住证 23
$passagersdata[$i]->passportNumber = $PassagerInfo->BPE_Passport; //护照号
$passagersdata[$i]->passengerId = $PassagerInfo->BPE_SN; //乘客ID
$regionCode = "";
$countryName = "";
if (!empty($PassagerInfo->BPE_Nationality)) {
$htCode = $PassagerInfo->BPE_Nationality;
if ($htCode == "TW" || $htCode == "HK" || $htCode == "MO") {
$regionCode = "CHN";
$countryName = "中国";
} else {
foreach ($lanhaiCountryData as $cItem) {
if ($cItem->code == $htCode) {
$regionCode = $cItem->standCode;
$countryName = $cItem->name;
break;
}
}
}
}
$passagersdata[$i]->regionCode = $regionCode; //国家简码 美国USA ,中国CHN
$passagersdata[$i]->countryName = $countryName; //国家名称 中文名称
$passagersdata[$i]->passportExpireDate = date('Y-m-d', strtotime($PassagerInfo->BPE_PassExpdate)); //证件到期
$passagersdata[$i]->birthday = date('Y-m-d', strtotime($PassagerInfo->BPE_BirthDate)); //出生日期
$i++;
}
//拼接发送的报文
$PostData = new stdClass();
$PostData->mainOrderId = $mainOrderId;
$currentTime = date("Y-m-d H:i:s");
$PostData->expireTime = date("Y-m-d H:i:s", strtotime($currentTime . ' +8 minutes'));
$PostData->currentTime = $currentTime;
$PostData->agentCode = LANHAI_appId;
$PostData->contactMobile = "18877331805";
$PostData->extendParams = "";
$PostData->ticketsItems = array();
$PostData->ticketsItems['0'] = new stdClass();
$PostData->ticketsItems['0']->deliveryTicketId = $cold_sn; //行程id,cold_sn
$PostData->ticketsItems['0']->fromStationName = $data['train']->DepartAirport_cn;
$PostData->ticketsItems['0']->toStationName = $data['train']->ArrivalAirport_cn;
$PostData->ticketsItems['0']->trainNumber = $data['train']->FlightsNo; //车次
$PostData->ticketsItems['0']->departTime = date('Y-m-d H:i', strtotime($data['train']->DepartureTime)); //发车时间
$PostData->ticketsItems['0']->arrivalTime = date('Y-m-d H:i', strtotime($data['train']->ArrivalTime)); //到达时间
$PostData->ticketsItems['0']->ticketCount = count($data["people_list"]);
$PostData->ticketsItems['0']->ticketPrice = $data['train']->adultcost; //车票单价,单位(元)
$seatName = $this->train_zw[$this->db_train_zw[$data['train']->Aircraft]]; //座位名称,中文
$PostData->ticketsItems['0']->seatName = $seatName;
$PostData->ticketsItems['0']->acceptSeats = array(); //坐席选项
$lanhaiSeatTypes = json_decode($lanhaiData->seatTypes); //座位选项
foreach ($lanhaiSeatTypes as $seatItem) {
if ($seatItem->seatName == $seatName) {
$PostData->ticketsItems['0']->acceptSeats = $seatItem->seatItems;
break;
}
}
$acceptSeatRemark = "优先出【同排ABCDF座】无法满足可出任意座位不接受站票";
if (($AdultNum + $ChildNum) > 1) {
//多人时
if (strstr($seatName, "卧")) {
$acceptSeatRemark = "客人想要2张下铺最好在同一房间。下铺不足时至少保证在同一房间否则不要出票";
}
} else {
//单人时
}
$PostData->ticketsItems['0']->acceptSeatRemark = $acceptSeatRemark; //行程坐席要求
$PostData->ticketsItems['0']->ticketType = 1;
$PostData->ticketsItems['0']->passengerInfos = $passagersdata;
$total_price = $AdultNum * $data['train']->adultcost + $ChildNum * $data['train']->childcost; //总价
$PostData->orderPrice = $total_price; //订单总价,单位(元)
//加密方式显示
$this->load->library("aesLanhai");
$aesUnit = new Security();
$resultData = $aesUnit->encryptData(json_encode($PostData));
//$resultData = $aesUnit->decryptData($resultData); //测试加解密是否正常。
if ($aes == "false") {
//加个明文显示判断,用来检查数据
$resultData = json_encode($PostData, JSON_UNESCAPED_UNICODE);
}
echo $resultData;
} else {
$ResultNoticeResponse = new stdClass();
$ResultNoticeResponse->returnCode = -1;
$ResultNoticeResponse->success = false;
$ResultNoticeResponse->returnMsg = "mainOrderId错误";
echo json_encode($ResultNoticeResponse);
}
}
}
/**
* 出票结果回调信息
* 网前URLhttps://www.mycht.cn/info.php/apps/trainsystem/lanhaiticket/pushorderresult/
*/
public function pushOrderResult()
{
$back_json = file_get_contents('php://input');
log_message('error', '澜海出票回调信息:' . $back_json);
$lanhai_backdata = json_decode($back_json);
if (!empty($lanhai_backdata)) {
//判断回调信息是否正确,主要判断是否是本企业的回调信息
$companyId = LANHAI_appId;
$messageIdentity = $lanhai_backdata->authentication->appId; //传递的企业ID
$ResultNoticeResponse = new stdClass();
if ($companyId == $messageIdentity) {
$ResultNoticeResponse->retCode = 0;
$ResultNoticeResponse->success = true;
$ResultNoticeResponse->message = "处理成功!";
} else {
$ResultNoticeResponse->returnCode = -1;
$ResultNoticeResponse->success = false;
$ResultNoticeResponse->returnMsg = "appId错误";
}
echo json_encode($ResultNoticeResponse);
//处理回调的内容,保存到本地及翰特
$update_data = new stdClass();
$update_data->ServiceName = "lanhai.ticketresult";
$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 (!empty($lanhai_backdata->bodyInfo)) {
// //需要解密
$this->load->library("aesLanhai");
$aesUnit = new Security();
$bodyINfo = json_decode($aesUnit->decryptData($lanhai_backdata->bodyInfo));
if ($bodyINfo->failCode == 0) {
$update_data->OrderStatus = '4';
if (isset($bodyINfo->resultMsg)) {
$update_data->ErrorMsg = $bodyINfo->resultMsg;
} else {
$update_data->ErrorMsg = '出票成功';
}
} else {
$update_data->OrderStatus = '5';
if (isset($bodyINfo->resultMsg)) {
$update_data->ErrorMsg = $bodyINfo->resultMsg;
} else {
$update_data->ErrorMsg = '出票失败';
}
}
$update_data->ordernumber = $lanhai_backdata->authentication->mainOrderId;
if (isset($bodyINfo->orderPrice)) {
$update_data->OrderTotleFee = $bodyINfo->orderPrice; //总价
}
if (isset($bodyINfo->payTradeNumber)) {
$update_data->operateTradeNo = $bodyINfo->payTradeNumber; ////支付宝流水
}
$update_data->ticketresultcallback = json_encode($bodyINfo);
//$update_data->OrderTicketTime = $lanhai_backdata->TrainOrderService->OrderInfo->TicketInfo->OrderTicketTime;
//新接口数据,不一定保存到数据库里面,原订单已有,做个记录
if (isset($bodyINfo->ticketSuccessTime)) {
$update_data->ticketSuccTime = $bodyINfo->ticketSuccessTime; //出票成功时间
}
// $update_data->orderType = $lanhai_backdata->ticketResult->orderMasterInfo->orderType; //订单类型 0电子票 1配送票 2人工客票 3抢票订单
// $update_data->contactName = $lanhai_backdata->ticketResult->orderMasterInfo->contactName; //联系人
// $update_data->mobileNo = des_decrypt($lanhai_backdata->ticketResult->orderMasterInfo->mobileNo,$key); //联系电话 (DES加密
//人员及车票
if (isset($bodyINfo->eOrderNumber)) {
$elecNo = $bodyINfo->eOrderNumber; //电子订单号即12306取票号
$update_data->ElectronicOrderNumber = $elecNo;
}
if (isset($bodyINfo->ticketList)) { //如果订票成功,需要保存的数据
$data_passager = new stdClass();
foreach ($bodyINfo->ticketList as $tItems) {
if (isset($tItems->ticketCheck)) {
$checkWindow = $tItems->ticketCheck; //检票口
$update_data->TicketCheck = $checkWindow;
}
$update_data->trainNo = $tItems->trainNumber; //车次
$update_data->departTime = $tItems->departTime; //车次出发时间
foreach ($tItems->passengerList as $pItems) {
$data_passager->ordernumber = $update_data->ordernumber;
//人员列表
$data_passager->status = '4';
$certificateType = $this->train_certificateType[$pItems->passportType]; //证件类型,身份证 1护照 2回乡证 7台胞证 8外国人永久居留身份证 9港澳通行证 10台湾通行证 22港澳台居民居住证 23
$data_passager->identitytype = $certificateType;
$data_passager->realname = $pItems->passengerName;
$data_passager->numberid = $pItems->passportNumber; //证件号码
//$data_passager->birthday = $pItems->birthday;
if ($pItems->passengerType == 2) {
$passengerType = "儿童";
} else {
$passengerType = "成人";
}
$data_passager->ticketype = $passengerType; //乘客类型 1成人 2儿童
$data_passager->seatype = $pItems->seatName; //坐席类型
$data_passager->ticketprice = $pItems->realTicketPrice; //实际单价(元)
$SeatNo = "";
if (isset($pItems->carriageNo)) {
$SeatNo .= $pItems->carriageNo . "车厢";
}
if (isset($pItems->seatNo)) {
$SeatNo .= $pItems->seatNo; ////坐席号
}
$data_passager->seatdetail = $SeatNo;
$passengerId = $pItems->passengerId; // //乘客id
$data_passager->longtrainno = $passengerId;
$jsonLanhaiData = new stdClass(); //澜海退票需要传递一些数据,尽量保存到这个里面。这样不用从翰特里面读取了。
$jsonLanhaiData->eOrderNumber = $update_data->ElectronicOrderNumber; //取票号
$data_passager->lanhaiData = json_encode($jsonLanhaiData);
//入库
$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');
}
}
}
//更新订单信息(出票系统)
$this->train_system_model->update_orders($update_data);
}
}
/**
* 澜海退票锁单接口通过get方式获取前参数dataId
* 网前地址https://www.mycht.cn/info.php/apps/trainsystem/lanhaiticket/refundorderdetail?dataId=82033
*/
public function refundOrderDetail()
{
//获取客人ID
$dataId = $this->input->get_post("dataId");
$aes = $this->input->get_post("aes");
//根据客人ID获取退票数据
$passenger_data = $this->train_system_model->get_passenger_byId($dataId);
if (!empty($passenger_data)) {
//拼接发送的报文
$PostData = new stdClass();
$PostData->id = $passenger_data->tst_id; //dataId
$PostData->mainOrderId = $passenger_data->tst_ordernumber; //出票订单id如产生过线上改签成功则使用改签的dataId
$PostData->priority = 1; //0紧急退票1非紧急退票 默认1
//获取出票是保存的lanhaiData
if (!empty($passenger_data->tst_lanhaiData)){
$lanhaiData = json_decode($passenger_data->tst_lanhaiData);
}
$eOrderNumber = "";
if (isset($lanhaiData->eOrderNumber)){
$eOrderNumber = $lanhaiData->eOrderNumber; //取票号
}
$PostData->eOrderNumber = $eOrderNumber; //取票号
$PostData->passengerType = $passenger_data->tst_ticketype."票"; //票种
$PostData->passportType = $passenger_data->tst_identitytype; //"身份证"; //证件类型
$PostData->passportName = $passenger_data->tst_realname; //姓名
$PostData->passportNumber = $passenger_data->tst_numberid; //证件号
$PostData->departStation = $passenger_data->ts_fromstationame; //发站
$PostData->arriveStation = $passenger_data->ts_tostationame; //到站
$rPrice = $passenger_data->tst_ticketprice;
$PostData->ticketPrice = $rPrice; //票价(元)
$PostData->preRefundPrice = $rPrice; //原票价(元)
$PostData->percent = 100; //比例 默认100,我只取返回记录的价格。不管汉特的价格
$PostData->trainNo = $passenger_data->ts_checi ; //车次
//车厢及座位分解
$tst_seatdetail = $passenger_data->tst_seatdetail;
$carriageNo = "";
$seatNo = "";
if (strpos($tst_seatdetail,"车厢")!=false){
$arrSeat = explode("车厢",$tst_seatdetail);
$carriageNo = $arrSeat[0];
$seatNo = $arrSeat[1];
}
$PostData->carriageNo = $carriageNo; //车厢
$PostData->seatName = $passenger_data->tst_seatstype; //席别
$PostData->seatNo = $seatNo; //席位号
$strDt = $passenger_data->ts_startdate." ".$passenger_data->ts_startime;
$DepartureTime = date('Y-m-d H:i', strtotime($strDt));
// 出发时间前三十分钟的时间
$thirtyMinutesAgo = strtotime('-30 minutes', strtotime($DepartureTime));
$dealine = date('Y-m-d H:i', $thirtyMinutesAgo);
$PostData->ticketTime = $DepartureTime; //发车时间
$PostData->createTime = ""; //可空
$PostData->deadline = $dealine; //处理截止时间 建议最晚处理时间设置为发车前30分钟
$PostData->refundTime = ""; //可空
$PostData->getTicketTime = ""; //可空
$PostData->refundPrice = 0; //可空
$PostData->firstImage = null; //可空
$PostData->secondImage = null; //可空
$PostData->lockStatus = 0; //可空
$PostData->lockUser = ""; //可空
$PostData->status = 0; //可空
$PostData->longEOrderNumber = ""; //可空
$PostData->extendParams = ""; //拓展json对象
//加密方式显示
$this->load->library("aesLanhai");
$aesUnit = new Security();
$resultData = $aesUnit->encryptData(json_encode($PostData));
//$resultData = $aesUnit->decryptData($resultData); //测试加解密是否正常。
if ($aes == "false") {
//加个明文显示判断,用来检查数据
$resultData = json_encode($PostData, JSON_UNESCAPED_UNICODE);
}
echo $resultData;
} else {
$ResultNoticeResponse = new stdClass();
$ResultNoticeResponse->returnCode = -1;
$ResultNoticeResponse->success = false;
$ResultNoticeResponse->returnMsg = "dataId错误";
echo json_encode($ResultNoticeResponse);
}
}
/**
* 澜海退票返回信息
* 网前URLhttps://www.mycht.cn/info.php/apps/trainsystem/lanhaiticket/refundorderresult/
*/
public function refundOrderResult()
{
$back_json = file_get_contents('php://input');
log_message('error', '澜海退票回调信息:' . $back_json);
$lanhai_backdata = json_decode($back_json);
if (!empty($lanhai_backdata)) {
$dataId = $lanhai_backdata->id;
//根据客人ID获取退票数据
$passenger_data = $this->train_system_model->get_passenger_byId($dataId);
$ResultNoticeResponse = new stdClass();
if (!empty($passenger_data)) {
$ResultNoticeResponse->retCode = 0;
$ResultNoticeResponse->success = true;
$ResultNoticeResponse->message = "处理成功!";
echo json_encode($ResultNoticeResponse);
//处理回调的内容,保存到本地及翰特
$update_data = new stdClass();
$update_data->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 ="";
$update_data->ordernumber = $passenger_data->tst_ordernumber;
$passpager_info = new stdClass();
$passpager_info->returncallback = $back_json;
$passpager_info->ordernumber = $passenger_data->tst_ordernumber;
$passpager_info->tst_id = $dataId; //乘客ID用来更新
//回调的数据正确,开始判断成功还是失败。
if (isset($lanhai_backdata->refundPrice)){ //如果有退款金额,说明退票成功
//退票成功
$update_data->OrderStatus = '7';
//退票时还需要单独对对每个乘客存储回调信息
$passpager_info->status = '7';
$refundPrice = $lanhai_backdata->refundPrice; //退款金额
$update_data->ErrorMsg = "退票成功,"."退票金额:".$refundPrice;
//退票手续费保存到数据库
//翰特添加退款记录
$returnticket = new stdClass();
$return_order = $update_data->ordernumber;
$returnticket->TOC_VEI_SN = "28209";
//根据订单号获取cold_sn
$cold_sn = $passenger_data->ts_cold_sn;
$returnSuccTime = date("Y-m-d H:i:s");
$memo = $return_order.'_退票成功_' . $dataId; //退票集合信息 ,用$dataId是为了标识唯一性
$returnticket->TOC_Memo = $memo;
$returnticket->TOC_COLD_SN = $cold_sn;
$returnticket->TOC_TrainNumber = $passenger_data->ts_checi;
$returnticket->TOC_DepartureDate = $passenger_data->ts_startdate;
$returnticket->TOC_TicketCost = -15;
//print_r($add_train_payment_data);die();
$this->BIZ_train_model->returnticket_train($returnticket);
}else{
//退票失败
$update_data->OrderStatus = '8';
//失败也保存下信息
$passpager_info->status = '8';
$update_data->ErrorMsg = "退票失败:".$lanhai_backdata->failReason;
}
$this->train_system_model->return_update_passager_lanhai($passpager_info);
$update_data->returncallback = $back_json;
//更新订单信息(出票系统)
$this->train_system_model->update_orders($update_data);
} else {
$ResultNoticeResponse->returnCode = -1;
$ResultNoticeResponse->success = false;
$ResultNoticeResponse->returnMsg = "退票订单数据没找到!";
echo json_encode($ResultNoticeResponse);
}
}
}
/**
* 澜海退款回调信息
* 网前URLhttps://www.mycht.cn/info.php/apps/trainsystem/lanhaiticket/refundpriceresult/
*/
public function refundPriceResult(){
$back_json = file_get_contents('php://input');
log_message('error', '澜海退款回调信息:' . $back_json);
$lanhai_backdata = json_decode($back_json);
if (!empty($lanhai_backdata))
{
$id = $lanhai_backdata->id; //线上低改高后的订单为dataId其他情况为出票的mainOrderId
//先判断是否是低改高的订单,目前我们没有改签。
if (1==2){
//这里是改签的操作,目前没有
}else{
//这里的ID是mainOrderId 出票订单ID
$order_info = $this->train_system_model->get_order_info($id);
if (!empty($order_info)){
$ResultNoticeResponse = new stdClass();
$ResultNoticeResponse->retCode = 0;
$ResultNoticeResponse->success = true;
$ResultNoticeResponse->message = "处理成功!";
echo json_encode($ResultNoticeResponse); //找到订单 对应数据就返回处理成功的结果,后面的错误不关澜海那边的事。
//处理回调的内容,保存到本地及翰特
$update_data = new stdClass();
$update_data->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 ="";
$isOnline = $lanhai_backdata->isOnline; //1线上退款0线下退款
if ($isOnline==1){
$refundType = "线上退款";
}else{
$refundType = "线下退款";
}
$refundTime = date("Y-m-d H:i:s"); //退款时间
$return_money = $lanhai_backdata->refundPrice; //退款金额,单位元
$refundId = $lanhai_backdata->refundId; //退款唯一id(幂等性)
$update_data->ordernumber = $order_info->ts_ordernumber;
$update_data->OrderStatus = '11'; //11是订单退款
$update_data->ErrorMsg = '退款:'.$refundType." 金额:".$return_money." time:". $refundTime;
$update_data->refundcallback = $back_json;
//翰特添加退款记录
$refund_train_payment = new stdClass();
$return_order = $order_info->ts_ordernumber;
$refund_train_payment->TOC_VEI_SN = "28209";
$cold_sn = $order_info->ts_cold_sn;
//print_r($order_info);
$memo = $return_order.'_'.$refundType. '_' . $refundId; //退款集合信息
$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);
//更新订单信息(出票系统)
$this->train_system_model->update_orders($update_data);
}else{
$ResultNoticeResponse = new stdClass();
$ResultNoticeResponse->returnCode = -1;
$ResultNoticeResponse->success = false;
$ResultNoticeResponse->returnMsg = "订单对应数据没找到!";
echo json_encode($ResultNoticeResponse);
}
}
}
}
}
/* End of file lanhaiticket.php */

@ -80,6 +80,7 @@ class pages extends CI_Controller{
$page = $this->input->get("page");
$order = $this->input->get("order");
$web_code = $this->input->get("web_code");
$channel = $this->input->get("channel");
$where = "1=1";//搜索条件
$page_parameter = "";//返回的分页条件参数
if(empty($page) or !is_numeric($page)){
@ -95,6 +96,11 @@ class pages extends CI_Controller{
$where = "BIZ_ConfirmLineInfo.COLI_WebCode='{$web_code}'";
$page_parameter = "web_code=".$web_code;
}
if (!empty($channel)){
$where = " InfoManager.dbo.trainsystem.ts_channel='{$channel}' ";
$page_parameter = " channel=".$channel;
}
//获取订单数据
$data = $this->train_system_model->get_order($page_size,$page,$where);

@ -59,6 +59,9 @@ class returnorders extends CI_Controller{
case 'ctrip':
$this->ctripModel($ticket_data,$passenger_data);
break;
case 'lanhai':
$this->lanhaiModel($ticket_data,$passenger_data);
break;
}
}
@ -185,6 +188,51 @@ class returnorders extends CI_Controller{
echo '{"reason":"退票失败","status":"404"}';
}
}
/**
* 澜海退票,这里只是提交退票提交。没有具体退票信息
*/
function lanhaiModel($ticket_data,$passenger_data){
$microtime = get_microtime();
//生成接口请求头参数
$dataId = $passenger_data->tst_id;
$mainOrderId = $passenger_data->tst_ordernumber;
$timestamp = $microtime;
$appId = LANHAI_appId;
$url = LANHAI_URL."api/open/refund/order";
//拼接发送的报文
$PostData = new stdClass();
$PostData->dataId = $dataId;
$PostData->mainOrderId = $mainOrderId;
$PostData->timestamp = $timestamp;
$PostData->appId = $appId;
// print_r(json_encode($PostData));
// die();
$ResponseJson = GetPost_http($url,json_encode($PostData),'json');
log_message('error','澜海退票请求返回信息:'.$ResponseJson);
$ResponseData = json_decode($ResponseJson);
// print_r($ResponseData);
// die();
//退票请求成功后执行支付
if($ResponseData->code == 0 && $ResponseData->success){
echo '{"reason":"退票提交成功","status":"200"}';
}else{
if (isset($ResponseData->msg)){
$errMsg = $ResponseData->msg;
}else{
$errMsg = "";
}
header("HTTP/1.1 404 Not Found");
echo '{"reason":"退票提交失败"'.$errMsg.',"status":"404"}';
}
}
//改签退票
public function returnreschedule(){

@ -421,8 +421,4 @@ function pkcs5_unpad($text) {
?>

@ -0,0 +1,51 @@
<?php
class aesLanhai{}
/**
* 使用旧的mcrypt来写澜海加解密类
*/
class Security {
private $key;
public function __construct() {
$CI =& get_instance();
$CI->load->config();
$this->key = LANHAI_KEY;
//$this->key = "999c1DtJJ4pEbcxeEqJBKw==";
}
public function encryptData($input) {
$size = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);
$input = Security::pkcs5_pad($input, $size);
$td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_ECB, '');
$iv = mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
mcrypt_generic_init($td, $this->key, $iv);
$data = mcrypt_generic($td, $input);
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
$data = base64_encode($data);
return $data;
}
private static function pkcs5_pad ($text, $blocksize) {
$pad = $blocksize - (strlen($text) % $blocksize);
return $text . str_repeat(chr($pad), $pad);
}
public function decryptData($sStr) {
$decrypted= mcrypt_decrypt(
MCRYPT_RIJNDAEL_128,
$this->key,
base64_decode($sStr),
MCRYPT_MODE_ECB
);
$dec_s = strlen($decrypted);
$padding = ord($decrypted[$dec_s-1]);
$decrypted = substr($decrypted, 0, -$padding);
return $decrypted;
}
}

@ -99,7 +99,8 @@ class train_system_model extends CI_Model {
ts_channel,
ts_isauto,
ts_autotimes,
ts_autolasttime
ts_autolasttime,
ts_lanhaiData
)
VALUES(
'{$data->cold_sn}',
@ -120,7 +121,8 @@ class train_system_model extends CI_Model {
'{$data->channel}',
'{$data->isauto}',
'{$data->ts_autotimes}',
getdate()
getdate(),
'{$data->lanhaiData}'
)
";
//echo $sql;
@ -128,7 +130,7 @@ class train_system_model extends CI_Model {
}
public function ticketfrom($ts_ordernumber){
$sql = "select ts_channel,ts_cold_sn,ts_ordernumber from trainsystem where ts_ordernumber = ?";
$sql = "select ts_channel,ts_cold_sn,ts_ordernumber,ts_lanhaiData from trainsystem where ts_ordernumber = ?";
$query = $this->INFO->query($sql,array($ts_ordernumber));
return $query->row();
}
@ -152,7 +154,8 @@ class train_system_model extends CI_Model {
tst_seatstype = '{$data->seatype}',
tst_seatdetail = '{$data->seatdetail}',
tst_status = '{$data->status}',
tst_LongTrainNo = '{$data->longtrainno}'
tst_LongTrainNo = '{$data->longtrainno}',
tst_lanhaiData = '{$data->lanhaiData}'
where
tst_ordernumber = '{$data->ordernumber}'
and
@ -170,7 +173,8 @@ class train_system_model extends CI_Model {
tst_ticketprice,
tst_seatstype,
tst_seatdetail,
tst_LongTrainNo
tst_LongTrainNo,
tst_lanhaiData
)VALUES(
'{$data->ordernumber}',
'{$data->status}',
@ -181,7 +185,8 @@ class train_system_model extends CI_Model {
'{$data->ticketprice}',
'{$data->seatype}',
'{$data->seatdetail}',
'{$data->longtrainno}'
'{$data->longtrainno}',
'{$data->lanhaiData}'
)
";
$query =$this->INFO->query($sql);
@ -294,6 +299,23 @@ class train_system_model extends CI_Model {
$query = $this->INFO->query($sql);
}
/**
* 更新退票后的乘客信息澜海退票返回乘客的ID其它信息没有。
*/
public function return_update_passager_lanhai($data){
$sql = "update
trainsystem_tickets
set
tst_status = '{$data->status}',
tst_returncallback = '{$data->returncallback}',
tst_lasteditdate = getdate()
where
tst_id = '{$data->tst_id}'
";
$query = $this->INFO->query($sql);
}
//获取订单出票状态
public function get_tickets_info($cold_sn){
$sql = "select top 1 ts_status,ts_ordernumber,ts_elecnumber,ts_seatsinfo from trainsystem where ts_cold_sn = ? and ts_status in ('4','7') order by ts_subtime desc";
@ -346,4 +368,13 @@ class train_system_model extends CI_Model {
$query = $this->INFO->query($sql, $cold_sn);
return $query->row();
}
/**
* 根据客人ID获取客人信息及出票信息
*/
public function get_passenger_byId($tst_id){
$sql = "select top 1 * from trainsystem_tickets inner join trainsystem on tst_ordernumber=ts_ordernumber and tst_id = ?";
$query = $this->INFO->query($sql,array($tst_id));
return $query->row();
}
}

@ -299,7 +299,7 @@ function selseat(seat){
</tr>
<tr style="text-align:;">
<td>
<button type="button" class="btn btn-success checked_pay" data-order="<?php echo $v->train->FOI_COLD_SN;?>">聚合订票</button>
<button type="button" class="btn btn-success checked_pay" data-order="<?php echo $v->train->FOI_COLD_SN;?>">澜海订票</button>
</td>
<td colspan="4" class="biaoqian"><span class="back_mes" style="color:red;line-height: 30px;"></span>
</td>
@ -411,7 +411,7 @@ function selseat(seat){
var cold_sn = $(this).attr('data-order');
var istanding = $('input[name="istanding_'+cold_sn+'"]').is(':checked');
url2+=$(this).attr("data-order")+"&people="+people_sn+"&selectseat="+selectseat+"&type=juhe&istanding="+istanding;
url2+=$(this).attr("data-order")+"&people="+people_sn+"&selectseat="+selectseat+"&type=lanhai&istanding="+istanding;
var THIS=$(this);
THIS.parent().parent().find(".back_mes").html(" ");//清空提示
@ -423,7 +423,7 @@ function selseat(seat){
},
success:function(data){
THIS.removeAttr("disabled");
THIS.html("聚合订票");
THIS.html("澜海订票");
var str = "<a href='http://www.mycht.cn/info.php/apps/trainsystem/pages/order?order="+data.order+"' target='_blank'>"+data.mes+"</a>";
THIS.parent().parent().find(".back_mes").html(str);

@ -24,7 +24,7 @@
<p style="text-align:center;"><a href="refund?order=<?php echo $ordernumber?>" style="padding:5px 15px;" class="btn btn-warning btn-sm">查看详情 <span class="glyphicon glyphicon-forward"></span></a></p>
<?php endif;?>
<?php if((int)$status === 7):?>
<?php if((int)$status === 7 || (int)$status==8):?>
<p style="border-top:1px dashed #000; height:1px;margin-top:10px;" ></p>
<p><?php echo $msg;?></p>
<p style="text-align:center;"><a href="refund?order=<?php echo $ordernumber?>" style="padding:5px 15px;" class="btn btn-warning btn-sm">查看详情 <span class="glyphicon glyphicon-forward"></span></a></p>

@ -20,6 +20,13 @@
<option value="train_vc">法国</option>
</select>
</div>
<div class="col-md-2">
<select class="form-control" name="channel">
<option value ="" disabled="disabled" selected>渠道</option>
<option value ="ctrip">携程</option>
<option value ="lanhai">澜海</option>
</select>
</div>
<!--<div class="col-md-5">
<input type="text" name="from_date" class="date" value="" class="">

@ -8,8 +8,20 @@
foreach ($passengers as $items){
echo '<p>'.$from_station_name.'<span class="glyphicon glyphicon-arrow-right"></span>'.$to_station_name.'</p>';
echo '<p style="border-top:1px dashed #000; height:1px;margin-top:10px;" ></p>';
echo '<p>'.$items->tst_realname.'('.$items->tst_ticketype.')&nbsp;&nbsp;&nbsp;&nbsp;'.$items->tst_seatstype.'&nbsp;&nbsp;'.$items->tst_seatdetail.'&nbsp;&nbsp;&nbsp;&nbsp;票价:¥'.$items->tst_ticketprice.'</p>';
if((int)$items->tst_status == 4){
echo '<p>ID:'.$items->tst_id.''.$items->tst_realname.'('.$items->tst_ticketype.')&nbsp;&nbsp;&nbsp;&nbsp;'.$items->tst_seatstype.'&nbsp;&nbsp;'.$items->tst_seatdetail.'&nbsp;&nbsp;&nbsp;&nbsp;票价:¥'.$items->tst_ticketprice.'</p>';
if ((int)$items->tst_status==7){//退票成功
echo '&nbsp;&nbsp;&nbsp;&nbsp;<p>退票成功</p>';
}else if ((int)$items->tst_status==8){
$errMsg = "";
if (!empty($items->tst_returncallback)){
$returnCallBack = json_decode($items->tst_returncallback);
if (isset($returnCallBack->failReason)){
$errMsg = $returnCallBack->failReason;
}
}
echo '&nbsp;&nbsp;&nbsp;&nbsp;<p>退票失败:'.$errMsg.'</p>';
}
if((int)$items->tst_status == 4 || (int)$items->tst_status==8){
echo '<p>';
echo '<a href="###" style="padding:5px 15px;" class="btn btn-warning btn-sm returnticket" name="'.$items->tst_realname.'" passid="'.$items->tst_numberid.'"><span class="glyphicon glyphicon-remove"></span>退票</a>';
echo '</p>';
@ -41,12 +53,12 @@ $(function(){
url:url,
success:function(json){
alert('请求成功,正在处理退票...');
return_ticket.html('退票成功');
return_ticket.html('退票提交成功');
},
error:function(json){
alert('请求失败,请重新请求,如果还有错误请联系管理员');
return_ticket.html('退票失败');
return_ticket.html('退票提交失败');
}
});
});

@ -0,0 +1,117 @@
/*携程出票发送信息*/
{
"train": {
"FOI_SN": 421000463,
"DepartureCity": "Guilin",
"ArrivalCity": "Guilin Bei (North)",
"FOI_COLD_SN": 586000781,
"DepartAirport": "GLZ",
"ArrivalAirport": "GBZ",
"FlightsNo": "G2910",
"Aircraft": "O",
"Cabin": "2nd Class Seat",
"DepartureDate": "2023-04-15 00:00:00",
"FOI_SelectedSeat": "1A,1B,1C",
"DepartAirport_cn": "\u6842\u6797",
"ArrivalAirport_cn": "\u6842\u6797\u5317",
"FOI_TrainNetOrderNo": null,
"adultcost": 6,
"childcost": 3,
"adultprice": 7,
"childprice": 7,
"ArrivalTime": "08:28AM Apr.15, 2023",
"DepartureTime": "08:18AM Apr.15, 2023",
"FOI_SaleDate": null
},
"people_list": [{
"BPE_SN": 571000773,
"BPE_FirstName": "",
"BPE_MiddleName": null,
"BPE_LastName": "AAA",
"BPE_GuestType": 1,
"BPE_Passport": "111",
"BPE_PassportType": "Passport No.",
"BPE_SEX": 100001,
"BPE_BirthDate": "1957-03-04",
"BPE_PassExpdate": "2023-04-14"
}, {
"BPE_SN": 571000774,
"BPE_FirstName": "",
"BPE_MiddleName": null,
"BPE_LastName": "BBB",
"BPE_GuestType": 1,
"BPE_Passport": "2222",
"BPE_PassportType": "Passport No.",
"BPE_SEX": 100001,
"BPE_BirthDate": "2005-03-29",
"BPE_PassExpdate": "2025-04-08"
}, {
"BPE_SN": 571000775,
"BPE_FirstName": "",
"BPE_MiddleName": null,
"BPE_LastName": "CCCC",
"BPE_GuestType": 1,
"BPE_Passport": "33333",
"BPE_PassportType": "Passport No.",
"BPE_SEX": 100003,
"BPE_BirthDate": "2007-04-23",
"BPE_PassExpdate": "2030-04-16"
}
],
"email": "vivi@hainatravel.com"
}
/*订单信息*/
{
"wl": [
{
"Name": "Vivi Chen",
"OPI_Name": "陈媛明",
"OPI_Email": "vivi@chinahighlights.com",
"tel": "86-0773-2823567",
"Mobile": "86-18877331805",
"Email": "vivi@chinahighlights.com"
}
],
"info": [
{
"people": [
{
"BPE_SN": 559006230,
"BPE_FirstName": "",
"BPE_MiddleName": null,
"BPE_LastName": "ZHANG HAIHUA",
"BPE_GuestType": 1,
"BPE_Passport": "G41163238",
"BPE_PassportType": "Passport No."
}
],
"train": {
"FOI_SN": 409004469,
"DepartureCity": "Beijing Nan (South)",
"ArrivalCity": "Yiwu",
"FOI_COLD_SN": 574005898,
"DepartAirport": "VNP",
"ArrivalAirport": "YWH",
"FlightsNo": "G191",
"Aircraft": "M",
"Cabin": "1st Class Seat",
"DepartureDate": "2021-10-26 00:00:00",
"FOI_SelectedSeat": "1F",
"DepartAirport_cn": "北京南",
"ArrivalAirport_cn": "义乌",
"FOI_TrainNetOrderNo": null,
"adultcost": 1061.5,
"childcost": 530.75,
"adultprice": 179,
"childprice": 93,
"ArrivalTime": "22:14 Oct.26, 2021",
"DepartureTime": "15:18 Oct.26, 2021",
"FOI_SaleDate": null
},
"status": true
}
],
"cols_id": "2110265554",
"balance": "NULL"
}

@ -0,0 +1,396 @@
//订单提交JSON结构
{
"authentication": {
"timeStamp": "2023-04-14 16:15:39",
"serviceName": "train.addTrainOrder",
"companyId": "1503141150",
"messageIdentity": "1f71fab781f73caea6686c8a69600732"
},
"trainOrderInfo": {
"companyId": "1503141150",
"orderType": 2,
"orderTicketType": 0,
"companyOrderId": "HN1681460139569",
"isReservationOrder": null,
"leakCutOffTime": null,
"orderInfo": {
"orderTime": "2023-04-14 16:15:39",
"ticketList": [{
"fromStationName": "桂林",
"toStationName": "桂林北",
"ticketTime": "2023-04-29 08:18",
"trainNo": "G2910",
"allAcceptTrainNo": "",
"acceptDepartDates": "",
"arrivalDateTime": "2023-04-29 08:28",
"ticketPrice": 6,
"seatName": "二等座",
"selectedSeat": "1A",
"acceptSeat": "",
"passengerList": [{
"passengerType": 1,
"certificateType": 1,
"certificateNo": "oiHef47aYwngLzVN2iiBtTS80fvlfpc8",
"certificateName": "赵鹏",
"birthday": null,
"realName": "赵鹏",
"identityLimitDate": null,
"countryCode": "",
"contactMobile": "",
"contactEmail": ""
}
]
}
],
"frontSeatFlag": 0,
"orderRemark": ""
},
"contactUser": {
"contactUserId": "",
"contactName": "vivi",
"companyId": "1503141150",
"countryCode": "86",
"contactMobile": "up3E0hBuzNbADKxufANHMg=="
},
"extraService": {
"noVerifyFlag": 1,
"lowerBerthFlag": 0,
"lowerBerthCount": 0,
"grabTicketRate": 1
}
}
}
//订单提交成功返回数据
{
"returnCode": 1,
"returnMessage": "SUCCESS",
"returnData": {
"serviceName": "train.addTrainOrder",
"companyId": "1503141150",
"companyOrderId": "HN1681460139569",
"operationDateTime": "2023-04-14 16:15:56",
"orderPayDetail": {
"orderAmount": 12.00,
"ticketAmount": 6,
"serveAmount": 0,
"extraServeFees": [
{
"feeAmount": 6.00,
"feeType": 141
}
]
}
},
"ResponseStatus": {
"Timestamp": "/Date(1681460156763+0800)/",
"Ack": "Success",
"Errors": [],
"Build": null,
"Version": null,
"Extension": [
{
"Id": "CLOGGING_TRACE_ID",
"Version": null,
"ContentType": null,
"Value": "7715658886832531034"
},
{
"Id": "RootMessageId",
"Version": null,
"ContentType": null,
"Value": "100031671-0a6d18d7-467072-1571193"
}
]
}
}
//支付成功
{
"returnCode": 1,
"returnMessage": "pay success",
"returnData": {
"serviceName": "train.companyPayOrder",
"companyId": "1503141150",
"companyOrderId": "HN1681700111527",
"operationDateTime": "2023-04-17 10:55:19"
},
"ResponseStatus": {
"Timestamp": "/Date(1681700119599+0800)/",
"Ack": "Success",
"Errors": [],
"Build": null,
"Version": null,
"Extension": [{
"Id": "CLOGGING_TRACE_ID",
"Version": null,
"ContentType": null,
"Value": "489001780207311316"
}, {
"Id": "RootMessageId",
"Version": null,
"ContentType": null,
"Value": "100031671-0a6e4a89-467138-6889241"
}
]
}
}
//订单callback
{
"authentication": {
"timeStamp": "2023-04-19 14:19:26",
"serviceName": "notice.ticketresult",
"messageIdentity": "8c82312e95158e289fd453f33114e0d2",
"companyId": "1503141150"
},
"ticketResult": {
"companyOrderId": "HN1681885121340",
"resultCode": 1,
"resultMsg": null,
"ticketSuccTime": "2023-04-19 14:19:26",
"operateTradeNo": "5027649989833265152",
"orderMasterInfo": {
"totalPayAmount": 12.00,
"orderType": 2,
"contactName": "vivi",
"mobileNo": "up3E0hBuzNbADKxufANHMg==",
"remark": ""
},
"passengerInfoList": [{
"passengerId": 6197111157,
"certificateType": 1,
"certificateName": "赵鹏",
"certificateNo": "oiHef47aYwngLzVN2iiBtTS80fvlfpc8",
"birthday": null,
"realName": "赵鹏",
"passengerType": 1,
"contactMobile": "7s0sfWX+Bx8=",
"contactEmail": "7s0sfWX+Bx8="
}
],
"orderRouteInfoList": [{
"routeId": 1136901379,
"departTime": "2023-04-30 10:16:00",
"arrivalTime": "2023-04-30 10:26:00",
"ticketCount": 1,
"ticketPrice": 6.00,
"fromStationName": "桂林",
"toStationName": "桂林北",
"trainNo": "D8268",
"ticketSeat": "二等座",
"acceptSeat": null,
"routeNo": 1,
"elecNo": "EJW2232127",
"checkWindow": "检票口6"
}
],
"orderTicketInfoList": [{
"ticketId": 892585335,
"routeId": 1136901379,
"passengerId": 6197111157,
"realTicketPrice": 6.00,
"seatName": "二等座",
"carriageNo": "7",
"seatNo": "14B号",
"createTime": "2023-04-19 14:19:26",
"longElecNo": "23174648650D82685902",
"quickPass": 0,
"trainStatus": 0
}
]
}
}
/*退
*/
{
"authentication": {
"timeStamp": "2023-04-28 09:46:40",
"serviceName": "train.artificialTicketReturn",
"companyId": "1503141150",
"messageIdentity": "a46aa9f51cb8dbe299d2584aa41be93a"
},
"companyOrderId": "HN1681696305456",
"operator": "vivi",
"returnServiceFee": "15",
"returnTicketList": [{
"trainNo": "G2910",
"carriageNo": "4",
"seatNo": "5F\u53f7",
"longElecNo": "23383214738D84519712",
"cardFirstImage": "",
"cardSecondImage": ""
}
]
}
/*退票返回的数据结构*/
{
"ResponseStatus": {
"Timestamp": "/Date(1683186036147+0800)/",
"Ack": "Success",
"Errors": [],
"Build": null,
"Version": null,
"Extension": [{
"Id": "CLOGGING_TRACE_ID",
"Version": null,
"ContentType": null,
"Value": "5184875534824024628"
}, {
"Id": "RootMessageId",
"Version": null,
"ContentType": null,
"Value": "100031671-0a638ae3-467551-5279705"
}
]
},
"returnCode": 0,
"returnMessage": "车票价格需要大于 19.5才能退票"
}
/*退款calback*/
{
"authentication": {
"timeStamp": "2023-05-04 11:40:15",
"serviceName": "notice.refundresult",
"messageIdentity": "c38f06426a3e9b11d221f6402ab4fd99",
"companyId": "1503141150"
},
"refundResult": {
"companyOrderId": "HN1683171474981",
"refundType": 5,
"reason": null,
"refundTime": "2023-05-04 11:40:04",
"tradeNo": "5033045727832576000",
"refundAmount": 12.00,
"operateTradeNo": null,
"refundDetailInfoList": null
}
}
/*退款 多张票的情况 长订单号等有所不同*/
{
"authentication": {
"timeStamp": "2023-06-01 15:06:11",
"serviceName": "notice.refundresult",
"messageIdentity": "9af17693f6546dd0719cfcf3f4cbd896",
"companyId": "4003171843"
},
"refundResult": {
"companyOrderId": "HN1685430938567",
"refundType": 2,
"reason": null,
"refundTime": "2023-06-01 15:06:11",
"tradeNo": "5043244432384724992",
"refundAmount": 271.00,
"operateTradeNo": "5042802996723978240",
"refundDetailInfoList": [{
"longElecNo": "24060026739G65552055",
"refundDetailType": 20,
"refundDetailAmount": 271.00
}
]
}
}
{
"authentication": {
"timeStamp": "2023-06-01 15:06:11",
"serviceName": "notice.refundresult",
"messageIdentity": "9af17693f6546dd0719cfcf3f4cbd896",
"companyId": "4003171843"
},
"refundResult": {
"companyOrderId": "HN1685430938567",
"refundType": 2,
"reason": null,
"refundTime": "2023-06-01 15:06:11",
"tradeNo": "5043244431617167360",
"refundAmount": 271.00,
"operateTradeNo": "5042809037335433216",
"refundDetailInfoList": [{
"longElecNo": "24060026739G65552054",
"refundDetailType": 20,
"refundDetailAmount": 271.00
}
]
}
}
//澜海出票成功返回
{
"authentication": {
"timeStamp": "2024-07-10 15:40:50",
"appId": "3649601564",
"mainOrderId": "HN1720487984255"
},
"bodyInfo": {
"agentCode": "000001428",
"contactMobile": "17722807804",
"currentTime": "2022-09-29 10:40:50",
"eOrderNumber": "E5W0086985",
"failCode": 0,
"orderPrice": "720.0",
"orderResultCode": 200,
"mainOrderId": "21158540860",
"payTradeNumber": "2022092922001429951455254961",
"resultMsg": "出票成功",
"ticketList": [{
"ticketCheck": "检票口13AB",
"arriveTime": "2022-10-04 22:33:00",
"deliveryTicketId": 76861483,
"departTime": "2022-10-04 20:02",
"fromStationName": "赣县北",
"passengerList": [{
"carriageNo": "03",
"passengerId": 113317051,
"passengerName": "何沙沙",
"passengerType": 2,
"passportNumber": "420821198609055029",
"passportType": "1",
"passportTypeName": "身份证",
"realTicketPrice": "288.0",
"seatName": "二等座",
"seatNo": "05D"
}, {
"carriageNo": "03",
"passengerId": 113317052,
"passengerName": "刘明山",
"passengerType": 2,
"passportNumber": "362121197703160012",
"passportType": "1",
"passportTypeName": "身份证",
"realTicketPrice": "288.0",
"seatName": "二等座",
"seatNo": "06C"
}, {
"carriageNo": "03",
"passengerId": 113317053,
"passengerName": "刘沛勋【儿童票】",
"passengerType": 3,
"passportNumber": "360721201007070013",
"passportType": "1",
"passportTypeName": "身份证",
"realTicketPrice": "144.0",
"seatName": "二等座",
"seatNo": "09F"
}
],
"ticketCount": 3,
"ticketPrice": "288.0",
"toStationName": "深圳北",
"trainNumber": "G2793"
}
],
"ticketSuccessTime": "2022-09-29 10:40:50",
"userId": 65
}
}

@ -0,0 +1,8 @@
{
"bodyInfo": "HEYIbCfmv/d057K+gdHTKpv7FVeC4QYpF178Zu69jv0lxaHZbPc6GyiuJFTf1ZT9dFZCWKnHw0tFTZkNepGH7oLkt0CS2h1IEiSs0XPwnzKN9g/RlEaiMPh7rl9ZuBIFxaWRvyKK1cxjxb5CZxrjaIaV/Cm3hmdsIFum2vSGsuTy3FwjRty6RvI+d1rMy+XcInKWewzd9eCUgpA5u68SL9IJJ9TzbKpHI0f9ab/Cu28m2v7ZpQPWC3DgqYgP84x6NFniu0Js/PXU3e5a2lZz1z+a4gX2NvGNINMvNsClpzRzikEVTWqxhz/apLcwnDEJwS2Spt8zt9g3aVgtF6jc9QOdWZYrzuNWV2DH0mdn8Cyb1gqRK+0nLtPQt/NzO0xVLHlZuCsSTW9/r7ZjDd07gX6D+EQzDXVGpKbP+TerNOu77V+SYC5VDBYycpfa+w6Z48OzLZL5D4KN/y5lFI1cWK4MQ8IMlBHd8UUu5Rurx7yCLZvKsaxAK6MzW+Kdf7hza+B18AwPrtvXZ26H66kSF6FK4s6hvrvyeGsUxj2teHdDr9XjDsEnjw8qdamUYSModr0tfQyX5HW7bENc8w8mvCHvJS+fz/eiZctPQ+p8t+RCv0OBwIEVRtivFvkTB3M8xtsAO1oM1LtX13FoSsxyzNFB2d4rTj1K1fPbhmxMKGWmxDdPy4JOzk9OEB9cbG4a22bI/vSnp+YDqu5a/Vp9EeIBOfYUNXTpqnhBaff8ORreXEehjKJzrKZ8XKKcxo7V5S5P02RV2cO9V/v5uL/rbSPBnmR+9qizb9aBBjUKedBLVXXZO1sKJOohv71qFKXauNc6ASW/1iKl08mW4MYAlR1IL1UDr0aWhw7OhYDK+fbRlh55kALEfmn98bvwltrS56QWULdzfpTYSiVnOZ165NX8ywcT+CwF1+WGY6Hj+uYNeIulZKI9XBUKcmqat5RwUEyMNKB3KAdizeiOzp6QAomCttz7XxXJ9h+mWkhDipY8jktMX2Ss3zRCuO0lGphtFxpYdJ3sPYtQnRD71wSUeMVnNzSBcmYBwG3l2tlBrjtIddHp60ZUIYnUcFMKriPn7iO3UWWlVz/XX0ELHrLcXQ==",
"authentication": {
"timeStamp": "2024-07-16 15:42:48",
"appId": "3649601564",
"mainOrderId": "HN1721115685991"
}
}

@ -0,0 +1 @@
[{"id":1,"seatName":"硬座","seatItems":["硬座","无座"]},{"id":2,"seatName":"硬卧","seatItems":["硬卧上","硬卧中","硬卧下"]},{"id":3,"seatName":"软座","seatItems":["软座"]},{"id":4,"seatName":"一等软座","seatItems":["一等软座"]},{"id":5,"seatName":"二等软座","seatItems":["二等软座"]},{"id":6,"seatName":"特等软座","seatItems":["特等软座"]},{"id":7,"seatName":"软卧","seatItems":["软卧上","软卧下"]},{"id":8,"seatName":"商务座","seatItems":["商务座"]},{"id":9,"seatName":"一等包座","seatItems":["一等包座"]},{"id":10,"seatName":"观光座","seatItems":["观光座"]},{"id":11,"seatName":"特等座","seatItems":["特等座"]},{"id":12,"seatName":"一等座","seatItems":["一等座"]},{"id":13,"seatName":"二等座","seatItems":["二等座","无座"]},{"id":14,"seatName":"高级软卧","seatItems":["高级软卧上","高级软卧下"]},{"id":15,"seatName":"包厢硬卧","seatItems":["包厢硬卧上","包厢硬卧中","包厢硬卧下"]},{"id":16,"seatName":"包厢软座","seatItems":["包厢软座"]},{"id":17,"seatName":"一等卧","seatItems":["一等卧上","一等卧下"]},{"id":18,"seatName":"二等卧","seatItems":["二等卧上","二等卧中","二等卧下"]},{"id":19,"seatName":"混编软座","seatItems":["混编软座"]},{"id":20,"seatName":"动卧","seatItems":["动卧上","动卧下"]},{"id":21,"seatName":"多功能座","seatItmes":["多功能座"]},{"id":22,"seatName":"二等包座","seatItems":["二等包座"]},{"id":23,"seatName":"一人软包","seatItems":["一人软包"]},{"id":24,"seatName":"二等软包","seatItmes":["二等软包"]},{"id":25,"seatName":"高级动卧","seatItems":["高级动卧上","高级动卧下"]}]
Loading…
Cancel
Save