123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- <?php
- // +----------------------------------------------------------------------
- // | ThinkPHP [ WE CAN DO IT JUST THINK ]
- // +----------------------------------------------------------------------
- // | Copyright (c) 2006-2016 http://thinkphp.cn All rights reserved.
- // +----------------------------------------------------------------------
- // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
- // +----------------------------------------------------------------------
- // | Author: 流年 <liu21st@gmail.com>
- // +----------------------------------------------------------------------
- // 应用公共文件
- /**
- * 获取服务器当前时间
- * @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;
- }
|