// +---------------------------------------------------------------------- // 应用公共文件 /** * 获取服务器当前时间 * @return string 时间 */ function getCurrentTime(){ return date("Y-m-d H:i:s", time()); } /** * 获取分页的查询条件 * @return array 返回一个条件数组 */ function getPaginatiorQuery(){ $query = \think\Collection::make(request()->get()); $query->clean(); $query->delete(config('paginate.var_page')); return $query->toArray(); } /** * 发送HTTP请求方法 * @param string $url 请求URL * @param array $params 请求参数 * @param string $method 请求方法GET/POST * @return array $data 响应数据 */ function http($url, $params, $method = 'GET', $header = array(), $multi = false){ $opts = array( CURLOPT_TIMEOUT => 30, CURLOPT_RETURNTRANSFER => 1, CURLOPT_SSL_VERIFYPEER => false, CURLOPT_SSL_VERIFYHOST => false, CURLOPT_HTTPHEADER => $header ); /* 根据请求类型设置特定参数 */ switch(strtoupper($method)){ case 'GET': $opts[CURLOPT_URL] = $url . '?' . http_build_query($params); break; case 'POST': //判断是否传输文件 $params = $multi ? $params : http_build_query($params); $opts[CURLOPT_URL] = $url; $opts[CURLOPT_POST] = 1; $opts[CURLOPT_POSTFIELDS] = $params; break; default: throw new Exception('不支持的请求方式!'); } /* 初始化并执行curl请求 */ $ch = curl_init(); curl_setopt_array($ch, $opts); $data = curl_exec($ch); $error = curl_error($ch); curl_close($ch); if($error) throw new Exception('请求发生错误:' . $error); return $data; } /** * 解包 * @param array $post * @return array */ function decode($post){ return $post; } /** * 生成唯一id(时间戳+随机数) * @return int */ function getId(){ return date('y').date('m').date('d').substr(time(),-5).substr(microtime(),2,5).sprintf('%03d',rand(0,999)); } /** * 短地址 * @param string $url 需要生成的字符串 * @param string $key 加盐 * @return string */ function shortCode($url, $key='fuck'){ $charset = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; $urlhash = md5($key . $url); $len = strlen($urlhash); //将加密后的串分成4段,每段4字节,对每段进行计算,一共可以生成四组短连接 for ($i = 0; $i < 4; $i++) { $urlhash_piece = substr($urlhash, $i * $len / 4, $len / 4); //将分段的位与0x3fffffff做位与,0x3fffffff表示二进制数的30个1,即30位以后的加密串都归零 //此处需要用到hexdec()将16进制字符串转为10进制数值型,否则运算会不正常 $hex = hexdec($urlhash_piece) & 0x3fffffff; //域名根据需求填写 // $short_url = "http://t.cn/"; $short_url = ""; //生成6位短网址 for ($j = 0; $j < 6; $j++) { //将得到的值与0x0000003d,3d为61,即charset的坐标最大值 $short_url .= $charset[$hex & 0x0000003d]; //循环完以后将hex右移5位 $hex = $hex >> 5; } $short_url_list[] = $short_url; } return $short_url_list[rand(0, count($short_url_list)-1)]; } /** * 得到支付宝签名字符串 * @param array $params * @param string $postCharset * @return string */ function getAliSignContent($params, $postCharset = 'UTF-8') { ksort($params); $stringToBeSigned = ""; $i = 0; foreach ($params as $k => $v) { if ($v && trim($v) && "@" != substr($v, 0, 1)) { // 转换成目标字符集 $v = characet($v, $postCharset); if ($i == 0) { $stringToBeSigned .= "$k" . "=" . "$v"; } else { $stringToBeSigned .= "&" . "$k" . "=" . "$v"; } $i++; } } unset ($k, $v); return $stringToBeSigned; } /** * 转换字符集编码 * @param $data * @param $targetCharset * @return string */ function characet($data, $targetCharset) { if (!empty($data)) { $data = mb_convert_encoding($data, $targetCharset, 'auto'); // $data = iconv($fileType, $targetCharset.'//IGNORE', $data); } return $data; } /** * 支付宝签名 * @param string $privateKey 商家私钥 * @param array $data 支付数据信息 * @param string $signType 签名类型 * @return string */ function aliSign($privateKey, $data, $signType = "RSA2") { $res = "-----BEGIN RSA PRIVATE KEY-----\n" . wordwrap($privateKey, 64, "\n", true) . "\n-----END RSA PRIVATE KEY-----"; ($res) or die('您使用的私钥格式错误,请检查RSA私钥配置'); if ("RSA2" == $signType) { openssl_sign($data, $sign, $res, OPENSSL_ALGO_SHA256); } else { openssl_sign($data, $sign, $res); } $sign = base64_encode($sign); return $sign; }