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

424 lines
11 KiB
PHTML

<?php
//途牛接口创建请求签名
function create_sign(){
$time = date('Y-m-d H:i:s',time());
$secretKey = 'qvHMJVywEQqsd4EneHQl';
$id = 'retailId25';
$timeStamp = 'timestamp'.$time;
$sign = $secretKey.$id.'apiKey'.TUNIU_KEY.$timeStamp.$secretKey;
return strtoupper(md5($sign));
}
//证件名称转id
function strexchangeid($name){
if($name != ''){
switch ($name){
case '二代身份证':
return '1';
break;
case '护照':
return 'B';
break;
case '台湾通行证':
return 'G';
break;
case '港澳通行证':
return 'C';
break;
default :
return 'B';
break;
}
}
}
//特殊字符转换
function chk_sp_name($name){
$name = str_replace(
array('á','ë','é','è','í','ó','ú','ű','ñ','á','é','í','ó','ö','ú','ű','ñ','/',',',' '),
array('a','e','e','e','i','o','u','u','n','A','E','I','o','o','U','U','N','','',''),
$name
);
return substr(strtoupper($name),0,30);
}
//发送请求函数
function GetPost_http($url, $data = '',$format='') {
if(!isset($_SERVER['HTTP_USER_AGENT'])){
$_SERVER['HTTP_USER_AGENT'] = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.2372.400 QQBrowser/9.5.10548.400';
}
$curl = curl_init(); // 启动一个CURL会话
curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); // 从证书中检查SSL加密算法是否存在
curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转
curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer
if (!empty($data)) {
curl_setopt($curl, CURLOPT_POST, 1); // 发送一个常规的Post请求
curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // Post提交的数据包
if($format == 'json'){
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
}else if ($format=="json_ctrip"){
//新携程接口只开通了116.8.4.34的IP能访问
$header = array(
'CLIENT-IP: 116.8.4.34',
'X-FORWARDED-FOR: 116.8.4.34',
'Content-Type:application/json'
);
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
}
}
curl_setopt($curl, CURLOPT_TIMEOUT, 40); // 设置超时限制防止死循环
curl_setopt($curl, CURLOPT_TIMEOUT_MS, 40000); // 设置超时限制防止死循环
curl_setopt($curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
$tmpInfo = curl_exec($curl); // 执行操作
$errno = curl_errno($curl);
if ($errno !== 0) {
log_message('error', 'ctripost'.$errno.curl_error($curl));
}
curl_close($curl); //关闭CURL会话
return $tmpInfo; //返回数据
}
function get_microtime (){
list($s1, $s2) = explode(' ', microtime());
return (float)sprintf('%.0f', (floatval($s1) + floatval($s2)) * 1000);
}
//余票转换
function ticket_exchange($price,$num,$iseven){
if($iseven){
if(isset($price) && is_numeric($num)){
if($price > 0){
return '有';
}else{
return '';
}
}
return '';
}else{
if(is_numeric($num)){
if($num == 0){
return '无';
}elseif($num >= 99){
return '有';
}else{
return $num;
}
}else{
if($num == '--'){
return '';
}
}
}
}
function checkNull($info){
if(empty($info)){
return '';
}else{
return $info;
}
}
function checkDateRule($strDate, $jsonDate){
if (!strtotime($strDate)) {
return false;
}
$strDate_t = strtotime($strDate);
$strDate = date("Y-m-d", $strDate_t);
$dYear = date("Y", $strDate_t);
$dMonth = date("m", $strDate_t);
$dDay = date("d", $strDate_t);
$dWeek = date("w", $strDate_t); //星期的第几天数组0-6
//单双日
if ($dDay % 2 == 0) {
$dSingle = 2;
} else {
$dSingle = 1;
}
$jObject = json_decode($jsonDate);
$result = false;
//先判断排除规则有一条符合就返回false
if (isset($jObject->DateRule->exclusive) ) {
$jObject_exclusive = $jObject->DateRule->exclusive;
foreach ($jObject_exclusive as $key => $val) {
if ($val->dateType=="EveryDay" ) { //每天,这个基本不会出现,设置每天排除和关闭没区别
return false;
} elseif ($val->dateType=="WeekDay" ) { //按星期
//先判断是否在日期范围内,再判断星期是否对应
$bw_CheckRange = false; //是否需要判断星期几
if ($val->dateRange == "*") { //每天
$bw_CheckRange = true;
} else {
$dateRange = explode("|", $val->dateRange); //日期范围
if (count($dateRange) == 2) {
if ($strDate_t >= strtotime($dateRange[0]) and $strDate_t <= strtotime($dateRange[1])) {
$bw_CheckRange = true; //在范围内
}
}
}
if ($bw_CheckRange) {
if ($dWeek==0) {
$dWeek=7; //星期0为星期天我们保存的星期天是7
}
$weekArr = explode(",", $val->dateData); //星期数据1,2,3,4,5,6,7这种
foreach ($weekArr as $week) {
if ($week == $dWeek) {
return false;
}
}
}
} elseif ($val->dateType == "SelectDay") { //固定日期
if ($val->dateRange=="*") {
$SelectDayArr = explode(",", $val->dateData);
foreach ($SelectDayArr as $sDay) {
if (strtotime($sDay) == $strDate_t) {
return false;
}
}
}
} elseif ($val->dateType == "RangeDay") { //连续日期
if ($val->dateRange == "*") {
$RangeDateArr = explode("|", $val->dateData);
if (count($RangeDateArr)==2) {
if ($strDate_t >= strtotime($RangeDateArr[0]) and $strDate_t <= strtotime($RangeDateArr[1])) {
return false ; //在范围内
}
}
}
}
}
}
//再判断包含规则有一条符合就为true
if (isset($jObject->DateRule->include)) {
$jObject_include = $jObject->DateRule->include;
foreach ($jObject_include as $key => $val) {
if ($val->dateType == "EveryDay") { //每天
return true;
} elseif ($val->dateType == "WeekDay") { //按星期
//先判断是否在日期范围内,再判断星期是否对应
$bw_CheckRange = false; //是否需要判断星期几
if ($val->dateRange == "*") { //每天
$bw_CheckRange = true;
} else {
$dateRange = explode("|", $val->dateRange); //日期范围
if (count($dateRange) == 2) {
if ($strDate_t >= strtotime($dateRange[0]) and $strDate_t <= strtotime($dateRange[1])) {
$bw_CheckRange = true; //在范围内
}
}
}
if ($bw_CheckRange) {
if ($dWeek == 0) {
$dWeek = 7; //星期0为星期天我们保存的星期天是7
}
$weekArr = explode(",", $val->dateData); //星期数据1,2,3,4,5,6,7这种
foreach ($weekArr as $week) {
if ($week == $dWeek) {
return true;
}
}
}
} elseif ($val->dateType=="MonthDay") { //每月单双
if ($val->dateRange=="*") {
$MonthDayArr = explode(",", rtrim($val->dateData, ',')); //月单双数据m3:2,m4:1
foreach ($MonthDayArr as $MonthKey) {
$MonthArr = explode(":", $MonthKey);
$Month = str_pad(str_replace("m", "", $MonthArr[0]), 2, "0", STR_PAD_LEFT); //存储的月份补0好比较
if ($dMonth == $Month) { //月份相同比较
if ($dSingle == $MonthArr[1]) {
return true;
}
}
}
}
} elseif ($val->dateType == "SelectDay") { //固定日期
if ($val->dateRange=="*") {
$SelectDayArr = explode(",", $val->dateData);
foreach ($SelectDayArr as $sDay) {
if (strtotime($sDay) == $strDate_t) {
return true;
}
}
}
} elseif ($val->dateType == "RangeDay") { //连续日期
if ($val->dateRange == "*") {
$RangeDateArr = explode("|", $val->dateData);
if (count($RangeDateArr)==2) {
if ($strDate_t >= strtotime($RangeDateArr[0]) and $strDate_t <= strtotime($RangeDateArr[1])) {
return true ; //在范围内
}
}
}
}
}
}
return $result;
}
function get_name($seat_code){
if($seat_code){
switch($seat_code){
case 'O' :
return 'Second Class Seat';
case 'A8' :
return 'Second Class Seat';
case 'A9' :
return 'Business Class Seat';
case 'P' :
return 'Superior';
case 'M' :
return 'First Class Seat';
case 'A7' :
return 'First Class Seat';
case 'A6' :
return 'Superior Soft Sleeper';
case 'A' :
return 'Superior Soft Sleeper';
case '5' :
return 'Hard Sleeper';
case 'S' :
return 'Soft Sleeper';
case 'A4' :
return 'Soft Sleeper';
case 'F' :
return 'New Soft Sleeper';
case 'A3' :
return 'Hard Sleeper';
case 'A2' :
return 'Soft Seat';
case 'A1' :
return 'Hard Seat';
case 'Q' :
return 'Tour Seat';
case 'H' :
return 'Other';
case 'WZ' :
return 'Standing-room Only';
case '13' :
return 'Standing-room Only';
case 'YDW' :
return 'Soft Sleeper';
case 'EDW' :
return 'Hard Sleeper';
}
}
}
function get_name_cn($seat_code){
if($seat_code){
switch($seat_code){
case 'O' :
return '二等座';
case 'A8' :
return '二等座';
case 'A9' :
return '商务座';
case 'P' :
return '特等座';
case 'M' :
return '一等座';
case 'A7' :
return '一等座';
case 'A6' :
return '高级软卧';
case 'A' :
return '高级软卧';
case '5' :
return '硬卧';
case 'S' :
return '软卧';
case 'A4' :
return '软卧';
case 'F' :
return '动卧';
case 'A3' :
return '硬卧';
case 'A2' :
return '软座';
case 'A1' :
return '硬座';
case 'Q' :
return '观光座';
case 'H' :
return '其它';
case 'WZ' :
return '无座';
case '13' :
return '无座';
case 'YDW' :
return '一等卧';
case 'EDW' :
return '二等卧';
}
}
}
/**
* 解密函数
* 算法des
* 加密模式ecb
* 补齐方法PKCS5
* @param unknown_type $input
*/
function des_encrypt($data, $key) {
$data = pkcs5_pad($data, 8); //确保数据长度是8的倍数并使用PKCS5填充
$iv = "\x01\x02\x03\x04\x05\x06\x07\x08"; //PHP版本的初始化向量可以自定义
$cipher = mcrypt_module_open(MCRYPT_DES, '', MCRYPT_MODE_ECB, '');
mcrypt_generic_init($cipher, $key, $iv);
$encrypted = mcrypt_generic($cipher, $data);
mcrypt_generic_deinit($cipher);
mcrypt_module_close($cipher);
return base64_encode($encrypted); //将密文以base64编码输出
}
function des_decrypt($data, $key) {
$iv = "\x01\x02\x03\x04\x05\x06\x07\x08"; //PHP版本的初始化向量可以自定义
$cipher = mcrypt_module_open(MCRYPT_DES, '', MCRYPT_MODE_ECB, '');
mcrypt_generic_init($cipher, $key, $iv);
$decrypted = mdecrypt_generic($cipher, base64_decode($data)); //将密文先解码后解密
mcrypt_generic_deinit($cipher);
mcrypt_module_close($cipher);
return pkcs5_unpad($decrypted); //移除PKCS5填充并输出明文
}
function pkcs5_pad($text, $blocksize)
{
$pad = $blocksize - (strlen($text) % $blocksize);
return $text . str_repeat(chr($pad), $pad);
}
function pkcs5_unpad($text) {
$pad = ord($text{strlen($text)-1});
if ($pad > strlen($text)) {
return false;
}
if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) {
return false;
}
return substr($text, 0, -1 * $pad);
}
?>