UpyunService.php 5.6 KB
<?php
/**
 * Created by PhpStorm.
 * User: zhl
 * Date: 2024/8/20
 * Time: 11:01
 */
namespace App\Services;

class UpyunService
{
    /**
     * 刷新进度查询
     * @param $task_id
     * @return mixed
     */
    public function purgePull($task_id)
    {
        $action = '/purge';
        if (FALSE == is_array($task_id))
            $task_id = [$task_id];
        $task_ids = implode(',', $task_id);
        $param = [
            'task_ids' => $task_ids,    // 需要查询进度的 task_id
        ];
        list($status, $result) = $this->curlRequest($action, $param, 'GET', $this->getHeader());
        return $result;
    }

    /**
     * URL 刷新
     * @param $url
     * @return mixed
     */
    public function purgePush($url)
    {
        $action = '/purge';
        if (FALSE == is_array($url))
            $url = [$url];
        $urls = implode(PHP_EOL, $url);
        $param = [
            'bucket' => '',
            'urls' => $urls,        // 需要批量刷新的文件 URL,多个 URL 通过换行符分隔
        ];
        list($status, $result) = $this->curlRequest($action, $param, 'POST', $this->getHeader());
        return $result;
    }

    /**
     * URL 预热
     * @param $url
     * @return mixed
     */
    public function preheatPush($url)
    {
        $action = '/preheat';
        if (FALSE == is_array($url))
            $url = [$url];
        $urls = implode(PHP_EOL, $url);
        $param = [
            'bucket' => '',
            'urls' => $urls,        // 需要批量刷新的文件 URL,多个 URL 通过换行符分隔
            'range_bytes' => ''
        ];
        list($status, $result) = $this->curlRequest($action, $param, 'POST', $this->getHeader());
        return $result;
    }

    /**
     * 统计流量
     * @param $start_time
     * @param $end_time
     * @param string $domain
     * @return mixed
     */
    public function commonData($start_time, $end_time, $domain = 'ecdn6.globalso.com')
    {
        $action = '/flow/common_data';
        $param = [
            'start_time' => $start_time,
            'end_time' => $end_time,
            'domain' => $domain,
        ];
//        dd($param);
        list($status, $result) = $this->curlRequest($action, $param, 'GET', $this->getHeader());
        return $result;
    }

    /**
     * 统计流量
     * @param $start_time
     * @param $end_time
     * @param string $domain
     * @return mixed
     */
    public function realTimeStatistics($start_time, $end_time, $domain = 'ecdn6.globalso.com')
    {
        $action = '/flow/real_time_statistics';
        $param = [
            'start_time' => $start_time,
            'end_time' => $end_time,
            'query_domain' => $domain,
            'query_type' => 'uri_flux'
        ];
//        dd($param);
        list($status, $result) = $this->curlRequest($action, $param, 'GET', $this->getHeader());
        return $result;
    }

    /**
     * 头信息需要携带授权token
     * @return array
     */
    public function getHeader()
    {
        return [
            'Authorization: Bearer ' . config('custom.upyun.token'),
        ];
    }

    /**
     * @param $url
     * @param $data
     * @param string $method
     * @param array $header
     * @param int $time_out
     * @return array
     */
    public function curlRequest($url, $data, $method = 'POST', $header = [], $time_out = 60)
    {
        $url = config('custom.upyun.api_url') . $url;
        if ($method == 'GET') {
            $url .= '?' . http_build_query($data);
        }
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_TIMEOUT, $time_out);
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        if ($data)
            curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
        curl_setopt($ch, CURLOPT_HTTPHEADER, array_merge([
                'Expect:',
                'Content-type: application/json',
                'Accept: application/json',
            ], $header)
        );
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
        $response = curl_exec($ch);
        $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_close($ch);
        return [$code, $response];
    }

    /**
     * 创建token
     * 该功能请不要重复使用
     * 注意:出于安全考虑,token 只有在调用该接口创建时返回一次,后续无法再通过其他接口查询token值,调用该接口后,请务必记录token值
     * {"access_token":"fe64817b-1f32-46f3-9ac3-a2993725708a","name":"v6-66c4333f60644","scope":"global","services":[],"created_at":1724134209,"expired_at":9999999999}
     * @return mixed
     */
    public function createToken()
    {
        $action = '/oauth/tokens';
        $param = [
            'username' => '',   // 用户名
            'password' => '',   // 密码
            'code' => md5(uniqid()),                    // 20-32位随机字符串,每次请求不能重复。只能包含数字、字母和中划线
            'name' => 'v6-' . uniqid(),                 // token 备注名,长度 20 的字符串,不能和其他 token 重复
            'scope' => 'global',                        // 权限 Valid Values:'global''bucket''operator''domain''cache''log''stats''oauth''security''srs'
//            'expired_at' => '',                         // integer token 过期时间的秒级时间戳,当该参数不设置时,表示永不过期
        ];
        list($status, $result) = $this->curlRequest($action, $param);
        return $result;
    }
}