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/flight/libraries/API/comm/utils.php

242 lines
5.4 KiB
PHTML

<?php
/* PHP SDK
* @version 2.0.0
* @author magicsky0@163.com
* @copyright © 2014, Ctrip Corporation. All rights reserved.
*/
//trigger_error默认错误处理
set_error_handler('my_error_handler');
function my_error_handler($err_no, $err_str, $err_file, $err_line)
{
if( !CU_DEVELOP ) return;
switch ($err_no)
{
case E_ERROR:
echo("<b>ERROR:</b> $err_str in $err_file on line $err_line<br>\n");
exit(1);
break;
case E_WARNING:
echo("<b>WARNING:</b> $err_str in $err_file on line $err_line<br>\n");
break;
case E_NOTICE:
echo("<b>NOTICE:</b> $err_str in $err_file on line $err_line<br>\n");
break;
case E_USER_ERROR:
echo("<b>USER ERROR:</b> $err_str in $err_file on line $err_line<br>\n");
exit(1);
break;
case E_USER_WARNING:
echo("<b>USER WARNING:</b> $err_str in $err_file on line $err_line<br>\n");
break;
case E_USER_NOTICE:
echo("<b>USER NOTICE:</b> $err_str in $err_file on line $err_line<br>\n");
break;
default:
echo("<b>UNKNOWN:</b> $err_str in $err_file on line $err_line<br>\n");
break;
}
}
function debugger($body, $header)
{
if( !CU_DEVELOP )
{
return;
}
echo "<meta charset='utf-8' />";
echo '<hr/>'.$header.':';
var_dump($body);
echo '<hr/>';
}
function do_post($url, $data)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_URL, $url);
$ret = curl_exec($ch);
curl_close($ch);
return $ret;
}
function get_url_contents($url)
{
if (ini_get("allow_url_fopen") == "1")
{
return file_get_contents($url);
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_URL, $url);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
if( !function_exists('gzdecode') )
{
function gzdecode($data)
{
$flags = ord ( substr ( $data, 3, 1 ) );
$headerlen = 10;
$extralen = 0;
$filenamelen = 0;
if ($flags & 4)
{
$extralen = unpack ( 'v', substr ( $data, 10, 2 ) );
$extralen = $extralen [1];
$headerlen += 2 + $extralen;
}
if ($flags & 8) // Filename
{
$headerlen = strpos ( $data, chr ( 0 ), $headerlen ) + 1;
}
if ($flags & 16) // Comment
{
$headerlen = strpos ( $data, chr ( 0 ), $headerlen ) + 1;
}
if ($flags & 2) // CRC at end of file
{
$headerlen += 2;
}
$unpacked = @gzinflate ( substr ( $data, $headerlen ) );
if ($unpacked === FALSE)
{
$unpacked = $data;
}
return $unpacked;
}
}
/**
* HTTP中transfer-coding域值为chunked对报文解码
* @param string $in
*/
if( !function_exists('http_chunked_decode') )
{
function http_chunked_decode($in)
{
$out = "";
while ( $in !="")
{
$lf_pos = strpos ( $in, "\012" );
if ($lf_pos === false)
{
$out .= $in;
break;
}
$chunk_hex = trim ( substr ( $in, 0, $lf_pos ) );
$sc_pos = strpos ( $chunk_hex, ';' );
if ($sc_pos !== false) $chunk_hex = substr ( $chunk_hex, 0, $sc_pos );
if ($chunk_hex =="")
{
$out .= substr ( $in, 0, $lf_pos );
$in = substr ( $in, $lf_pos + 1 );
continue;
}
$chunk_len = hexdec ( $chunk_hex );
if ($chunk_len)
{
$out .= substr ( $in, $lf_pos + 1, $chunk_len );
$in = substr ( $in, $lf_pos + 2 + $chunk_len );
}
else $in = "";
}
return $out;
}
}
if( !function_exists('json_encode') )
{
require CU_COMM_PATH.'json.php';
function json_encode($val)
{
$json = new Services_JSON();
return $json->encode($val);
}
function json_decode($val)
{
$json = new Services_JSON();
return $json->decode($val);
}
}
function crypt_encode($input, $key)
{
$input = str_replace("\n", "", $input);
$input = str_replace("\t", "", $input);
$input = str_replace("\r", "", $input);
$key = substr(md5($key), 0, 24);
$td = mcrypt_module_open('tripledes', '', 'ecb', '');
$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
mcrypt_generic_init($td, $key, $iv);
$encrypted_data = mcrypt_generic($td, $input);
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
return trim(chop(base64_encode($encrypted_data)));
}
function crypt_decode($input, $key)
{
$input = str_replace("\n", "", $input);
$input = str_replace("\t", "", $input);
$input = str_replace("\r", "", $input);
$input = trim(chop(base64_decode($input)));
$td = mcrypt_module_open('tripledes', '', 'ecb', '');
$key = substr(md5($key), 0, 24);
$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
mcrypt_generic_init($td, $key, $iv);
$decrypted_data = mdecrypt_generic($td, $input);
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
return trim(chop($decrypted_data));
}
//DES加密返回值使用base64重编码
function des_encode($string, $key)
{
$size = mcrypt_get_block_size(MCRYPT_DES, MCRYPT_MODE_CBC);
$pad = $size - (strlen($string) % $size);
$string .= str_repeat(chr($pad), $pad);
return base64_encode(mcrypt_cbc(MCRYPT_DES, $key, $string, MCRYPT_ENCRYPT, $key));
}
//DES解密 输入值是base64重编码过的
function des_decode($string, $key)
{
$string = base64_decode($string);
$text = mcrypt_cbc(MCRYPT_DES, $key, $string, MCRYPT_DECRYPT, $key);
$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);
}