LMR 11 months ago
commit 80bebefca3

@ -6,8 +6,8 @@ on:
branches: [ master ]
jobs:
gh-win-us-deploy:
name: 🎉 Deploy InfoSys to US
gh-win-cn-deploy:
name: 🎉 Deploy InfoSys to CN
runs-on: ubuntu-latest
steps:
- name: 🚚 Get latest code
@ -16,13 +16,14 @@ jobs:
- name: 📂 Sync files to CHT
uses: SamKirkland/FTP-Deploy-Action@v4.3.4
with:
server: ${{ secrets.US_FTP_SERVER }}
username: ${{ secrets.US_FTP_USER }}
password: ${{ secrets.US_FTP_PASSWORD }}
port: ${{ secrets.US_FTP_PORT }}
server: ${{ secrets.CN_FTP_SERVER }}
username: ${{ secrets.CN_FTP_USER }}
password: ${{ secrets.CN_FTP_PASSWORD }}
port: ${{ secrets.CN_FTP_PORT }}
local-dir: ./
server-dir: /information-system/
server-dir: /wwwroot/origin-cht.mycht.cn/
# dry-run: true
# log-level: verbose
exclude: |
**/.git*
**/.git*/**
@ -36,7 +37,16 @@ jobs:
*.exe
*.docx
.ftp-deploy-sync-state.json
- name: 📂 Sync files to CT
gh-win-us-deploy:
needs: gh-win-cn-deploy
name: 🎉 Deploy InfoSys to US
runs-on: ubuntu-latest
steps:
- name: 🚚 Get latest code
uses: actions/checkout@v3
- name: 📂 Sync files to CHT
uses: SamKirkland/FTP-Deploy-Action@v4.3.4
with:
server: ${{ secrets.US_FTP_SERVER }}
@ -44,7 +54,7 @@ jobs:
password: ${{ secrets.US_FTP_PASSWORD }}
port: ${{ secrets.US_FTP_PORT }}
local-dir: ./
server-dir: /origin-ct.mycht.cn/
server-dir: /information-system/
# dry-run: true
exclude: |
**/.git*
@ -59,26 +69,16 @@ jobs:
*.exe
*.docx
.ftp-deploy-sync-state.json
gh-win-cn-deploy:
needs: gh-win-us-deploy
name: 🎉 Deploy InfoSys to CN
runs-on: ubuntu-latest
steps:
- name: 🚚 Get latest code
uses: actions/checkout@v3
- name: 📂 Sync files to CHT
- name: 📂 Sync files to CT
uses: SamKirkland/FTP-Deploy-Action@v4.3.4
with:
server: ${{ secrets.CN_FTP_SERVER }}
username: ${{ secrets.CN_FTP_USER }}
password: ${{ secrets.CN_FTP_PASSWORD }}
port: ${{ secrets.CN_FTP_PORT }}
server: ${{ secrets.US_FTP_SERVER }}
username: ${{ secrets.US_FTP_USER }}
password: ${{ secrets.US_FTP_PASSWORD }}
port: ${{ secrets.US_FTP_PORT }}
local-dir: ./
server-dir: /wwwroot/origin-cht.mycht.cn/
server-dir: /origin-ct.mycht.cn/
# dry-run: true
# log-level: verbose
exclude: |
**/.git*
**/.git*/**
@ -93,6 +93,8 @@ jobs:
*.docx
.ftp-deploy-sync-state.json
hn-notification:
needs: gh-win-cn-deploy
name: 🔔 Send notificaiton

@ -900,7 +900,32 @@ class Information extends CI_Controller
break;
default:
}
$breadcrumb_data = $this->Information_model->get_path_exclude_self($information->is_id, $information->is_path);
// CH Home 下层节点名称和链接映射
$group_map = [
278008010 => [
'ic_url' => '/travelguide/culture/',
'ic_url_title' => 'Chinese Culture'
],
278008011 => [
'ic_url' => '/citytour/',
'ic_url_title' => 'Destinations'
],
278008012 => [
'ic_url' => '/aboutus/',
'ic_url_title' => 'About Us'
],
278008013 => [
'ic_url' => '/citytour/',
'ic_url_title' => 'City Tours'
],
278008014 => [
'ic_url' => '/tour/',
'ic_url_title' => 'China Tours'
]
];
$breadcrumb_data = $this->Information_model->get_breadcrumb_data($information->is_id, $information->is_path, $group_map);
$breadcrumb_structured_data_content = $this->load->view(
$template_path . '-structured-data-breadcrumb',
@ -1047,6 +1072,7 @@ class Information extends CI_Controller
$author = $this->Operator_model->get_author_nikename($information->ic_author);
if (!empty($author)) {
$data_H1['author'] = $author->OPI_FirstName;
$data_H1['OPI_Code'] = $author->OPI_Code;
} else {
$author_web = $this->Infoauthors_model->detail_by_id($information->ic_author); //原始作者,可能是在线作者等
if (!empty($author_web)) {
@ -1746,6 +1772,7 @@ class Information extends CI_Controller
if (!empty($author)) {
$data_H1['author'] = $author->OPI_FirstName;
$data_H1['OPI_Code'] = $author->OPI_Code;
} else {
$author_web = $this->Infoauthors_model->detail_by_id($information->ic_author); //原始作者,可能是在线作者等
if (!empty($author_web)) {
@ -1975,6 +2002,31 @@ class Information extends CI_Controller
}
}
// 顾问英文名反馈标签
$feedback_advisor_array = [];
preg_match_all('^<!--@FEEDBACK-advisor_(.*)@-->^', $information->ic_content, $feedback_advisor_array);
if (!empty($feedback_advisor_array)) {
foreach ($feedback_advisor_array[0] as $index => $tag_name) {
$advisor_name = $feedback_advisor_array[1][$index];
$feedback_list = $this->Feedback_model->get_feedback_by_advisor_name($advisor_name);
$feedback_content = $this->load->view(
'mobile_first/gh-feedback-advisor-list',
array(
'feedback_list' => $feedback_list,
'advisor_name' => $advisor_name
),
true
);
$information->ic_content = str_replace(
$tag_name,
$feedback_content,
$information->ic_content
);
}
}
if (is_file('D:/wwwroot/origin-www.globalhighlights.com/css/gh-global.css')) { //主样式表,内联模式,优先读取本地,没有在从网络读取,为了加速
$main_css_string = compress_css(file_get_contents('D:/wwwroot/origin-www.globalhighlights.com/css/gh-global.css'));
} else {
@ -2109,6 +2161,7 @@ class Information extends CI_Controller
$author = $this->Operator_model->get_author_nikename($information->ic_author);
if (!empty($author)) {
$data['author'] = $author->OPI_FirstName;
$data['OPI_Code'] = $author->OPI_Code;
} else {
$author_web = $this->Infoauthors_model->detail_by_id($information->ic_author); //原始作者,可能是在线作者等
if (!empty($author_web)) {
@ -2273,6 +2326,15 @@ class Information extends CI_Controller
);
$information->ic_content = str_replace('<!--@LANTERN-FORM@-->', $lantern_form_content, $information->ic_content);
// 水灯节2025表单
$lantern_form_content_2025 = $this->load->view(
'mobile_first/ah-lantern-form-2025',
array('information' => $information),
true
);
$information->ic_content = str_replace('<!--@LANTERN-FORM-2025@-->', $lantern_form_content_2025, $information->ic_content);
// CAD 跨年表单
$new_year_countdown_form_content = $this->load->view(
'mobile_first/ah-new-year-countdown',

@ -200,4 +200,56 @@ class Feedback_model extends CI_Model {
return $feedback_list;
}
/**
* 根据顾问英文名查找反馈信息
*/
function get_feedback_by_advisor_name($advisor_name) {
$feedback_query =
$this->HT->query("
select top 3
tad.tad_content,
tai.tai_customerid,
tai.tai_title,
tai.tai_getdate,
tai.tai_url,
vci.cii2_name
from Eva_TAInfo tai
join Eva_TADetail tad on tad.TAD_TAI_SN = tai.TAI_SN
join V_CIty_Info vci on vci.cii_sn = tai.tai_cii_sn and vci.LGC_LGC = 1
where tad.TAD_SN in (
select TAD_SN
from Eva_TADetail e
join V_Operator_Info v on e.TAD_ObjList like '%,' + cast(v.OPI_SN as varchar) + ',%'
where e.TAD_ObjType = 99002
and v.LGC_LGC = 1
and v.OPI2_Name = ?
)
order by tai.tai_getdate desc;
",
array($advisor_name));
$feedback_result = $feedback_query->result();
$feedback_list = [];
$customer_id_list = [];
foreach ($feedback_result as $feedback_row) {
$createdOn = new DateTime($feedback_row->tai_getdate);
$createdOnString = $createdOn->format('M Y');
if (!in_array($feedback_row->tai_customerid, $customer_id_list)) {
$feedback = [
'title' => $feedback_row->tai_title,
'customer' => $feedback_row->tai_customerid,
'content' => $feedback_row->tad_content,
'url' => $feedback_row->tai_url,
'createdOn' => $createdOnString
];
$feedback_list[] = $feedback;
$customer_id_list[] = $feedback_row->tai_customerid;
}
}
return $feedback_list;
}
}

@ -60,6 +60,15 @@ 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/");
//澜海接口(正式)
define("LANHAI_appId","9082253783");
define("LANHAI_KEY","YZ6yrAbv0Qn8CsZwHtZExA==");
define("LANHAI_URL","http://ctrip.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";
}
//本地订单入库
@ -829,6 +832,10 @@ class addorders extends CI_Controller{
$regionCode = $PassagerInfo->BPE_Nationality;
if ($regionCode =="TW" || $regionCode=="HK" || $regionCode=="MO"){
$passagersdata[$i]->regionCode = "CN";
}
else if ($regionCode=="UK" || $regionCode=="GB"){
$passagersdata[$i]->regionCode = "GB"; //英国传GB
}else{
$passagersdata[$i]->regionCode = $regionCode; //国家简码 美国us ,中国cn
}
@ -837,6 +844,7 @@ class addorders extends CI_Controller{
$i++;
}
//乘客人信息
$PostData->trainOrderInfo->orderInfo->ticketList['0']->passengerList = $passagersdata;
$PostData->trainOrderInfo->orderInfo->frontSeatFlag = 0;
@ -998,6 +1006,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);
}
}

@ -414,6 +414,77 @@ class api extends CI_Controller{
}
}
//澜海账单导出api
public function lanhai_export_excel(){
set_time_limit(0);
//参数
$from_date = $this->input->post("from_date");
$to_date = $this->input->post("to_date");
if(!empty($from_date) && !empty($to_date)){
//拼接发送的报文
$PostData = new stdClass();
$bodyInfo = new stdclass();
$bodyInfo->startTime = $from_date." 00:00:00";
$bodyInfo->endTime = $to_date." 23:59:59";
$bodyInfo->pageNum = 1;
$bodyInfo->pageSize = 20000;
$authentication = new stdClass(); //需加密的数据
$authentication->appId = LANHAI_appId;
//加密
$this->load->library("aesLanhai");
$aesUnit = new Security();
$resultData = $aesUnit->encryptData(json_encode($bodyInfo));
$PostData->bodyInfo = $resultData;
$PostData->authentication = $authentication;
//echo (json_encode($PostData));
$url = LANHAI_URL."api/open/bill";
$ResponseJson = GetPost_http($url,json_encode($PostData,JSON_UNESCAPED_UNICODE),'json');
$ResponseData = json_decode($ResponseJson);
if($ResponseData->code == 0 && $ResponseData->success){
$string_r = "";//输出
$arr = array();//整合完成的数组,写进excel表的数据
foreach ($ResponseData->data->records as $record) {
# code...
$arrRecord = array();
$arrRecord["saveDay"] = $record->saveDay;
$arrRecord["type"] = $record->type; //类型 包括:出票、低改高、出票退票、改签退票、退票
$arrRecord["mainOrderId"] = $record->mainOrderId; //订单号
$arrRecord["passengerName"] = $record->passengerName; //乘车人
$arrRecord["price"] = $record->price ;//金额,整数是支付票款,负数是退回金额
$arrRecord["wl"] = ""; //外联
$arrRecord["griName"]=""; //团号
$orderData = $this->train_system_model->get_OPIName($record->mainOrderId);
if (!empty($orderData)){
$arrRecord["wl"] = $orderData->OPIName;
$arrRecord["griName"] = $orderData->griName;
}
$arr[] = $arrRecord;
}
//print_r($arr);
//写入excel模板
header("Content-type:application/vnd.ms-excel;charset=utf-8");
header("Content-Disposition:attachment;filename=juhe_train.xls");
$string_r= $this->load->view("lanhai_transaction_excel",array("arr"=>$arr),TRUE);
echo $string_r;die;
}
}
}
//订单同步到trainsystem
public function sync_orders(){
die();

@ -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,703 @@
<?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()
{
//出票锁单接口: https://www.mycht.cn/info.php/apps/trainsystem/lanhaiticket/pushorderdetail?mainOrderId=HN1720670129499
//出票回调接口https://www.mycht.cn/info.php/apps/trainsystem/lanhaiticket/pushorderresult/
//退票锁单接口: https://www.mycht.cn/info.php/apps/trainsystem/lanhaiticket/refundorderdetail?dataId=82033
//退票回调接口: https://www.mycht.cn/info.php/apps/trainsystem/lanhaiticket/refundorderresult/
//退款回调接口https://www.mycht.cn/info.php/apps/trainsystem/lanhaiticket/refundpriceresult/
//http://ct.tms.lhticket.com 账号: GLhaina 密码123456
}
/**
* @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 . ' +30 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 = "33653";
//根据订单号获取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;
$passengerNum = $tItems->ticketCount; //车票数
if ($passengerNum>0){
$poundage = $passengerNum*10;
}else{
$poundage = 0;
}
$add_train_payment_data->poundage = $poundage; //手续费
$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, '33653');
}
}
}
//更新订单信息(出票系统)
$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 = "33653";
//根据订单号获取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 = "33653";
$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)){
@ -96,6 +97,11 @@ class pages extends CI_Controller{
$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);
// print_r(json_encode($data));die();
@ -239,14 +245,21 @@ class pages extends CI_Controller{
//账单导出页面
public function export(){
if(get_cookie('dingname') == '' && get_cookie('dingunionid') == ''){
redirect('/apps/dinglogin/login/?returnurl=/apps/trainsystem/pages/');
}
// if(get_cookie('dingname') == '' && get_cookie('dingunionid') == ''){
// redirect('/apps/dinglogin/login/?returnurl=/apps/trainsystem/pages/');
// }
$this->load->view('header');
$this->load->view('export');
$this->load->view('footer');
}
//澜海账单导出页面
public function lanhaiExport(){
$this->load->view('header');
$this->load->view('export_lanhai');
$this->load->view('footer');
}
//预售时间列表
public function presale_list(){
$page_size = 10;
@ -331,6 +344,115 @@ class pages extends CI_Controller{
echo $rUrl;
}
//澜海查询信息
public function lanhaiMsg(){
$order = $this->input->get_post("order"); //订单号
$type = $this->input->get_post("type"); //出票,退票,账单等类型
$microtime = get_microtime(); //时间戳
//生成接口请求头参数
$timestamp = $microtime;
$appId = LANHAI_appId;
if ($type == "orderticket"){
$url = LANHAI_URL."api/open/get/orderDetails";
}else if ($type == "returnticket"){
$url = LANHAI_URL."api/open/get/orderRefundDetails";
}
//拼接发送的报文
$PostData = new stdClass();
$PostData->mainOrderId = $order;
$PostData->timestamp = $timestamp;
$PostData->appId = $appId;
$ResponseJson = GetPost_http($url,json_encode($PostData),'json');
//log_message('error','澜海出票详细信息:'.$ResponseJson);
$ResponseData = json_decode($ResponseJson);
if (isset($ResponseData->data)){
// //需要解密
$this->load->library("aesLanhai");
$aesUnit = new Security();
$data = json_decode($aesUnit->decryptData($ResponseData->data));
$result = array();
$this->handle_array($data,$type,$result);
$formattedJson = json_encode($result, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
echo "<pre>$formattedJson</pre>";
}else{
$ResultNoticeResponse = new stdClass();
$ResultNoticeResponse->returnCode = -1;
$ResultNoticeResponse->success = false;
$ResultNoticeResponse->returnMsg = "找不到订单数据!";
$formattedJson = json_encode($ResultNoticeResponse, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
echo $formattedJson;
}
}
//循环展示JSON
private function handle_array($arr,$type,&$array_to_fill){
foreach($arr as $key => $value){
if(is_array($value) || is_object($value)){
$array_to_fill[$key] = array();
$this->handle_array($value,$type, $array_to_fill[$key]);
}else{
if ($type=="orderticket"){ //出票特殊显示
if ($key == "passengerType"){
if ($value==0){
$value = "成人";
}else if($value == 1){
$value = "儿童";
}
}
if ($key == "certificateType"){
if ($value==1){
$value = "身份证";
}else if ($value == 2) {
$value = "护照";
}else if ($value == 7){
$value = "回乡证";
}else if ($value == 8 ){
$value = "台胞证";
}
}
if ($key == "status"){
switch ($value) {
case 0:
$value = "待出票";
break;
case 1:
$value = "锁定订单";
break;
case 2:
$value = "已出票";
break;
case 3:
$value = "超时订单";
break;
case 4:
$value = "已驳回";
break;
case 6:
$value = "出票超时";
break;
case 12:
$value = "锁单失败";
break;
default:
# code...
break;
}
}
}
$array_to_fill[$key] = $value;
}
}
}
public function presale_add(){
$this->load->view('header');

@ -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;
}
}
@ -186,6 +189,51 @@ class returnorders extends CI_Controller{
}
}
/**
* 澜海退票,这里只是提交退票提交。没有具体退票信息
*/
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;
}
}

@ -63,6 +63,8 @@ class train_system_model extends CI_Model {
AND
{$where}
ORDER BY InfoManager.dbo.trainsystem.ts_subtime DESC";
// echo($sql);
// die();
$query = $this->HT->query($sql);
$data->list=$query->result();
@ -99,7 +101,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 +123,8 @@ class train_system_model extends CI_Model {
'{$data->channel}',
'{$data->isauto}',
'{$data->ts_autotimes}',
getdate()
getdate(),
'{$data->lanhaiData}'
)
";
//echo $sql;
@ -128,7 +132,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 +156,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 +175,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 +187,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 +301,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 +370,36 @@ 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();
}
//根据订单号获取外联名称
public function get_OPIName($orderNumber){
$sql = "select top 1
(SELECT TOP 1 OPI2_Name
FROM OperatorInfo2
WHERE OPI2_OPI_SN = coli_opi_id
AND OPI2_LGC = 2
) AS OPIName,
(select top 1 Gri_No from GRoupInfo where GRI_SN=BIZ_ConfirmLineInfo.COLI_GRI_SN) as griName
FROM InfoManager.dbo.trainsystem
INNER JOIN BIZ_ConfirmLineInfo ON BIZ_ConfirmLineInfo.COLI_SN = (
SELECT COLD_COLI_SN
FROM BIZ_ConfirmLineDetail
WHERE COLD_SN = InfoManager.dbo.trainsystem.ts_cold_sn
)
where ts_ordernumber=?
";
$query = $this->HT->query($sql,array($orderNumber));
return $query->row();
}
}

@ -5,8 +5,8 @@
</div>
<div class="panel-body">
<form style="width: 80%;" action="http://www.mycht.cn/info.php/apps/trainsystem/api/export_excel/" method="post">
<input type="text" name="from_date" class="date" value="<?php echo empty($from_date)?"":$from_date;?>" autocomplete="off">
<input type="text" name="to_date" class="date" value="<?php echo empty($to_date)?"":$to_date;?>" autocomplete="off">
<input type="text" name="from_date" class="date" value="<?php echo empty($from_date)?"":$from_date;?>" autocomplete="off" placeholder="开始日期">&nbsp;&nbsp;&nbsp;&nbsp;
<input type="text" name="to_date" class="date" value="<?php echo empty($to_date)?"":$to_date;?>" autocomplete="off" placeholder="结束日期">
审核状态:<input type="checkbox" <?php echo empty($examine)?"":"checked";?> name="examine" />&nbsp;&nbsp;&nbsp;
<button type="submit" id="sub" class="btn btn-warning btn-sm"><span class="glyphicon glyphicon-download-alt"></span> Download</button>
</form>

@ -0,0 +1,76 @@
<div style="width:90%;margin:30px auto;">
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title">交易记录导出&nbsp;<a style="margin-left:50px;" target='_blank' href="<?php echo site_url('apps/train/index/ht_order_list');?>">订单列表>></a> </h3>
</div>
<div class="panel-body">
<form style="width: 80%;" action="/info.php/apps/trainsystem/api/lanhai_export_excel/" method="post">
<input type="text" name="from_date" class="date" value="<?php echo empty($from_date)?"":$from_date;?>" autocomplete="off" placeholder="开始日期">&nbsp;&nbsp;&nbsp;&nbsp;
<input type="text" name="to_date" class="date" value="<?php echo empty($to_date)?"":$to_date;?>" autocomplete="off" placeholder="结束日期">
显示列表:<input type="checkbox" <?php echo empty($examine)?"":"checked";?> name="examine" />&nbsp;&nbsp;&nbsp;
<button type="submit" id="sub" class="btn btn-warning btn-sm"><span class="glyphicon glyphicon-download-alt"></span> Download</button>
</form>
<p style="margin: 0 0 10px; width: 200px; float: left; line-height: 30px;">
<!-- <table class="table table-hover" >
<thead>
<tr><th>时间</th><th>信息</th><th>变化值</th><th>团名</th><th>外联</th></tr>
</thead>
<tbody>
<tr data-id="161130252" title="Popover title" data-container="body" data-toggle="popover" data-placement="top" data-content="顶部的 Popover 中的一些内容">
<td>2016-12-01 11:18:28</td>
<td> 票款(有充值)</td>
<td>-1106.00</td>
<td>R161228-BYW161130252</td>
<td>李毅文</td>
</tr>
</tbody>
</table> -->
<div class="row <?php echo empty($examine)?"hidden":"";?>" style="width:90%;margin:0 auto;">
<div class="">
<table class="table table-hover" id="list_table">
<thead>
<tr><th>时间</th><th>信息</th><th>变化值</th><th>团名</th><th>外联</th></tr>
</thead>
<tbody>
<?php foreach ($data as $key => $value) {?>
<tr data-id="<?php echo $value[8];?>" title="Popover title" data-container="body" data-toggle="popover" data-placement="top" data-content="顶部的 Popover 中的一些内容">
<td><?php echo $value[2];?></td><td><?php echo $value[3];?></td><td><?php echo $value[1];?></td><td><?php echo $value[6];?></td><td><?php echo $value[7];?></td>
</tr>
<?php }?>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<div class="popover fade top in" role="tooltip" id="popover" style="width:auto;max-width: 100% !important;top: 139.6px; left: 50%; display: none;">
<div class="arrow"></div>
<h3 class="popover-title">我的支付</h3>
<div class="popover-content">
<table class="table" id="my_pay_data">
<thead>
<tr>
<td>序号</td><td>车次</td><td>出发日期</td><td>价格</td><td>备注</td>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
<script>
$(function(){
$(".date").datepicker({
'dateFormat': 'yy-mm-dd',
'autoclose': true
});
})
</script>

@ -77,8 +77,8 @@ function selseat(seat){
<div style="width:90%;margin:30px auto;">
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title">翰特订单号&nbsp;<a style="margin-left:50px;" target='_blank' href="<?php echo site_url('apps/trainsystem/pages/order_list');?>">订单列表>></a><a style="margin-left:50px;" target='_blank' href="<?php echo site_url('apps/trainsystem/pages/presale_list');?>">预售时间维护>></a> <span style="margin-left:200px;">版本V2.0</span><span class="pull-right">聚合余额(RMB)<?php echo $balance;?></span></h3>
<!-- <a style="margin-left:50px;" target='_blank' href="<?php echo site_url('apps/trainsystem/pages/reschedule');?>">携程改签>></a><a style="margin-left:50px;" target='_blank' href="<?php echo site_url('apps/trainsystem/pages/export');?>">导出交易记录>></a> -->
<h3 class="panel-title">翰特订单号&nbsp;<a style="margin-left:50px;" target='_blank' href="<?php echo site_url('apps/trainsystem/pages/order_list');?>">订单列表>></a><a style="margin-left:50px;" target='_blank' href="<?php echo site_url('apps/trainsystem/pages/presale_list');?>">预售时间维护>></a> <a style="margin-left:50px;" target='_blank' href="<?php echo site_url('apps/trainsystem/pages/lanhaiExport');?>">澜海导出账单>></a><span style="margin-left:200px;">版本V2.0</span><!--<span class="pull-right">聚合余额(RMB)<?php echo $balance;?></span> --></h3>
<!-- <a style="margin-left:50px;" target='_blank' href="<?php echo site_url('apps/trainsystem/pages/reschedule');?>">携程改签>></a> -->
</div>
<div class="panel-body">
<form style="width: 300px;float: left;" action="/info.php/apps/trainsystem/pages/index/" method="post">
@ -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);

@ -0,0 +1,181 @@
<?xml version="1.0" encoding="utf-8"?>
<?mso-application progid="Excel.Sheet"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:html="http://www.w3.org/TR/REC-html40">
<DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
<Author>c21</Author>
<LastAuthor>c21</LastAuthor>
<Created>2024-08-07T01:21:46Z</Created>
<LastSaved>2024-08-07T01:38:10Z</LastSaved>
<Version>1.00</Version>
</DocumentProperties>
<ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
<WindowHeight>9630</WindowHeight>
<WindowWidth>21555</WindowWidth>
<WindowTopX>0</WindowTopX>
<WindowTopY>90</WindowTopY>
<ProtectStructure>False</ProtectStructure>
<ProtectWindows>False</ProtectWindows>
</ExcelWorkbook>
<Styles>
<Style ss:ID="Default" ss:Name="Normal">
<Alignment ss:Vertical="Center"/>
<Borders/>
<Font ss:FontName="宋体" x:CharSet="134" ss:Size="11" ss:Color="#000000"/>
<Interior/>
<NumberFormat/>
<Protection/>
</Style>
<Style ss:ID="m58993952">
<Alignment ss:Horizontal="Right" ss:Vertical="Center" ss:WrapText="1"/>
<Borders>
<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
</Borders>
<Font ss:FontName="微软雅黑" x:CharSet="134" x:Family="Swiss" ss:Size="11"
ss:Color="#000000"/>
</Style>
<Style ss:ID="m58993972">
<Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
<Borders>
<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
</Borders>
<Font ss:FontName="微软雅黑" x:CharSet="134" x:Family="Swiss" ss:Size="20"
ss:Color="#000000" ss:Bold="1"/>
</Style>
<Style ss:ID="m58993992">
<Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
<Borders>
<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
</Borders>
<Font ss:FontName="微软雅黑" x:CharSet="134" x:Family="Swiss" ss:Size="11"
ss:Color="#000000"/>
</Style>
<Style ss:ID="s78">
<Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
<Borders>
<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
</Borders>
<Font ss:FontName="微软雅黑" x:CharSet="134" x:Family="Swiss" ss:Color="#000000"/>
</Style>
<Style ss:ID="s79">
<Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
<Borders>
<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
</Borders>
<Font ss:FontName="微软雅黑" x:CharSet="134" x:Family="Swiss" ss:Color="#000000"/>
<NumberFormat ss:Format="General Date"/>
</Style>
</Styles>
<Worksheet ss:Name="Sheet1">
<?php $num=count($arr);?>
<Table ss:ExpandedColumnCount="7" ss:ExpandedRowCount="<?php echo $num+7;?>" x:FullColumns="1"
x:FullRows="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="13.5">
<Column ss:AutoFitWidth="0" ss:Width="115.5"/>
<Column ss:AutoFitWidth="0" ss:Width="111"/>
<Column ss:AutoFitWidth="0" ss:Width="111"/>
<Column ss:AutoFitWidth="0" ss:Width="100.5"/>
<Column ss:AutoFitWidth="0" ss:Width="62.25"/>
<Column ss:AutoFitWidth="0" ss:Width="100.5"/>
<Column ss:AutoFitWidth="0" ss:Width="203.25"/>
<Row ss:AutoFitHeight="0">
<Cell ss:MergeAcross="6" ss:MergeDown="1" ss:StyleID="m58993952"><Data
ss:Type="String">三亚澜海商旅服务有限公司&#10;地址海南省三亚市崖州区崖州湾科技城雅布伦产业园5号楼3楼310室&#10;开户银行:三亚惠民村镇银行&#10;银行账号2019 0379 3100 12&#10;</Data></Cell>
</Row>
<Row ss:AutoFitHeight="0" ss:Height="99.75"/>
<Row ss:AutoFitHeight="0" ss:Height="42">
<Cell ss:MergeAcross="6" ss:StyleID="m58993972"><Data ss:Type="String">桂林海纳国际旅行社有限公司火车票对账文件</Data></Cell>
</Row>
<Row ss:AutoFitHeight="0" ss:Height="16.5">
<Cell ss:StyleID="s78"><Data ss:Type="String">账单日期</Data></Cell>
<Cell ss:StyleID="s78"><Data ss:Type="String">账单类型</Data></Cell>
<Cell ss:StyleID="s78"><Data ss:Type="String">结算金额</Data></Cell>
<Cell ss:StyleID="s78"><Data ss:Type="String">订单号</Data></Cell>
<Cell ss:StyleID="s78"><Data ss:Type="String">外联</Data></Cell>
<Cell ss:StyleID="s78"><Data ss:Type="String">团号</Data></Cell>
<Cell ss:StyleID="s78"><Data ss:Type="String">乘客</Data></Cell>
</Row>
<?php for($i=$num-1;$i>=0;$i--){?>
<Row ss:AutoFitHeight="0" ss:Height="16.5">
<Cell ss:StyleID="s79"><Data ss:Type="String"><?php echo $arr[$i]["saveDay"];?></Data></Cell>
<Cell ss:StyleID="s78"><Data ss:Type="String"><?php echo $arr[$i]["type"];?></Data></Cell>
<Cell ss:StyleID="s78"><Data ss:Type="String"><?php echo $arr[$i]["price"];?></Data></Cell>
<Cell ss:StyleID="s78"><Data ss:Type="String"><?php echo $arr[$i]["mainOrderId"];?></Data></Cell>
<Cell ss:StyleID="s78"><Data ss:Type="String"><?php echo $arr[$i]["wl"];?></Data></Cell>
<Cell ss:StyleID="s78"><Data ss:Type="String"><?php echo $arr[$i]["griName"];?></Data></Cell>
<Cell ss:StyleID="s78"><Data ss:Type="String"><?php echo $arr[$i]["passengerName"];?></Data></Cell>
</Row>
<?php }?>
<Row ss:AutoFitHeight="0" ss:Height="36">
<Cell ss:MergeAcross="6" ss:StyleID="m58993992"><Data ss:Type="String"></Data></Cell>
</Row>
</Table>
<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
<PageSetup>
<Header x:Margin="0.3"/>
<Footer x:Margin="0.3"/>
<PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/>
</PageSetup>
<Unsynced/>
<Selected/>
<Panes>
<Pane>
<Number>3</Number>
<ActiveRow>4</ActiveRow>
<ActiveCol>4</ActiveCol>
</Pane>
</Panes>
<ProtectObjects>False</ProtectObjects>
<ProtectScenarios>False</ProtectScenarios>
</WorksheetOptions>
</Worksheet>
<Worksheet ss:Name="Sheet2">
<Table ss:ExpandedColumnCount="1" ss:ExpandedRowCount="1" x:FullColumns="1"
x:FullRows="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="13.5">
<Row ss:AutoFitHeight="0"/>
</Table>
<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
<PageSetup>
<Header x:Margin="0.3"/>
<Footer x:Margin="0.3"/>
<PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/>
</PageSetup>
<Unsynced/>
<ProtectObjects>False</ProtectObjects>
<ProtectScenarios>False</ProtectScenarios>
</WorksheetOptions>
</Worksheet>
<Worksheet ss:Name="Sheet3">
<Table ss:ExpandedColumnCount="1" ss:ExpandedRowCount="1" x:FullColumns="1"
x:FullRows="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="13.5">
<Row ss:AutoFitHeight="0"/>
</Table>
<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
<PageSetup>
<Header x:Margin="0.3"/>
<Footer x:Margin="0.3"/>
<PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/>
</PageSetup>
<Unsynced/>
<ProtectObjects>False</ProtectObjects>
<ProtectScenarios>False</ProtectScenarios>
</WorksheetOptions>
</Worksheet>
</Workbook>

@ -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>
@ -38,6 +38,13 @@
<?php else:?>
<p><?php echo $msg;?></p>
<?php endif;?>
<?php if ($channel == "lanhai"){ ?>
<p style="text-align:center;"><a href="lanhaiMsg?order=<?php echo $ordernumber?>&type=orderticket" style="padding:5px 15px;" class="btn btn-warning btn-sm" target="_blank">出票详细信息 <span class="glyphicon glyphicon-forward"></span></a>
&nbsp;&nbsp;&nbsp;&nbsp;
<a href="lanhaiMsg?order=<?php echo $ordernumber?>&type=returnticket" style="padding:5px 15px;" class="btn btn-warning btn-sm" target="_blank">退票详细信息 <span class="glyphicon glyphicon-forward"></span></a>
</p>
<?php } ?>
</div>
</div>
</div>

@ -19,6 +19,13 @@
<option value="train_ru">俄罗斯</option>
<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,133 @@
/*澜海返回*/
{
"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"
}
}
/*返回编译*/
{
"agentCode": "3649601564",
"contactMobile": "18877331805",
"currentTime": "2024-07-16 15:42:48",
"eOrderNumber": "EGW1561545",
"failCode": 0,
"mainOrderId": "HN1721115685991",
"orderPrice": "6.0",
"orderResultCode": 200,
"payTradeNumber": "1452204560486540561056048965",
"resultMsg": "\u51fa\u7968\u6210\u529f",
"ticketList": [{
"arriveTime": "2024-07-18 09:23",
"deliveryTicketId": 586043269,
"departTime": "2024-07-18 09:13",
"fromStationName": "\u6842\u6797",
"passengerList": [{
"carriageNo": "01",
"passengerId": 571060468,
"passengerName": "\u8d75\u9e4f",
"passengerType": 1,
"passportNumber": "450303197904120517",
"passportType": "1",
"passportTypeName": "\u8eab\u4efd\u8bc1",
"realTicketPrice": "6.0",
"seatName": "\u4e8c\u7b49\u5ea7",
"seatNo": "2A",
"ticketName": ""
}
],
"ticketCount": 1,
"ticketPrice": "6.0",
"toStationName": "\u6842\u6797\u5317",
"trainNumber": "G2910"
}
],
"ticketSuccessTime": "2024-07-16 15:42:48",
"userId": 428
}
/**账单列表*/
{
"success": true,
"code": "0",
"msg": "",
- "data": {
- "records": [
- {
"saveDay": "2024-07-31",
"type": "出票",
"mainOrderId": "HN1722438313448",
"dataId": null,
"ticket12306Id": "E1W1330191",
"trainNum": "K73",
"fromStation": "重庆北",
"toStation": "张家界西",
"fromTime": "2024-08-12 08:32",
"passengerName": "ABAJO LOPEZ LUCIA",
"price": 69,
"oldPrice": null,
"changeCost": null,
"handleTime": "2024-07-31 23:08:08",
"createTime": "2024-07-31 23:05:32"
},
- {
"saveDay": "2024-07-31",
"type": "出票",
"mainOrderId": "HN1722438313448",
"dataId": null,
"ticket12306Id": "E1W1330191",
"trainNum": "K73",
"fromStation": "重庆北",
"toStation": "张家界西",
"fromTime": "2024-08-12 08:32",
"passengerName": "ESCAMILLA QUILES MARIO",
"price": 69,
"oldPrice": null,
"changeCost": null,
"handleTime": "2024-07-31 23:08:08",
"createTime": "2024-07-31 23:05:32"
},
- {
"saveDay": "2024-08-01",
"type": "出票",
"mainOrderId": "HN1722441803173",
"dataId": null,
"ticket12306Id": "E2W4589927",
"trainNum": "D954",
"fromStation": "宜昌东",
"toStation": "上海",
"fromTime": "2024-08-13 14:06",
"passengerName": " PALOMA PALENCIA GRANDE",
"price": 676,
"oldPrice": null,
"changeCost": null,
"handleTime": "2024-08-01 00:06:37",
"createTime": "2024-08-01 00:03:56"
},
- {
"saveDay": "2024-08-01",
"type": "出票",
"mainOrderId": "HN1722441803173",
"dataId": null,
"ticket12306Id": "E2W4589927",
"trainNum": "D954",
"fromStation": "宜昌东",
"toStation": "上海",
"fromTime": "2024-08-13 14:06",
"passengerName": "FRANCISCO RAFAEL GARCIA TUDELA",
"price": 676,
"oldPrice": null,
"changeCost": null,
"handleTime": "2024-08-01 00:06:37",
"createTime": "2024-08-01 00:03:56"
}
],
"total": 4,
"size": 100,
"current": 1,
"searchCount": true,
"pages": 1
}
}

@ -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":["高级动卧上","高级动卧下"]}]

@ -12,8 +12,36 @@
</div>
<div class="infotoptitle">
<h1 class="whitefont"><?php echo !empty($information->ic_title)?$information->ic_title:'H1 title asiahighlights mobile first template'; ?></h1>
<?php if (!empty($meta_news_createdate)) {?>
<div class="authorupdate">By <strong><?php echo !empty($author)?$author:''; ?></strong>Updated <?php echo date("M. j, Y",strtotime($meta_news_createdate)); ?></div>
<?php
$OPI_CodeUrls = [
'zzy' => 'https://www.globalhighlights.com/aboutus/team/ruru-zhou',
'2' => 'https://www.globalhighlights.com/aboutus/team/ruru-zhou',
'HWT' => 'https://www.globalhighlights.com/aboutus/team/mike-he',
'CA' => 'https://www.globalhighlights.com/aboutus/team/carol-wang',
'SI' => 'https://www.globalhighlights.com/aboutus/team/simon-huang',
'TJQ' => 'https://www.globalhighlights.com/aboutus/team/cindy-tang',
'CLA' => 'https://www.globalhighlights.com/aboutus/team/claire-wang',
'Albee' => 'https://www.globalhighlights.com/aboutus/team/albee-ning',
'KM' => 'https://www.globalhighlights.com/aboutus/team/kimi-huang',
'RY' => 'https://www.globalhighlights.com/aboutus/team/rita-yu',
'QMY' => 'https://www.globalhighlights.com/aboutus/team/chris-quan',
'CY' => 'https://www.globalhighlights.com/aboutus/team/cynthia-li',
'Vicky' => 'https://www.globalhighlights.com/aboutus/team/vicky-leng',
'LXW' => 'https://www.globalhighlights.com/aboutus/team/carper-li',
'zzyGH' => 'https://www.globalhighlights.com/aboutus/team/ruru-zhou',
];
$OPI_Code = empty($OPI_Code) ? '' : $OPI_Code;
if (!empty($meta_news_createdate)) {?>
<div class="authorupdate">
Written by
<?php if (array_key_exists($OPI_Code, $OPI_CodeUrls)) {?>
<strong><a href="<?php echo $OPI_CodeUrls[$OPI_Code]; ?>" target="_blank"><?php echo $author; ?></a></strong>
<?php } else { ?>
<strong><?php echo $author; ?></strong>
<?php }?>
Updated <?php echo date("M. j, Y", strtotime($meta_news_createdate)); ?>
</div>
<?php } ?>
</div>
</div>

@ -0,0 +1,552 @@
<script src="https://www.recaptcha.net/recaptcha/enterprise.js?render=6Lf828MhAAAAANNetijCXKwW5ARyhcJ-b1Hhslja"></script>
<div class="tmbottom">
<h3 style="font-size: 24px; line-height: 22px;">Chiang Mai CAD Yi Peng Festival 2025</h3>
<form id='ticket_form' action="https://www.asiahighlights.com/orders/lantern_save" method="post" >
<p style="font-size: 22px;"><strong>Select Date:</strong></p>
<div class="selectHotl" style="margin-bottom: 20px;" id="ticket_date_november15th">
<div class="optionLable">
<input type="radio" value="2025-11-5" checked id="november15th" name="ticket_date">
<label for="november15th">
November 5th, 2025
</label>
</div>
<div class="optionLable" id="ticket_date_november16th">
<input type="radio" value="2025-11-6" id="november16th" name="ticket_date">
<label for="november16th">
November 6th, 2025
</label>
</div>
</div>
<p style="font-size: 22px;"><strong>Select a Ticket Type:</strong></p>
<div class="selectHotl" style="margin-bottom: 20px;">
<div class="optionLable" id="ticket_type_premium_khomloy">
<input type="radio" value="Premium+Transfer+Dinner" checked id="premium_khomloy" data-price="179" name="ticket_type">
<label for="premium_khomloy" style="font-size:18px;">
Premium+Transfer+Dinner
<div class="selectionMemo">
US$179 (6400THB)
</div>
</label>
</div>
<div class="optionLable" id="ticket_type_vip_khomloy">
<input type="radio" value="VIP+Transfer+Dinner" id="vip_khomloy" data-price="169" name="ticket_type">
<label for="vip_khomloy" style="font-size:18px;">
VIP+Transfer+Dinner
<div class="selectionMemo">
US$169 (5900THB)
</div>
</label>
</div>
<div class="optionLable" id="ticket_type_standard_khomloy">
<input type="radio" value="Standard+Transfer+Dinner" id="standard_khomloy" data-price="129" name="ticket_type">
<label for="standard_khomloy" style="font-size:18px;">
Standard+Transfer+Dinner
<div class="selectionMemo">
US$129 (4600THB)
</div>
</label>
</div>
</div>
<div id="ticket_type_errmsg" style="display: none">
<div class="requiredArea" style="margin-top:-10px;">Please select at least one option.</div>
</div>
<p style="font-size: 22px;"><strong>Select Ticket Quantity</strong></p>
<div class="peopleSelect" style="width: auto;">
<span class="formMemo">
Adults and older children (8+ years old)
</span>
<div class="numberBtn">
<input class="minaddBtn reduceadult" id='minusButton' type="button" value="-">
<input class="number" id="adultNumberValue" readonly="readonly" type="text" value="1"
name="adult" style="width: 50px;
height: 22px;
top: -5px;
position: relative;
text-align: center;
font-size: 20px;">
<input class="minaddBtn addadult" id='plusButton' type="button" value="+">
</div>
</div>
<div class="payonline_price">Total price: <strong id="totalPriceText">$129</strong></div>
<p style="margin-top: 50px;"><strong>Please provide correct personal info. Double check.</strong></p>
<input class="FullName" id="ticket_realname" name="fullname"
placeholder="Your name * (exactly per passport)" required="" type="text" value="" />
<div id="ticket_realname_errmsg" style="display: none">
<div class="requiredArea" style="margin-top:-10px;">Please enter your name.</div>
</div>
<input class="EmailAddress" id="ticket_email" name="email" placeholder="Email *" required="" type="text"
value="" />
<div id="ticket_email_errmsg" style="display: none">
<div class="requiredArea" style="margin-top:-10px;">Please enter your email.</div>
</div>
<div id="ticket_email_verify_errmsg" style="display: none">
<div class="requiredArea" style="margin-top:-10px;">Please verify your email.</div>
</div>
<select name="country_code" class="country_code">
<option style="font-weight: 600;" value="United States +1">United States&nbsp; &nbsp;+1</option>
<option style="font-weight: 600;" value="United Kingdom +44">United Kingdom&nbsp; &nbsp;+44</option>
<option style="font-weight: 600;" value="Australia +61">Australia&nbsp; &nbsp;+61</option>
<option style="font-weight: 600;" value="Canada +1">Canada&nbsp; &nbsp;+1</option>
<option style="font-weight: 600;" value="France +33">France&nbsp; &nbsp;+33</option>
<option style="font-weight: 600;" value="Germany +49">Germany&nbsp; &nbsp;+49</option>
<option style="font-weight: 600; " value="Italy +39">Italy&nbsp; &nbsp;+39</option>
<option style="font-weight: 600; " value="Mexico +52">Mexico&nbsp; &nbsp;+52</option>
<option style="font-weight: 600; " value="Netherlands +31">Netherlands&nbsp; &nbsp;+31</option>
<option style="font-weight: 600; " value="Singapore +65">Singapore&nbsp; &nbsp;+65</option>
<option value="Afghanistan +93">Afghanistan &nbsp; &nbsp;+93</option>
<option value="Albania +355">Albania &nbsp; &nbsp;+355</option>
<option value="Algeria +213">Algeria&nbsp; &nbsp;+213</option>
<option value="American Samoa +1">American Samoa&nbsp; &nbsp;+1684</option>
<option value="Andorra +376">Andorra&nbsp; &nbsp;+376</option>
<option value="Angola +244">Angola&nbsp; &nbsp;+244</option>
<option value="Anguilla +1">Anguilla&nbsp; &nbsp;+1264</option>
<option value="Australia +61">Australia&nbsp; &nbsp;+61</option>
<option value="Antigua and Barbuda +1">Antigua and Barbuda&nbsp; &nbsp;+1268</option>
<option value="Argentina +54">Argentina&nbsp; &nbsp;+54</option>
<option value="Armenia +374">Armenia &nbsp; &nbsp;+374</option>
<option value="Aruba +297">Aruba&nbsp; &nbsp;+297</option>
<option value="Ascension Island +247">Ascension Island&nbsp; &nbsp;+247</option>
<option value="Austria +43">Austria&nbsp; &nbsp;+43</option>
<option value="Azerbaijan +994">Azerbaijan&nbsp; &nbsp;+994</option>
<option value="Bahamas +1">Bahamas&nbsp; &nbsp;+1242</option>
<option value="Bahrain +973">Bahrain&nbsp; &nbsp;+973</option>
<option value="Bangladesh +880">Bangladesh&nbsp; &nbsp;+880</option>
<option value="Barbados +1">Barbados&nbsp; &nbsp;+1246</option>
<option value="Belarus +375">Belarus&nbsp; &nbsp;+375</option>
<option value="Belgium +32">Belgium&nbsp; &nbsp;+32</option>
<option value="Belize +501">Belize&nbsp; &nbsp;+501</option>
<option value="Benin +229">Benin&nbsp; &nbsp;+229</option>
<option value="Bermuda +1">Bermuda&nbsp; &nbsp;+1441</option>
<option value="Bhutan +975">Bhutan&nbsp; &nbsp;+975</option>
<option value="Bolivia +591">Bolivia&nbsp; &nbsp;+591</option>
<option value="Bosnia and Herzegovina +387">Bosnia and Herzegovina&nbsp; &nbsp;+387</option>
<option value="Botswana +267">Botswana&nbsp; &nbsp;+267</option>
<option value="Brazil +55">Brazil&nbsp; &nbsp;+55</option>
<option value="British Indian Ocean Territory +246">British Indian Ocean Territory&nbsp; &nbsp;+246</option>
<option value="British Virgin Islands +1">British Virgin Islands&nbsp; &nbsp;+1284</option>
<option value="Brunei +673">Brunei&nbsp; &nbsp;+673</option>
<option value="Bulgaria +359">Bulgaria &nbsp; &nbsp;+359</option>
<option value="Burkina Faso +226">Burkina Faso&nbsp; &nbsp;+226</option>
<option value="Burundi +257">Burundi&nbsp; &nbsp;+257</option>
<option value="Cambodia +855">Cambodia&nbsp; &nbsp;+855</option>
<option value="Cameroon +237">Cameroon&nbsp; &nbsp;+237</option>
<option value="Canada +1">Canada&nbsp; &nbsp;+1</option>
<option value="Cape Verde +238">Cape Verde&nbsp; &nbsp;+238</option>
<option value="Caribbean Netherlands +599">Caribbean Netherlands&nbsp; &nbsp;+599</option>
<option value="Cayman Islands +1">Cayman Islands&nbsp; &nbsp;+1345</option>
<option value="Central African Republic +236">Central African Republic&nbsp; &nbsp;+236</option>
<option value="Chad +235">Chad&nbsp; &nbsp;+235</option>
<option value="Chile +56">Chile&nbsp; &nbsp;+56</option>
<option value="China +86">China&nbsp; &nbsp;+86</option>
<option value="Christmas Island +61">Christmas Island&nbsp; &nbsp;+6189164</option>
<option value="Cocos Islands +61">Cocos Islands&nbsp; &nbsp;+6189162</option>
<option value="Colombia +57">Colombia&nbsp; &nbsp;+57</option>
<option value="Comoros +269">Comoros&nbsp; &nbsp;+269</option>
<option value="Congo +243">Congo (DRC)&nbsp; &nbsp;+243</option>
<option value="Congo +242">Congo (Republic)&nbsp; &nbsp;+242</option>
<option value="Cook Islands +682">Cook Islands&nbsp; &nbsp;+682</option>
<option value="Costa Rica +506">Costa Rica&nbsp; &nbsp;+506</option>
<option value="Côte d'Ivoire +225">Côte d'Ivoire&nbsp; &nbsp;+225</option>
<option value="Croatia +385">Croatia&nbsp; &nbsp;+385</option>
<option value="Cuba +53">Cuba&nbsp; &nbsp;+53</option>
<option value="Curaçao +599">Curaçao&nbsp; &nbsp;+599</option>
<option value="Cyprus +357">Cyprus&nbsp; &nbsp;+357</option>
<option value="Czech Republic +420">Czech Republic&nbsp; &nbsp;+420</option>
<option value="Denmark +45">Denmark&nbsp; &nbsp;+45</option>
<option value="Djibouti +253">Djibouti&nbsp; &nbsp;+253</option>
<option value="Dominica +1">Dominica&nbsp; &nbsp;+1767</option>
<option value="Dominican Republic +1">Dominican Republic&nbsp; &nbsp;+1809</option>
<option value="Ecuador +593">Ecuador&nbsp; &nbsp;+593</option>
<option value="Egypt +20">Egypt&nbsp; &nbsp;+20</option>
<option value="El Salvador +503">El Salvador&nbsp; &nbsp;+503</option>
<option value="Equatorial Guinea +240">Equatorial Guinea&nbsp; &nbsp;+240</option>
<option value="Eritrea +291">Eritrea&nbsp; &nbsp;+291</option>
<option value="Estonia +372">Estonia&nbsp; &nbsp;+372</option>
<option value="Eswatini +268">Eswatini&nbsp; &nbsp;+268</option>
<option value="Ethiopia +251">Ethiopia&nbsp; &nbsp;+251</option>
<option value="Falkland Islands +500">Falkland Islands&nbsp; &nbsp;+500</option>
<option value="Faroe Islands +298">Faroe Islands&nbsp; &nbsp;+298</option>
<option value="Fiji +679">Fiji&nbsp; &nbsp;+679</option>
<option value="Finland +358">Finland&nbsp; &nbsp;+358</option>
<option value="France +33">France&nbsp; &nbsp;+33</option>
<option value="French Guiana +594">French Guiana&nbsp; &nbsp;+594</option>
<option value="French Polynesia +689">French Polynesia&nbsp; &nbsp;+689</option>
<option value="Gabon +241">Gabon&nbsp; &nbsp;+241</option>
<option value="Gambia +220">Gambia&nbsp; &nbsp;+220</option>
<option value="Georgia +995">Georgia&nbsp; &nbsp;+995</option>
<option value="Germany +49">Germany&nbsp; &nbsp;+49</option>
<option value="Ghana +233">Ghana&nbsp; &nbsp;+233</option>
<option value="Gibraltar +350">Gibraltar&nbsp; &nbsp;+350</option>
<option value="Greece +30">Greece&nbsp; &nbsp;+30</option>
<option value="Greenland +299">Greenland&nbsp; &nbsp;+299</option>
<option value="Grenada +1">Grenada&nbsp; &nbsp;+1473</option>
<option value="Guadeloupe +590">Guadeloupe&nbsp; &nbsp;+590</option>
<option value="Guam +1">Guam&nbsp; &nbsp;+1671</option>
<option value="Guatemala +502">Guatemala&nbsp; &nbsp;+502</option>
<option value="Guernsey +44">Guernsey&nbsp; &nbsp;+441481</option>
<option value="Guinea +224">Guinea&nbsp; &nbsp;+224</option>
<option value="Guinea-Bissau +245">Guinea-Bissau&nbsp; &nbsp;+245</option>
<option value="Guyana +592">Guyana&nbsp; &nbsp;+592</option>
<option value="Haiti +509">Haiti&nbsp; &nbsp;+509</option>
<option value="Honduras +504">Honduras&nbsp; &nbsp;+504</option>
<option value="Hong Kong +852">Hong Kong&nbsp; &nbsp;+852</option>
<option value="Hungary +36">Hungary&nbsp; &nbsp;+36</option>
<option value="Iceland +354">Iceland&nbsp; &nbsp;+354</option>
<option value="India +91">India&nbsp; &nbsp;+91</option>
<option value="Indonesia +62">Indonesia&nbsp; &nbsp;+62</option>
<option value="Iran +98">Iran&nbsp; &nbsp;+98</option>
<option value="Iraq +964">Iraq&nbsp; &nbsp;+964</option>
<option value="Ireland +353">Ireland&nbsp; &nbsp;+353</option>
<option value="Isle of Man +44">Isle of Man&nbsp; &nbsp;+44</option>
<option value="Israel +972">Israel&nbsp; &nbsp;+972</option>
<option value="Italy +39">Italy&nbsp; &nbsp;+39</option>
<option value="Jamaica +1">Jamaica&nbsp; &nbsp;+1876</option>
<option value="Japan +81">Japan&nbsp; &nbsp;+81</option>
<option value="Jersey +44">Jersey&nbsp; &nbsp;+44</option>
<option value="Jordan +962">Jordan&nbsp; &nbsp;+962</option>
<option value="Kazakhstan +7">Kazakhstan &nbsp; &nbsp;+7</option>
<option value="Kenya +254">Kenya&nbsp; &nbsp;+254</option>
<option value="Kiribati +686">Kiribati&nbsp; &nbsp;+686</option>
<option value="Kosovo +383">Kosovo&nbsp; &nbsp;+383</option>
<option value="Kuwait +965">Kuwait&nbsp; &nbsp;+965</option>
<option value="Kyrgyzstan +996">Kyrgyzstan &nbsp; &nbsp;+996</option>
<option value="Laos +856">Laos&nbsp; &nbsp;+856</option>
<option value="Latvia +371">Latvia &nbsp; &nbsp;+371</option>
<option value="Lebanon +961">Lebanon&nbsp; &nbsp;+961</option>
<option value="Lesotho +266">Lesotho&nbsp; &nbsp;+266</option>
<option value="Liberia +231">Liberia&nbsp; &nbsp;+231</option>
<option value="Libya +218">Libya&nbsp; &nbsp;+218</option>
<option value="Liechtenstein +423">Liechtenstein&nbsp; &nbsp;+423</option>
<option value="Lithuania +370">Lithuania&nbsp; &nbsp;+370</option>
<option value="Luxembourg +352">Luxembourg&nbsp; &nbsp;+352</option>
<option value="Macau +853">Macau&nbsp; &nbsp;+853</option>
<option value="Macedonia +389">Macedonia&nbsp; &nbsp;+389</option>
<option value="Madagascar +261">Madagascar&nbsp; &nbsp;+261</option>
<option value="Malawi +265">Malawi&nbsp; &nbsp;+265</option>
<option value="Malaysia +60">Malaysia&nbsp; &nbsp;+60</option>
<option value="Maldives +960">Maldives&nbsp; &nbsp;+960</option>
<option value="Mali +223">Mali&nbsp; &nbsp;+223</option>
<option value="Malta +356">Malta&nbsp; &nbsp;+356</option>
<option value="Marshall +692">Marshall Islands&nbsp; &nbsp;+692</option>
<option value="Martinique +596">Martinique&nbsp; &nbsp;+596</option>
<option value="Mauritania +222">Mauritania&nbsp; &nbsp;+222</option>
<option value="Mauritius +230">Mauritius&nbsp; &nbsp;+230</option>
<option value="Mayotte +262">Mayotte&nbsp; &nbsp;+262</option>
<option value="Micronesia +691">Micronesia&nbsp; &nbsp;+691</option>
<option value="Moldova +373">Moldova&nbsp; &nbsp;+373</option>
<option value="Monaco +377">Monaco&nbsp; &nbsp;+377</option>
<option value="Mongolia +976">Mongolia&nbsp; &nbsp;+976</option>
<option value="Montenegro +382">Montenegro&nbsp; &nbsp;+382</option>
<option value="Montserrat +1">Montserrat&nbsp; &nbsp;+1664</option>
<option value="Morocco +212">Morocco&nbsp; &nbsp;+212</option>
<option value="Mozambique +258">Mozambique&nbsp; &nbsp;+258</option>
<option value="Myanmar +95">Myanmar &nbsp; &nbsp;+95</option>
<option value="Namibia +264">Namibia&nbsp; &nbsp;+264</option>
<option value="Nauru +674">Nauru&nbsp; &nbsp;+674</option>
<option value="Nepal +977">Nepal&nbsp; &nbsp;+977</option>
<option value="New Caledonia +687">New Caledonia&nbsp; &nbsp;+687</option>
<option value="New Zealand +64">New Zealand&nbsp; &nbsp;+64</option>
<option value="Nicaragua +505">Nicaragua&nbsp; &nbsp;+505</option>
<option value="Niger +227">Niger&nbsp; &nbsp;+227</option>
<option value="Nigeria +234">Nigeria&nbsp; &nbsp;+234</option>
<option value="Niue +683">Niue&nbsp; &nbsp;+683</option>
<option value="Norfolk Island +672">Norfolk Island&nbsp; &nbsp;+6723</option>
<option value="North Korea +850">North Korea&nbsp; &nbsp;+850</option>
<option value="Northern Mariana Islands +1">Northern Mariana Islands&nbsp; &nbsp;+1670</option>
<option value="Norway +47">Norway&nbsp; &nbsp;+47</option>
<option value="Oman +968">Oman&nbsp; &nbsp;+968</option>
<option value="Pakistan +92">Pakistan&nbsp; &nbsp;+92</option>
<option value="Palau +680">Palau&nbsp; &nbsp;+680</option>
<option value="Palestine +970">Palestine &nbsp; &nbsp;+970</option>
<option value="Panama +507">Panama &nbsp; &nbsp;+507</option>
<option value="Papua New Guinea 675">Papua New Guinea&nbsp; &nbsp;+675</option>
<option value="Paraguay +595">Paraguay&nbsp; &nbsp;+595</option>
<option value="Peru +51">Peru &nbsp; &nbsp;+51</option>
<option value="Philippines +63">Philippines&nbsp; &nbsp;+63</option>
<option value="Poland +48">Poland&nbsp; &nbsp;+48</option>
<option value="Portugal +351">Portugal&nbsp; &nbsp;+351</option>
<option value="Puerto Rico +1">Puerto Rico&nbsp; &nbsp;+1787</option>
<option value="Qatar +974">Qatar&nbsp; &nbsp;+974</option>
<option value="Réunion +262">Réunion&nbsp; &nbsp;+262</option>
<option value="Romania +40">Romania&nbsp; &nbsp;+40</option>
<option value="Russia +7">Russia&nbsp; &nbsp;+7</option>
<option value="Rwanda +250">Rwanda&nbsp; &nbsp;+250</option>
<option value="Saint Barthélemy +590">Saint Barthélemy&nbsp; &nbsp;+590</option>
<option value="Saint Helena +290">Saint Helena&nbsp; &nbsp;+290</option>
<option value="Saint Kitts and Nevis +1">Saint Kitts and Nevis&nbsp; &nbsp;+1869</option>
<option value="Saint Lucia +1">Saint Lucia&nbsp; &nbsp;+1758</option>
<option value="Saint Martin +590">Saint Martin&nbsp; &nbsp;+590</option>
<option value="Saint Pierre and Miquelon +508">Saint Pierre and Miquelon&nbsp; &nbsp;+508</option>
<option value="Saint Vincent and the Grenadines +1">Saint Vincent and the Grenadines&nbsp; &nbsp;+1784</option>
<option value="Samoa +685">Samoa&nbsp; &nbsp;+685</option>
<option value="San Marino +378">San Marino&nbsp; &nbsp;+378</option>
<option value="São Tomé and Príncipe +239">São Tomé and Príncipe&nbsp; &nbsp;+239</option>
<option value="Saudi Arabia +966">Saudi Arabia &nbsp; &nbsp;+966</option>
<option value="Senegal +221">Senegal &nbsp; &nbsp;+221</option>
<option value="Serbia +381">Serbia&nbsp; &nbsp;+381</option>
<option value="Seychelles +248">Seychelles&nbsp; &nbsp;+248</option>
<option value="Sierra Leone +232">Sierra Leone&nbsp; &nbsp;+232</option>
<option value="Sint Maarten +1">Sint Maarten&nbsp; &nbsp;+1721</option>
<option value="Slovakia +421">Slovakia&nbsp; &nbsp;+421</option>
<option value="Slovenia +386">Slovenia&nbsp; &nbsp;+386</option>
<option value="Solomon Islands +677">Solomon Islands&nbsp; &nbsp;+677</option>
<option value="Somalia +252">Somalia&nbsp; &nbsp;+252</option>
<option value="South Africa +27">South Africa&nbsp; &nbsp;+27</option>
<option value="South Korea +82">South Korea&nbsp; &nbsp;+82</option>
<option value="South Sudan +211">South Sudan&nbsp; &nbsp;+211</option>
<option value="Spain +34">Spain&nbsp; &nbsp;+34</option>
<option value="Sri Lanka +94">Sri Lanka &nbsp; &nbsp;+94</option>
<option value="Sudan +249">Sudan&nbsp; &nbsp;+249</option>
<option value="Suriname">Suriname&nbsp; &nbsp;+597</option>
<option value="Svalbard and Jan Mayen +47">Svalbard and Jan Mayen&nbsp; &nbsp;+47</option>
<option value="Sweden +46">Sweden&nbsp; &nbsp;+46</option>
<option value="Switzerland +41">Switzerland&nbsp; &nbsp;+41</option>
<option value="Syria +963">Syria &nbsp; &nbsp;+963</option>
<option value="Taiwan +886">Taiwan&nbsp; &nbsp;+886</option>
<option value="Tajikistan +992">Tajikistan&nbsp; &nbsp;+992</option>
<option value="Tanzania +255">Tanzania&nbsp; &nbsp;+255</option>
<option value="Thailand +66">Thailand&nbsp; &nbsp;+66</option>
<option value="Timor-Leste +670">Timor-Leste&nbsp; &nbsp;+670</option>
<option value="Togo +228">Togo&nbsp; &nbsp;+228</option>
<option value="Tokelau +690">Tokelau&nbsp; &nbsp;+690</option>
<option value="Tonga +676">Tonga&nbsp; &nbsp;+676</option>
<option value="Trinidad and Tobago +1">Trinidad and Tobago&nbsp; &nbsp;+1868</option>
<option value="Tunisia +216">Tunisia&nbsp; &nbsp;+216</option>
<option value="Turkey +90">Turkey&nbsp; &nbsp;+90</option>
<option value="Turkmenistan +993">Turkmenistan&nbsp; &nbsp;+993</option>
<option value="Turks and Caicos Islands +1">Turks and Caicos Islands&nbsp; &nbsp;+1649</option>
<option value="Tuvalu +688">Tuvalu&nbsp; &nbsp;+688</option>
<option value="U.S. Virgin Islands +1">U.S. Virgin Islands&nbsp; &nbsp;+1340</option>
<option value="Uganda +256">Uganda&nbsp; &nbsp;+256</option>
<option value="Ukraine +380">Ukraine&nbsp; &nbsp;+380</option>
<option value="United Arab Emirates +971">United Arab Emirates &nbsp; &nbsp;+971</option>
<option value="United Kingdom +44">United Kingdom&nbsp; &nbsp;+44</option>
<option value="United States +1">United States&nbsp; &nbsp;+1</option>
<option value="Uruguay +598">Uruguay&nbsp; &nbsp;+598</option>
<option value="Uzbekistan +998">Uzbekistan&nbsp; &nbsp;+998</option>
<option value="Vanuatu +678">Vanuatu&nbsp; &nbsp;+678</option>
<option value="Vatican City +39">Vatican City&nbsp; &nbsp;+379</option>
<option value="Venezuela +58">Venezuela&nbsp; &nbsp;+58</option>
<option value="Vietnam +84">Vietnam&nbsp; &nbsp;+84</option>
<option value="Wallis and Futuna +681">Wallis and Futuna&nbsp; &nbsp;+681</option>
<option value="Western Sahara +212">Western Sahara &nbsp; &nbsp;+21228</option>
<option value="Yemen +967">Yemen&nbsp; &nbsp;+967</option>
<option value="Zambia +260">Zambia&nbsp; &nbsp;+260</option>
<option value="Zimbabwe +263">Zimbabwe&nbsp; &nbsp;+263</option>
<option value="Åland Islands +385">Åland Islands&nbsp; &nbsp;+35818</option>
</select>
<input class="Inquiryphone" id="ticket_PhoneNo" name="PhoneNo"
placeholder="Phone number *" type="tel" value="" />
<div id="ticket_contact_errmsg" style="display: none">
<div class="requiredArea" style="margin-top:-10px;">Please enter your phone number.</div>
</div>
<textarea name="other_travelers_names" placeholder="If booking two or more tickets,please fill in other traveler name(s) here:(per passport, e.g.Smith Sarah Jean)."></textarea>
<input name="total_price" id="totalPriceHidden" type="hidden" value="10000" />
<input name="product_code" id="cli_no" type="hidden" value="YDFW-AH"/>
<input name="itinerary" type="hidden" value="<?php echo $information->ic_title; ?>" />
<button class="sendButton" id="submit_ticket_button" name="submit_ticket_form"
type="button">Proceed to Payment</button>
<p style=" text-align: center;
font-style: italic;
margin-top: -15px;
line-height: 20px;"><strong>Once we receive your payment, our travel advisor will contact you within 24 hours and send you your e-ticket.</strong></p>
</form>
</div>
<script>
function calcTotalPrice(ticketPrice, adultNumber) {
var totalPrice = ticketPrice * adultNumber;
if (adultNumber >= 10) {
totalPrice = totalPrice * 0.95;
}
totalPrice = totalPrice.toFixed(2);
totalPriceHidden.value = totalPrice;
totalPriceText.innerText = '$' + totalPrice;
}
var adultNumberNode = document.getElementById("adultNumberValue");
var ticketDateList = document.querySelectorAll("input[name='ticket_date']");
var ticketTypeList = document.querySelectorAll("input[name='ticket_type']");
var ticket_type_premium_khomloy_div = document.getElementById("ticket_type_premium_khomloy");
var ticket_type_vip_khomloy_div = document.getElementById("ticket_type_vip_khomloy");
var ticket_type_standard_khomloy_div = document.getElementById("ticket_type_standard_khomloy");
var ticket_type_premium_heritage_div = document.getElementById("ticket_type_premium_heritage");
var ticket_type_vip_heritage_div = document.getElementById("ticket_type_vip_heritage");
var premium_khomloy_radio = document.getElementById("premium_khomloy");
var premium_heritage_radio = document.getElementById("premium_heritage");
var ticket_date_november15th = document.getElementById("ticket_date_november15th");
var ticket_date_november16th = document.getElementById("ticket_date_november16th");
var venueList = document.querySelectorAll("input[name='Venue']");
var totalPriceText = document.getElementById("totalPriceText");
var totalPriceHidden = document.getElementById("totalPriceHidden");
var adultNumberValue = parseInt(adultNumberNode.value);
var currentTicketPrice = 10000;
for (var i = 0; i < venueList.length; i++) {
var venueNode = venueList[i];
venueNode.addEventListener('click', function (event) {
var currentTarget = event.currentTarget;
if (currentTarget.id === 'Khomloy') {
setKhomloyTicket();
}
if (currentTarget.id === 'Heritage') {
setHeritageTicket();
}
});
}
for (var i = 0; i < ticketTypeList.length; i++) {
var ticketTypeNode = ticketTypeList[i];
var dataPrice = parseInt(ticketTypeNode.getAttribute('data-price'));
if (ticketTypeNode.checked) {
currentTicketPrice = dataPrice;
calcTotalPrice(currentTicketPrice, adultNumberValue);
}
ticketTypeNode.addEventListener('click', function (event) {
var currentTarget = event.currentTarget;
currentTicketPrice = parseInt(currentTarget.getAttribute('data-price'));
adultNumberValue = parseInt(adultNumberNode.value);
calcTotalPrice(currentTicketPrice, adultNumberValue);
});
}
function setKhomloyTicket() {
ticket_type_premium_khomloy_div.style.display = '';
ticket_type_vip_khomloy_div.style.display = '';
ticket_type_standard_khomloy_div.style.display = '';
ticket_type_premium_heritage_div.style.display = 'none';
ticket_type_vip_heritage_div.style.display = 'none';
ticket_date_november15th.style.display = '';
ticket_date_november16th.style.display = '';
premium_khomloy_radio.checked = true;
currentTicketPrice = parseInt(premium_khomloy_radio.getAttribute('data-price'));
adultNumberValue = parseInt(adultNumberNode.value);
calcTotalPrice(currentTicketPrice, adultNumberValue);
}
function setHeritageTicket() {
ticket_type_premium_khomloy_div.style.display = 'none';
ticket_type_vip_khomloy_div.style.display = 'none';
ticket_type_standard_khomloy_div.style.display = 'none';
ticket_type_premium_heritage_div.style.display = '';
ticket_type_vip_heritage_div.style.display = '';
ticket_date_november15th.style.display = '';
ticket_date_november16th.style.display = 'none';
premium_heritage_radio.checked = true;
currentTicketPrice = parseInt(premium_heritage_radio.getAttribute('data-price'));
adultNumberValue = parseInt(adultNumberNode.value);
calcTotalPrice(currentTicketPrice, adultNumberValue);
}
var plusButton = document.getElementById("plusButton");
var minusButton = document.getElementById("minusButton");
plusButton.addEventListener('click', function (event) {
adultNumberValue = parseInt(adultNumberNode.value) + 1;
adultNumberNode.value = adultNumberValue;
calcTotalPrice(currentTicketPrice, adultNumberValue);
});
minusButton.addEventListener('click', function (event) {
var beforeValue = parseInt(adultNumberNode.value);
if (beforeValue > 1) {
adultNumberValue = beforeValue - 1;
adultNumberNode.value = adultNumberValue;
calcTotalPrice(currentTicketPrice, adultNumberValue);
}
});
</script>
<script>
var submit_ticket_button = document.getElementById("submit_ticket_button");
var ticket_form = document.getElementById("ticket_form");
submit_ticket_button.addEventListener('click', function (event) {
var validateResult = validateTicketForm();
if (validateResult) {
if (typeof (grecaptcha) === "undefined") {
console.warn('grecaptcha is disabled.');
ticket_form.submit();
} else {
grecaptcha.enterprise.ready(async () => {
const token = await grecaptcha.enterprise.execute('6Lf828MhAAAAANNetijCXKwW5ARyhcJ-b1Hhslja', { action: 'ADD_TO_CART' });
var el = document.createElement("input");
el.type = "hidden";
el.name = "__grecaptcha_token__";
el.value = token;
ticket_form.appendChild(el);
ticket_form.submit();
submit_ticket_button.innerText = "Submitted successfully";
});
}
}
});
function validateTicketForm() {
var result = true;
var realnameVal = document.getElementById("ticket_realname").value;
var emailVal = document.getElementById("ticket_email").value;
var contactVal = document.getElementById("ticket_PhoneNo").value;
var realnameErrEl = document.getElementById("ticket_realname_errmsg");
var emailErrEl = document.getElementById("ticket_email_errmsg");
var emailVerifyErrEl = document.getElementById("ticket_email_verify_errmsg");
var contactErrEl = document.getElementById("ticket_contact_errmsg");
var ticketTypeErrEl = document.getElementById("ticket_type_errmsg");
realnameErrEl.style.display = 'none';
emailErrEl.style.display = 'none';
emailVerifyErrEl.style.display = 'none';
contactErrEl.style.display = 'none';
ticketTypeErrEl.style.display = 'none';
var selectedTicketType = false;
for (var i = 0; i < ticketTypeList.length; i++) {
var ticketTypeNode = ticketTypeList[i];
if (ticketTypeNode.checked) {
selectedTicketType = true;
}
}
if (!selectedTicketType) {
ticketTypeErrEl.style.display = '';
result = false;
}
if (realnameVal === '') {
realnameErrEl.style.display = '';
result = false;
}
if (emailVal === '') {
emailErrEl.style.display = '';
result = false;
} else {
var emailPattern = /^[\w\-\.]+@[\w\-\.]+(\.\w+)+$/;
if (!emailPattern.test(emailVal)) {
emailVerifyErrEl.style.display = '';
result = false;
}
}
if (contactVal === '') {
contactErrEl.style.display = '';
result = false;
}
return result;
}
</script>

@ -4,8 +4,8 @@
<form id='ticket_form' action="https://www.asiahighlights.com/orders/lantern_save" method="post" >
<p style="font-size: 22px;"><strong>Select Date:</strong></p>
<div class="selectHotl" style="margin-bottom: 20px;" id="ticket_date_november15th">
<div class="optionLable">
<div class="selectHotl" style="margin-bottom: 20px;" >
<div class="optionLable" id="ticket_date_november15th">
<input type="radio" value="2024-11-15" checked id="november15th" name="ticket_date">
<label for="november15th">
November 15th, 2024
@ -23,34 +23,37 @@
<p style="font-size: 22px;"><strong>Select a Ticket Type:</strong></p>
<div class="selectHotl" style="margin-bottom: 20px;">
<div class="optionLable" id="ticket_type_premium_khomloy">
<input type="radio" value="Premium+Transfer+Dinner" checked id="premium_khomloy" data-price="179" name="ticket_type">
<input type="radio" value="Premium+Transfer+Dinner" id="premium_khomloy" data-price="199" name="ticket_type" disabled ="Premium+Transfer+Dinner">
<label for="premium_khomloy" style="font-size:18px;">
Premium+Transfer+Dinner
<div class="selectionMemo">
US$179 (6400THB)
US$199
</div>
<div id='premium_khomloy_left' class="dynamic-label" style="font-size: 18px;">Sold out</div>
</label>
</div>
<div class="optionLable" id="ticket_type_vip_khomloy">
<input type="radio" value="VIP+Transfer+Dinner" id="vip_khomloy" data-price="169" name="ticket_type">
<input type="radio" value="VIP+Transfer+Dinner" checked id="vip_khomloy" data-price="179" name="ticket_type">
<label for="vip_khomloy" style="font-size:18px;">
VIP+Transfer+Dinner
<div class="selectionMemo">
US$169 (5900THB)
US$179
</div>
<div id='vip_khomloy_left' class="dynamic-label" style="font-size: 18px;">65 left</div>
</label>
</div>
<div class="optionLable" id="ticket_type_standard_khomloy">
<input type="radio" disabled value="Standard+Transfer+Dinner" id="standard_khomloy" data-price="129" name="ticket_type">
<input type="radio" id="standard_khomloy" data-price="139" name="ticket_type" value="Standard+Transfer+Dinner">
<label for="standard_khomloy" style="font-size:18px;">
Standard+Transfer+Dinner
<div class="selectionMemo">
Sold out
US$139
</div>
<div id='standard_khomloy_left' class="dynamic-label" style="font-size: 18px;">57 left</div>
</label>
</div>
<div class="optionLable" id="ticket_type_premium_heritage" style="display: none;">
<!-- <div class="optionLable" id="ticket_type_premium_heritage" style="display: none;">
<input type="radio" value="Premium service+Exclusive Hotel Transfer+Dinner" id="premium_heritage" data-price="159" name="ticket_type">
<label for="premium_heritage" style="font-size:18px;">
Premium service+<strong>Exclusive Hotel Transfer</strong>+Dinner
@ -65,10 +68,10 @@
<label for="vip_heritage" style="font-size:18px;">
VIP Service+Shuttle Transfer+Dinner
<div class="selectionMemo">
US$109 (3900THB)
US$109
</div>
</label>
</div>
</div> -->
</div>
<div id="ticket_type_errmsg" style="display: none">
@ -410,6 +413,56 @@
var ticket_date_november15th = document.getElementById("ticket_date_november15th");
var ticket_date_november16th = document.getElementById("ticket_date_november16th");
document.addEventListener('DOMContentLoaded', function () {
var premium_khomloy_left = document.getElementById("premium_khomloy_left");
var vip_khomloy_left = document.getElementById("vip_khomloy_left");
var standard_khomloy_left = document.getElementById("standard_khomloy_left");
var premium_khomloy_input = document.getElementById("premium_khomloy");
var vip_khomloy_input = document.getElementById("vip_khomloy");
var standard_khomloy_input = document.getElementById("standard_khomloy");
var ticket_date_november15th = document.getElementById("ticket_date_november15th");
var ticket_date_november16th = document.getElementById("ticket_date_november16th");
vip_khomloy_input.checked = true;
premium_khomloy_input.disabled = true;
vip_khomloy_input.disabled = false;
standard_khomloy_input.disabled = false;
ticket_date_november15th.addEventListener('click', function () {
premium_khomloy_left.innerText ='Sold out'
vip_khomloy_left.innerText ='65 left'
standard_khomloy_left.innerText ='57 left'
premium_khomloy_input.disabled = true;
vip_khomloy_input.disabled = false;
standard_khomloy_input.disabled = false;
vip_khomloy_input.checked = true;
currentTicketPrice = parseInt(vip_khomloy_input.getAttribute('data-price'));
adultNumberValue = parseInt(adultNumberNode.value);
calcTotalPrice(currentTicketPrice, adultNumberValue);
});
ticket_date_november16th.addEventListener('click', function () {
premium_khomloy_left.innerText ='225 left'
vip_khomloy_left.innerText ='149 left'
standard_khomloy_left.innerText ='63 left'
premium_khomloy_input.disabled = false;
vip_khomloy_input.disabled = false;
standard_khomloy_input.disabled = false;
premium_khomloy_input.checked = true;
currentTicketPrice = parseInt(premium_khomloy_input.getAttribute('data-price'));
adultNumberValue = parseInt(adultNumberNode.value);
calcTotalPrice(currentTicketPrice, adultNumberValue);
});
});
var venueList = document.querySelectorAll("input[name='Venue']");
var totalPriceText = document.getElementById("totalPriceText");
@ -571,3 +624,9 @@
return result;
}
</script>
<style>
.dynamic-label { font-size: 16px;
font-style: italic;
padding-top: 5px;
display: block;}
</style>

@ -45,7 +45,7 @@
alt="Asiahighlights logo" class="asiahighlightslogo img-responsive"></a>
<nav>
<ul class="pctopnavi">
<li class="dropdown"><a href="/tours" class="p_topnavilink">Tours</a></li>
<li class="dropdown"><a class="p_topnavilink" href="/destinations">Destinations</a>
<div class=" dropdown-content">
@ -102,6 +102,7 @@
</div>
</div>
</li>
<li class="dropdown"><a href="/tours" class="p_topnavilink">Tours</a></li>
<li class="dropdown"><a class="p_topnavilink" href="/itinerary-ideas">Itinerary Ideas</a></li>
<li class="dropdown"><a href="/about-us" class="p_topnavilink">About Us</a>
<div class=" dropdown-content">
@ -150,8 +151,7 @@
</div>
</header>
<div class="updated_news">How to Plan an Incredible Family Trip to Japan in 2024/2025. <a
href="/japan/how-to-plan-a-family-trip-to-japan">Learn more.</a></div>
<!--PC头部 结束-->
@ -331,12 +331,12 @@
<div class="bottomaboutus">
<img src="https://data.asiahighlights.com/grey.gif" loader="lazy"
originalsrc="https://images.asiahighlights.com/allpicture/2024/03/1437fad7aabf4cf297ae5cefce15b241_cut_1191x842_241.png"
width="170" height="121"
width="170" height="121" alt="Asia Highlights' logo"
style="float: left; margin-right: 10px; margin-bottom: 10px; width: 170px; height: 121px;">
<div class="aboutusinfo">
<img src="https://data.asiahighlights.com/grey.gif" loader="lazy"
originalsrc="https://data.asiahighlights.com/pic/trustpilot-new-icon.png"
style="display: block; margin-bottom: 10px;" width="104" height="20">
style="display: block; margin-bottom: 10px;" width="104" height="20" alt="tour review">
Rated 4.9 out of 5 | 98.8% Excellence<br>
China Highlights International<br> Travel Service Co., LTD
</div>

@ -41,8 +41,7 @@
</div>
</header>
<div class="updated_news">How to Plan an Incredible Family Trip to Japan in 2024/2025. <a
href="/japan/how-to-plan-a-family-trip-to-japan">Learn more.</a></div>
<nav id="ml-menu" class="menu">
<div class="siteSearch">
<form id="searchbox_001281624266240652297:cl1fy1cxepi" name="googlesreach"
@ -66,8 +65,9 @@
<div class="menu__wrap">
<ul data-menu="main" class="menu__level menu__level--current" tabindex="-1" role="menu" aria-label="All">
<li class="menu__item" role="menuitem"><a class="menu__link" href="/">Home</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/tours" data-submenu="submenu-7" aria-owns="submenu-7">Tours</a></li>
<li class="menu__item" role="menuitem" ><a class="menu__link" data-submenu="submenu-2" aria-owns="submenu-2" >Destinations</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/tours" data-submenu="submenu-7" aria-owns="submenu-7">Tours</a></li>
<li class="menu__item" role="menuitem" style="margin-bottom: 50px;"><a class="menu__link" href="/itinerary-ideas">Itinerary Ideas</a></li>
<li class="menu__item" role="menuitem"><a href="/reviews" data-submenu="submenu-9" aria-owns="submenu-9" class="menu__link">Reviews</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/about-us">About Us</a></li>
@ -257,9 +257,9 @@
<div class="infobottom">
<div class="bottomlogoinfo">
<img src="https://data.asiahighlights.com/grey.gif" loader="lazy" originalsrc="https://images.asiahighlights.com/allpicture/2024/03/1437fad7aabf4cf297ae5cefce15b241_cut_1191x842_241.png" class="img-responsive" style="width: 150px; margin: 0 auto;">
<img src="https://data.asiahighlights.com/grey.gif" loader="lazy" originalsrc="https://images.asiahighlights.com/allpicture/2024/03/1437fad7aabf4cf297ae5cefce15b241_cut_1191x842_241.png" class="img-responsive" style="width: 150px; margin: 0 auto;" alt="Asia Highlights' logo">
<img src="https://data.asiahighlights.com/grey.gif"
originalsrc="https://data.asiahighlights.com/pic/trustpilot-new-icon.png" loader="lazy"
originalsrc="https://data.asiahighlights.com/pic/trustpilot-new-icon.png" loader="lazy" alt="tour review"
class="bottomlogocenter img-responsive" style="width: 160px; margin-top: 15px;">
Rated 4.9 out of 5 | 98.8% Excellence<br>
China Highlights International<br> Travel Service Co., LTD

@ -10,8 +10,35 @@
</div>
<h1><?php echo !empty($ic_title)?$ic_title:'H1 title Chinahighlights mobile first template'; ?></h1>
<!--<p class="subheadline">to do</p> -->
<?php if (!empty($meta_news_createdate)) {?>
<div class="authorupdate">Written by <strong><?php echo !empty($author)?$author:''; ?></strong>Updated <?php echo date("M. j, Y",strtotime($meta_news_createdate)); ?></div>
<?php
$OPI_CodeUrls = [
'zzy' => 'https://www.globalhighlights.com/aboutus/team/ruru-zhou',
'2' => 'https://www.globalhighlights.com/aboutus/team/ruru-zhou',
'HWT' => 'https://www.globalhighlights.com/aboutus/team/mike-he',
'CA' => 'https://www.globalhighlights.com/aboutus/team/carol-wang',
'SI' => 'https://www.globalhighlights.com/aboutus/team/simon-huang',
'TJQ' => 'https://www.globalhighlights.com/aboutus/team/cindy-tang',
'CLA' => 'https://www.globalhighlights.com/aboutus/team/claire-wang',
'Albee' => 'https://www.globalhighlights.com/aboutus/team/albee-ning',
'KM' => 'https://www.globalhighlights.com/aboutus/team/kimi-huang',
'RY' => 'https://www.globalhighlights.com/aboutus/team/rita-yu',
'QMY' => 'https://www.globalhighlights.com/aboutus/team/chris-quan',
'CY' => 'https://www.globalhighlights.com/aboutus/team/cynthia-li',
'Vicky' => 'https://www.globalhighlights.com/aboutus/team/vicky-leng',
'LXW' => 'https://www.globalhighlights.com/aboutus/team/carper-li',
'zzyGH' => 'https://www.globalhighlights.com/aboutus/team/ruru-zhou',
];
$OPI_Code = empty($OPI_Code) ? '' : $OPI_Code;
if (!empty($meta_news_createdate)) {?>
<div class="authorupdate">
Written by
<?php if (array_key_exists($OPI_Code, $OPI_CodeUrls)) {?>
<strong><a href="<?php echo $OPI_CodeUrls[$OPI_Code]; ?>" target="_blank"><?php echo $author; ?></a></strong>
<?php } else { ?>
<strong><?php echo $author; ?></strong>
<?php }?>
Updated <?php echo date("M. j, Y", strtotime($meta_news_createdate)); ?>
</div>
<?php } ?>
<?php if ($ads_by_google) { ?>
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-4231674166786366"

@ -74,31 +74,26 @@
<li class="dropdown"><a href="/tour/" class="p_topnavilink" id="china_tours_2021">China Tours</a>
<div class="chinatourspc dropdown-content">
<ul class="list-reset sidebar">
<li class="start-nav-item"><a href="/tour/year.htm" id="tours_year_2021">China Tours
2024/2025</a></li>
<li class="start-nav-item"><a href="/tour/expats-tours.htm"
id="china_expats_tours_2021">China Expats Tours</a></li>
<li class="start-nav-item"><a href="/tour/winter-vacation/"
id="china_winter_tours_2021">China Winter Tours</a></li>
<li class="start-nav-item"><a href="/tour/top-china-tours/"
id="china_top_tours_2021">Top 10
Tours</a></li>
<li class="start-nav-item"><a href="/tour/top-china-tours/" id="china_top_tours_2021">Top 10 Tours</a></li>
<li class="start-nav-item"><a href="/tour/hassle-free-china-visas.htm" id="Visa-Free">Visa-Free Tours</a></li>
<li class="start-nav-item"><a href="/tour/china-panda-tours/"
id="china_panda_tours_2021">Panda Tours</a></li>
<li class="start-nav-item"><a href="/greatwall/hiking.htm"
id="china_great_wall_hiking_tours_2021">Great Wall Hiking</a></li>
<li class="start-nav-item"><a href="/tour/silk-road-tours/"
id="china_silk_road_tours_2021">Silk Road Tours</a></li>
<li class="start-nav-item"><a href="/tour/family-tours/"
id="china_family_tours_2021">Family
Tours</a></li>
<li class="start-nav-item"><a href="/yangtzecruise/"
id="china_yangtze_cruise_2021">Yangtze
River Cruise</a></li>
<li class="start-nav-item"><a href="/tour/china-hiking-tours/"
id="china_hiking_tours_2021">Hiking Tours</a></li>
<li class="start-nav-item"><a href="/tour/silk-road-tours/"
id="china_silk_road_tours_2021">Silk Road Tours</a></li>
<li class="start-nav-item start-nav-item-last"><a href="/greatwall/tours/"
id="china_great_wall_tours_2021">Great Wall of China Tours</a></li>
<li class="start-nav-item start-nav-item-last"><a href="/tour/china-nature-tours/"
id="Nature">Nature Tours</a></li>
<li class="start-nav-item"><a href="/tour/winter-vacation/"
id="china_winter_tours_2021">China Winter Tours</a></li>
<li class="start-nav-item"><a href="/yangtzecruise/"
id="china_yangtze_cruise_2021">Yangtze River Cruise</a></li>
<li class="start-nav-item"><a href="/tour/expats-tours.htm"
id="china_expats_tours_2021">China Expats Tours</a></li>
</ul>
</div>
</li>
@ -350,11 +345,7 @@
</div>
</div>
</header>
<div class="updated_news">
<div class="list_content">Top 10 China tours 2024/2025 for first visits and returns: embark on a lifetime
experience. <a href="/tour/top-china-tours/" id="updated_news_new_year_2022_pc">Learn
more</a></div>
</div>
<div class="main_content">
<!--@HEAD_1@-->
@ -398,7 +389,7 @@
</div>
<div class="footerbox newsletter_form">
<div class="list_content">
<h2 style="padding-top: 0; text-align: center;">Sign up to Our Newsletter</h2>
<h2 style="padding-top: 0; text-align: center; color:#fff;">Sign up to Our Newsletter</h2>
<p style="text-align: center;">Be the first to receive exciting updates, exclusive promotions, and
valuable travel tips from our
team of experts. </p>
@ -485,7 +476,7 @@
<div class="list_content">
<h2 style="
margin-top: 0;
text-align: center;
text-align: center;color:#fff;
">Where Can We Take You Today?</h2>
<div class="destination_links">

@ -70,11 +70,7 @@
</div>
</div>
</header>
<div class="updated_news">
<div class="list_content">Top 10 China tours 2024/2025 for first visits and returns: embark on a lifetime
experience. <a href="/tour/top-china-tours/" id="updated_news_new_year_2022_pc">Learn more</a>
</div>
</div>
<!---->
<nav id="ml-menu" class="menu">
@ -92,7 +88,7 @@
<button class="action action--close" aria-label="Close Menu"><svg class="icon icon--cross" id="close"
aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="52" height="52" viewBox="0 0 52 52"
style="width: 20px;height: 20px;">
<g stroke-width="6" stroke="#000">
<g stroke-width="6" stroke="#202020">
<line x1="26" x2="4" y1="26" y2="4"></line>
<line x1="26" x2="48" y2="4" y1="26"></line>
<line x1="26" x2="2" y1="26" y2="48"></line>
@ -127,29 +123,25 @@
<ul data-menu="submenu-1" id="submenu-1" class="menu__level" tabindex="-1" role="menu" aria-label="China-Tours">
<li class="menu__item" role="menuitem"><a class="menu__link" href="/tour/">China Tours</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/tour/top-china-tours/">Top 10 Tours</a>
</li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/tour/family-tours/">Family Tours</a>
</li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/tour/year.htm">China Tours 2024/2025</a>
</li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/tour/china-panda-tours/">Panda Tours</a>
</li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/greatwall/hiking.htm">Great Wall
Hiking</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/tour/china-hiking-tours/">Hiking Tours</a>
</li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/tour/silk-road-tours/">Silk Road
Tours</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/greatwall/tours/">Great Wall of China
Tours</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/yangtzecruise/">Yangtze River Cruise</a>
</li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/tour/winter-vacation/">China Winter
Tours</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/tour/expats-tours.htm">China Expats
<li class="menu__item" role="menuitem"><a href="/tour/top-china-tours/" class="menu__link">Top 10 Tours</a></li>
<li class="menu__item" role="menuitem"><a href="/tour/hassle-free-china-visas.htm" class="menu__link">Visa-Free Tours</a></li>
<li class="menu__item" role="menuitem"><a href="/tour/china-panda-tours/"
class="menu__link">Panda Tours</a></li>
<li class="menu__item" role="menuitem"><a href="/tour/family-tours/"
class="menu__link">Family
Tours</a></li>
<li class="menu__item" role="menuitem"><a href="/tour/silk-road-tours/"
class="menu__link">Silk Road Tours</a></li>
<li class="start-nav-item start-nav-item-last"><a href="/greatwall/tours/"
class="menu__link">Great Wall of China Tours</a></li>
<li class="start-nav-item start-nav-item-last"><a href="/tour/china-nature-tours/"
class="menu__link">Nature Tours</a></li>
<li class="menu__item" role="menuitem"><a href="/tour/winter-vacation/"
class="menu__link">China Winter Tours</a></li>
<li class="menu__item" role="menuitem"><a href="/yangtzecruise/"
class="menu__link">Yangtze River Cruise</a></li>
<li class="menu__item" role="menuitem"><a href="/tour/expats-tours.htm"
class="menu__link">China Expats Tours</a></li>
</ul>
<!-- Destinations -->
<ul data-menu="submenu-2" id="submenu-2" class="menu__level" tabindex="-1" role="menu" aria-label="Destinations">
@ -396,7 +388,7 @@
</div>
<div class="footerbox newsletter_form">
<div class="list_content">
<h2 style="padding-top: 0; text-align: center;">Sign up to Our Newsletter</h2>
<h2 style="padding-top: 0; text-align: center;color:#fff;">Sign up to Our Newsletter</h2>
<p style="text-align: center;">Be the first to receive exciting updates, exclusive promotions, and valuable
travel tips from our
team of experts. </p>
@ -474,7 +466,7 @@
<div class="bottom_destinations" style="margin-bottom: -5px;">
<h2 style="
margin-top: 0;
text-align: center;
text-align: center;color:#fff;
">Where Can We Take You Today?</h2>
<div class="listtour">
<div class="destination_links">

@ -76,22 +76,21 @@
<span class="container">
<li><a href="/tour/classic-china-tour">Classic China Tour</a></li>
<li><a href="/tour/top-china-tour">Top 10 China Tours</a></li>
<li><a href="/yangtze-river-cruise">Yangtze River Cruise</a></li>
<li><a href="/tour/year">China Tours 2025</a></li>
<li><a href="/tour/silk-road">Silk Road Tours</a></li>
<li><a href="/tour/panda-tour">China Panda Tours</a></li>
<li><a href=" /tour/china-minority-discovery">Minority Discovery Tours</a></li>
</span>
<li><a href="/yangtze-river-cruise">Yangtze River Cruise</a></li>
</ul>
</li>
<li><a href="/citytour">Destinations<i class="fa fa-angle-down" aria-hidden="true"></i></a>
<ul>
<span class="container">
<li><a href="/beijing/tour">Beijing</a></li>
<li><a href="/shanghai/tour">Shanghai</a></li>
<li><a href="/xian/tour">Xian</a></li>
<li><a href="/hong-kong/tour">Hong Kong</a></li>
<li><a href="/shanghai/tour">Shanghai</a></li>
<li><a href="/guilin/tour">Guilin</a></li>
<li><a href="/tibet/tour">Tibet</a></li>
<li><a href="/zhangjiajie/tour">Zhangjiajie</a></li>
<li><a href="/yunnan/tour">Yunnan</a></li>
<li><a href="/hangzhou/tour">Hangzhou</a></li>
<li><a href="/suzhou/tour">Suzhou</a></li>
<li><a href="/huangshan/tour">Huangshan</a></li>
@ -101,12 +100,12 @@
<li><a href="/daytrip">Day Trips<i class="fa fa-angle-down" aria-hidden="true"></i></a>
<ul>
<span class="container">
<li><a href="/shanghai/daytour">Shanghai Day Trips</a></li>
<li><a href="/beijing/daytour">Beijing Day Trips</a></li>
<li><a href=" /hong-kong/daytour">Hong Kong Day Trips</a></li>
<li><a href="/shanghai/daytour">Shanghai Day Trips</a></li>
<li><a href="/guilin/daytour">Guilin Day Trips</a></li>
<li><a href="/suzhou/daytour">Suzhou Day Trips</a></li>
<li><a href="/chengdu/daytour">Chengdu Day Trips</a></li>
<li><a href="/hangzhou/daytour">Hangzhou Day Trips</a></li>
<li><a href="/suzhou/daytour">Suzhou Day Trips</a></li>
</span>
</ul>
</li>
@ -117,8 +116,8 @@
<li><a href=" /asia-tour/classic-thailand">Classic Thailand</a></li>
<li><a href=" /asia-tour/northern-vietnam">Northern Vietnam Discovery</a></li>
<li><a href=" /asia-tour/siem-reap-experience">Siem Reap Experience</a></li>
<li><a href="/asia-tour/universal-studios-singapore-ticket">Universal Studios Singapore Tickets</a></li>
<li><a href="/asia-tour/golden-triangle-india">Golden Triangle in India</a></li>
<li><a href="/asia-tour/universal-studios-singapore-ticket">Universal Studios Singapore Tickets</a></li>
</span>
</ul>
</li>
@ -129,7 +128,7 @@
<li><a href="/guide/how-to-plan-a-trip-to-china">Plan Your China Trip</a></li>
<li><a href="/guide/visa">China Visa</a></li>
<li><a href="/guide/best-time-to-go-china">China Weather</a></li>
<li><a href="/great-wall-of-china">Great Wall Of China</a></li>
<li><a href="/great-wall-of-china">Great Wall of China</a></li>
<li><a href="/giant-panda">Giant Panda</a></li>
</span>
</ul>
@ -137,29 +136,23 @@
<li><a href="/culture">Culture<i class="fa fa-angle-down" aria-hidden="true"></i></a>
<ul>
<span class="container">
<li><a href="/chinese-food">Chinese Food </a></li>
<li><a href="/culture/chinese-tea">Chinese Tea</a></li>
<li><a href="/chinese-zodiac">Chinese Zodiac</a></li>
<li><a href="/culture/top-chinese-festival">Chinese Festivals</a></li>
<li><a href="/chinese-new-year">Chinese New Year</a></li>
<li><a href="/culture/top-chinese-festival">Chinese Festivals</a></li>
<li><a href="/chinese-food">Chinese Food </a></li>
<li><a href="/culture/chinese-tea">Chinese Tea</a></li>
<li><a href="/culture/kungfu">Chinese Kung Fu</a></li><br>
</span>
</ul>
</li>
<li><a href="/forms/customize">Create My Trip</a>
<ul>
<span class="container">
<li><a href="/customize-tour">What is Tailor-Made Tour</a></li>
</span>
</ul>
</li>
<li><a href="/china-trains">Trains<i class="fa fa-angle-down" aria-hidden="true"></i></a>
<li><a href="/forms/customize">Create My Trip<i class="fa fa-angle-down" aria-hidden="true"></i></a>
<ul>
<span class="container">
<li><a href="/china-flights">Flights</a></li>
<li><a href="/customize-tour">What Is Tailor-Made Tour</a></li>
</span>
</ul>
</li>
<li><a href="/china-trains">Trains</a></li>
</ul>
</nav>
</div>

@ -66,38 +66,38 @@
<li class="menu__item" role="menuitem"><a class="menu__link" data-submenu="submenu-7" aria-owns="submenu-7" href="/daytrip">Asia Tours</a><a class="menu__link" href="/asia-tour">Asia Tours</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" data-submenu="submenu-4" aria-owns="submenu-4" href="/guide">Travel Guide</a><a class="menu__link" href="/guide">Travel Guide</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" data-submenu="submenu-5" aria-owns="submenu-5" href="/culture">Culture</a><a class="menu__link" href="/culture">Culture</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" data-submenu="submenu-8" aria-owns="submenu-8" href="/forms/customize">Create My Trip</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" data-submenu="submenu-6" aria-owns="submenu-6" href="/china-trains">Trains</a><a class="menu__link" href="/china-trains">Trains</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" data-submenu="submenu-8" aria-owns="submenu-8" href="/forms/customize">Create My Trip</a><a class="menu__link" href="/forms/customize">Create My Trip</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/china-trains">Trains</a></li>
</ul>
<!-- China Tours -->
<ul data-menu="submenu-1" id="submenu-1" class="menu__level" tabindex="-1" role="menu" aria-label="china-Tours">
<li class="menu__item" role="menuitem"><a class="menu__link" href="/tour/classic-china-tour">Classic China Tour</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/tour/top-china-tour">Top 10 China Tours</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/yangtze-river-cruise">Yangtze River Cruise</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/tour/year">China Tours 2025</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/tour/silk-road">Silk Road Tours</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/tour/panda-tour">China Panda Tours</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href=" /tour/china-minority-discovery">Minority Discovery Tours</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/yangtze-river-cruise">Yangtze River Cruise</a></li>
</ul>
<!-- City Tours -->
<ul data-menu="submenu-2" id="submenu-2" class="menu__level" tabindex="-1" role="menu" aria-label="city-tours">
<li class="menu__item" role="menuitem"><a class="menu__link" href="/beijing/tour">Beijing</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/shanghai/tour">Shanghai</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/xian/tour">Xian</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/hong-kong/tour">Hong Kong</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/shanghai/tour">Shanghai</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/guilin/tour">Guilin</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/tibet/tour">Tibet</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/zhangjiajie/tour">Zhangjiajie</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/yunnan/tour">Yunnan</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/hangzhou/tour">Hangzhou</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/suzhou/tour">Suzhou</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/huangshan/tour">Huangshan</a></li>
</ul>
<!-- Day Tours -->
<ul data-menu="submenu-3" id="submenu-3" class="menu__level" tabindex="-1" role="menu" aria-label="day-tours">
<li class="menu__item" role="menuitem"><a class="menu__link" href="/shanghai/daytour">Shanghai Day Trips</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/beijing/daytour">Beijing Day Trips</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href=" /hong-kong/daytour">Hong Kong Day Trips</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/shanghai/daytour">Shanghai Day Trips</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/guilin/daytour">Guilin Day Trips</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/suzhou/daytour">Suzhou Day Trips</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/chengdu/daytour">Chengdu Day Trips</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/hangzhou/daytour">Hangzhou Day Trips</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/suzhou/daytour">Suzhou Day Trips</a></li>
</ul>
<!-- Asia Tours -->
<ul data-menu="submenu-7" id="submenu-7" class="menu__level" tabindex="-1" role="menu" aria-label="asia-tours">
@ -105,8 +105,8 @@
<li class="menu__item" role="menuitem"><a class="menu__link" href="/asia-tour/classic-thailand">Classic Thailand</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/asia-tour/northern-vietnam">Northern Vietnam Discovery</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/asia-tour/siem-reap-experience">Siem Reap Experience</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/asia-tour/universal-studios-singapore-ticket">Universal Studios Singapore Tickets</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href=" /asia-tour/golden-triangle-india">Golden Triangle in India</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/asia-tour/universal-studios-singapore-ticket">Universal Studios Singapore Tickets</a></li>
</ul>
<!-- Travel Guide -->
<ul data-menu="submenu-4" id="submenu-4" class="menu__level" tabindex="-1" role="menu" aria-label="travel-guide">
@ -114,26 +114,21 @@
<li class="menu__item" role="menuitem"><a class="menu__link" href="/guide/how-to-plan-a-trip-to-china">Plan Your China Trip</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/guide/visa">China Visa</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/guide/best-time-to-go-china">China Weather</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/great-wall-of-china">Great Wall Of China</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/great-wall-of-china">Great Wall of China</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/giant-panda">Giant Panda</a></li>
</ul>
<!-- Culture -->
<ul data-menu="submenu-5" id="submenu-5" class="menu__level" tabindex="-1" role="menu" aria-label="culture">
<li class="menu__item" role="menuitem"><a class="menu__link" href="/chinese-food">Chinese Food</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/culture/chinese-tea">Chinese Tea</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/chinese-zodiac">Chinese Zodiac</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/culture/top-chinese-festival">Chinese Festivals</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/chinese-new-year">Chinese New Year</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/culture/top-chinese-festival">Chinese Festivals</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/chinese-food">Chinese Food</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/culture/chinese-tea">Chinese Tea</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/culture/kungfu">Chinese Kung Fu</a></li>
</ul>
<!-- Trains -->
<ul data-menu="submenu-6" id="submenu-6" class="menu__level" tabindex="-1" role="menu" aria-label="culture">
<li class="menu__item" role="menuitem"><a class="menu__link" href="/china-flights">Flights</a></li>
</ul>
</ul>
<!-- Create My Trip -->
<ul data-menu="submenu-8" id="submenu-8" class="menu__level" tabindex="-1" role="menu" aria-label="culture">
<li class="menu__item" role="menuitem"><a class="menu__link" href="/customize-tour">What is Tailor-made Tour</a></li>
<ul data-menu="submenu-8" id="submenu-8" class="menu__level" tabindex="-1" role="menu" aria-label="create-my-trip">
<li class="menu__item" role="menuitem"><a class="menu__link" href="/customize-tour">What Is Tailor-made Tour</a></li>
</ul>
</div>
</nav>
@ -146,14 +141,14 @@
<form id="cse-search-box" name="googlesreach" action="/search">
<input type="hidden" value="016808570474272112209:2xv5z3olaus" name="cx">
<input type="hidden" value="FORID:11" name="cof">
<input type="text" onfocus="this.value = ''" class="strkeys" placeholder="site search" name="q">
<input type="text" onFocus="this.value = ''" class="strkeys" placeholder="site search" name="q">
<button type="submit" class="submits" name="searchbtn" aria-label="Search"><i class="fa fa-search" aria-hidden="true"></i></button>
</form>
<ul class="circle-ul font20 m-top30">
<li><a href="/tour/panda-tour">China Panda</a></li>
<li><a href="/guide/visa">China Visa</a></li>
<li><a href="/chinese-zodiac">Chinese Zodiac</a></li>
<li><a href="/great-wall-of-china">Great Wall of China</a></li>
<li><a href="/tour/panda-tour">China Panda</a></li>
<li><a href="/chinese-zodiac">Chinese Zodiac</a></li>
</ul>
</div>
</div>

@ -0,0 +1,34 @@
<h3 style="text-align:center">What the Clients Say about <?php echo $advisor_name?></h3>
<div class="visible-xs" style="margin: 20px 20px 110px 20px; ">
<img class="img-responsive" height="69" src="https://images.chinahighlights.com/allpicture/2024/07/22bf1a7554fc4906bdeaa6536ffe514b_cut_175x68_241_1719916246.png" style="float: left; width: 150px; margin: 0 auto;
display: block;" width="175" alt="Trip Advisor 2024 certificate">
<img height="40" src="https://data.asiahighlights.com/image/forms/ah-ch-gh-tp-rating.png" style="width: 120px; height: auto; display: block;
float: right;" width="211" alt="Tour Review">
</div>
<div class="table-responsive" style="margin-bottom: 20px; margin-top: 30px;">
<table style="width: max-content;">
<tbody>
<tr>
<td class="hidden-xs feedback_logo">
<img class="img-responsive" height="69" src="https://images.chinahighlights.com/allpicture/2024/07/22bf1a7554fc4906bdeaa6536ffe514b_cut_175x68_241_1719916246.png" style="margin: 0px auto; " width="175" alt="Tour Review"> <img alt="Tour Review" class="img-responsive" height="278" src="https://images.asiahighlights.com/allpicture/2024/04/0c58b3494bc04eeb9c5d3bdf55e55fad_cut_200x111_241.jpg" style="width: 170px; display: block; margin: 10px auto 0px; " width="1133">
</td>
<?php foreach ($feedback_list as $index => $feedback) {?>
<td class="tour_feedback feedback_content">
<strong>
<?php echo $feedback['title'] ?>
</strong>
<img src="<?php if (strpos($feedback['url'], 'trustpilot.com') == true) { echo 'https://images.asiahighlights.com/allpicture/2024/04/eba8a46e43514b55bb4e1dd15d9b5712_cut_211x40_241.jpg'; } else if (strpos($feedback['url'], 'tripadvisor.com') == true) { echo 'https://images.asiahighlights.com/allpicture/2024/04/8bebcc898ce54b64a46ced58580966d4_cut_104x19_241.jpg'; } ?>" style="height: 20px; width: auto;" alt="Tour Review">
<p>
<?php echo $feedback['content'] ?>
</p>
<a href="<?php echo $feedback['url'] ?>" target="_blank" rel="nofollow">More</a>
<div class="customer_name">
<?php echo $feedback['customer'] ?>, <?php echo $feedback['createdOn'] ?>
</div>
</td>
<?php }?>
</tr>
</tbody>
</table>
</div>

@ -15,7 +15,6 @@
<!-- Vietnam -->
<?php if (!empty($Hanoi)) {?>
<?php foreach ($Hanoi as $index => $feedback) {?>
<div class="feedback_content">

@ -12,11 +12,10 @@
<tr>
<td class="hidden-xs feedback_logo">
<img class="img-responsive" height="69" src="https://images.asiahighlights.com/allpicture/2024/04/b3e0271ca0874b7cb0342ea6f2987723_cut_175x68_241.jpg" style="margin: 0px auto; " width="175" alt="Tour Review"> <img alt="Tour Review" class="img-responsive" height="278" src="https://images.asiahighlights.com/allpicture/2024/04/0c58b3494bc04eeb9c5d3bdf55e55fad_cut_200x111_241.jpg" style="width: 170px; display: block; margin: 10px auto 0px; " width="1133">
<img class="img-responsive" height="69" src="https://images.chinahighlights.com/allpicture/2024/07/22bf1a7554fc4906bdeaa6536ffe514b_cut_175x68_241_1719916246.png" style="margin: 0px auto; " width="175" alt="Tour Review"> <img alt="Tour Review" class="img-responsive" height="278" src="https://images.asiahighlights.com/allpicture/2024/04/0c58b3494bc04eeb9c5d3bdf55e55fad_cut_200x111_241.jpg" style="width: 170px; display: block; margin: 10px auto 0px; " width="1133">
</td>
<?php foreach ($feedback_list as $index => $feedback) {?>
<td class="tour_feedback feedback_content">
<strong>
<?php echo $feedback['title'] ?>
</strong>
@ -28,7 +27,6 @@
<div class="customer_name">
<?php echo $feedback['customer'] ?>, <?php echo $feedback['createdOn'] ?>
</div>
</td>
<?php }?>
</tr>

@ -9,9 +9,38 @@
</div>
<div class="topinfo">
<h1><?php echo !empty($ic_title)?$ic_title:'H1 title Chinahighlights mobile first template'; ?></h1>
<?php if (!empty($meta_news_createdate)) {?>
<div class="author_info">By <em><?php echo !empty($author)?$author:''; ?></em> | Updated <?php echo date("M. j, Y",strtotime($meta_news_createdate)); ?></div>
<?php
$OPI_CodeUrls = [
'zzy' => 'https://www.globalhighlights.com/aboutus/team/ruru-zhou',
'2' => 'https://www.globalhighlights.com/aboutus/team/ruru-zhou',
'HWT' => 'https://www.globalhighlights.com/aboutus/team/mike-he',
'CA' => 'https://www.globalhighlights.com/aboutus/team/carol-wang',
'SI' => 'https://www.globalhighlights.com/aboutus/team/simon-huang',
'TJQ' => 'https://www.globalhighlights.com/aboutus/team/cindy-tang',
'CLA' => 'https://www.globalhighlights.com/aboutus/team/claire-wang',
'Albee' => 'https://www.globalhighlights.com/aboutus/team/albee-ning',
'KM' => 'https://www.globalhighlights.com/aboutus/team/kimi-huang',
'RY' => 'https://www.globalhighlights.com/aboutus/team/rita-yu',
'QMY' => 'https://www.globalhighlights.com/aboutus/team/chris-quan',
'CY' => 'https://www.globalhighlights.com/aboutus/team/cynthia-li',
'Vicky' => 'https://www.globalhighlights.com/aboutus/team/vicky-leng',
'LXW' => 'https://www.globalhighlights.com/aboutus/team/carper-li',
'zzyGH' => 'https://www.globalhighlights.com/aboutus/team/ruru-zhou',
];
$OPI_Code = empty($OPI_Code) ? '' : $OPI_Code;
if (!empty($meta_news_createdate)) {?>
<div class="authorupdate">
Written by
<?php if (array_key_exists($OPI_Code, $OPI_CodeUrls)) {?>
<strong><a href="<?php echo $OPI_CodeUrls[$OPI_Code]; ?>" target="_blank"><?php echo $author; ?></a></strong>
<?php } else { ?>
<strong><?php echo $author; ?></strong>
<?php }?>
Updated <?php echo date("M. j, Y", strtotime($meta_news_createdate)); ?>
</div>
<?php } ?>
</div>
</div>
</div>

@ -198,13 +198,13 @@
<h3>Why Global Highlights (10,000+ reviews & 98.8% 5-star rating)</h3>
<ul>
<li class="brand_title">Save Your Time:</li>
<li class="brand_title">Save Your Time</li>
<li>Less research, more enjoyment!</li>
<li>Real-time 1V1 expert planning</li>
<li class="brand_title">Maximize Your Flexibility:</li>
<li class="brand_title">Maximize Your Flexibility</li>
<li>Personal local guide and ride</li>
<li>Explore at your own pace</li>
<li class="brand_title">Celebrate Your Journeys:</li>
<li class="brand_title">Celebrate Your Journeys</li>
<li>Specially-crafted family adventures</li>
<li>Celebrate milestones with style!</li>
</ul>

Loading…
Cancel
Save