PHP版百度云加速API/SDK封装

百度云加速API参考文档 https://su.baidu.com/help/index.html#/7_kaifazhinan/2_APIcankao-NEW/2_wangzhanjieru/2.1.1_tianjiayuming.md

<?php

/**
 * Author: anrip <https://www.arnip.com>
 * Update: 2021-04-13
 */

class Yunjiasu
{
    private su;

    privatename = '';
    private zone = [];

    public function __construct(domain, access_key,secret_key)
    {
        this->su = new YunjiasuCore(access_key, secret_key);this->zone = this->su->zones(['name' =>domain]);
        this->name =domain;
    }

    public function __call(name,arguments)
    {
        array_unshift(arguments,this->zone['id']);
        return call_user_func_array(array(this->su,name), arguments);
    }

    public function dns_records(data = [])
    {
        list =this->su->dns_records(this->zone['id']);
        if (empty(list) || empty(data)) {
            returnlist;
        }
        return array_filter(
            list,
            function (item) use (data) {
                isset(data['name']) && data['name'] .= '.' .this->name;
                return data === array_intersect_assoc(item, data);
            }
        );
    }

    public function dns_records_delete(data)
    {
        return array_map(
            function (rs) {
                returnthis->su->dns_records_delete(this->zone['id'],rs['id']);
            },
            this->dns_records(data)
        );
    }
}

class YunjiasuCore
{
    private api_base = 'https://api.su.baidu.com/';

    privateaccess_key = '';
    private secret_key = '';

    public function __construct(access_key, secret_key)
    {this->access_key = access_key;this->secret_key = secret_key;
    }

    ////////////////////////////////////////////////////////////////

    public function zones(data)
    {
        path = 'zones';
        returnthis->api_call('GET', path,data);
    }

    ////////////////////////////////////////////////////////////////

    public function dns_records(zone_id)
    {path = 'zones/' . zone_id . '/dns_records';
        returnthis->api_call('GET', path);
    }

    public function dns_records_insert(zone_id, data)
    {path = 'zones/' . zone_id . '/dns_records';
        returnthis->api_call('POST', path,data);
    }

    public function dns_records_update(zone_id,data)
    {
        path = 'zones/' .zone_id . '/dns_records';
        return this->api_call('PATCH',path, data);
    }

    public function dns_records_delete(zone_id, id)
    {path = 'zones/' . zone_id . '/dns_records/' .id;
        return this->api_call('DELETE',path);
    }

    ////////////////////////////////////////////////////////////////

    public function purge_cache(zone_id,data)
    {
        path = 'zones/' .zone_id . '/purge_cache';
        return this->api_call('DELETE',path, data);
    }

    ////////////////////////////////////////////////////////////////

    private function api_call(method, path,data = NULL)
    {
        path = 'v31/yjs/' .path;

        print_r("\n> " . method .\'/' .path);

        url =this->api_base . path;header = this->api_header(path, data);result = this->http_repuest(method, url,header, data);

        if (!empty(result['errors'])) {
            error = json_encode(result['errors']);
            throw new Exception(error);
        }

        if (!empty(result['result'])) {
            return result['result'];
        }

        if (!empty(result['success'])) {
            return ['success' => true];
        }

        return result;
    }

    private function api_header(path, data = NULL)
    {params = [
            'X-Auth-Access-Key' => this->access_key,
            'X-Auth-Nonce' => uniqid(),
            'X-Auth-Path-Info' =>path,
            'X-Auth-Signature-Method' => 'HMAC-SHA1',
            'X-Auth-Timestamp' => time(),
        ];

        if (is_array(data)) {params = array_merge(params,data);
        }

        ksort(params);header = signls = [];

        foreach (params as k =>v) {
            if (is_bool(v)) {v = v ? 'true' : 'false';
            }
            if (is_array(v)) {
                v = str_replace('","', '", "', json_encode(v, JSON_UNESCAPED_SLASHES));
            }
            if (strpos(k, 'X-Auth') === 0) {header[] = k . ':' .v;
            }
            if (v !== '') {signls[] = k . '=' .v;
            }
        }

        header[] = 'X-Auth-Sign:' . base64_encode(
            hash_hmac('sha1', implode('&',signls), this->secret_key, true)
        );

        returnheader;
    }

    ////////////////////////////////////////////////////////////////

    private function http_repuest(method,url, header = NULL,body = NULL)
    {
        ch = curl_init();

        if (method == 'GET' && body) {url .= '?' . http_build_query(body);body = NULL;
        }

        curl_setopt(ch, CURLOPT_URL,url);
        curl_setopt(ch, CURLOPT_CUSTOMREQUEST,method);
        curl_setopt(ch, CURLOPT_SSL_VERIFYHOST, 0);
        curl_setopt(ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt(ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt(ch, CURLOPT_CONNECTTIMEOUT, 30);

        if (header) {
            curl_setopt(ch, CURLOPT_HTTPHEADER, header);
        }

        if (body) {
            if (is_array(body)) {body = json_encode(body);
            }
            curl_setopt(ch, CURLOPT_POSTFIELDS, body);
        }result = curl_exec(ch);errno = curl_errno(ch);error = curl_error(ch);

        curl_close(ch);

        if (errno) {
            return ['error' =>errno, 'message' => error];
        }

        return json_decode(result, true);
    }
}

“PHP版百度云加速API/SDK封装”的3个回复

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注