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
PHP

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?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);
}