最近有一个我的项目须要对接海康监控,这里我写了一个demo,不便咱们来调用海康监控的相干接口

海康监控接口文档:https://open.hikvision.com/do...

海康监控demo:

<?phpnamespace common\helpers;use common\models\Config;use Yii;use yii\helpers\ArrayHelper;use common\helpers\Universal;use yii\httpclient\Client;/** * 海康开放平台接口 * * @author wangjian * @since 0.1 */class Artemis{    //接口域名    public $url = '';    /**     * @var string app_key     */    public $app_key = '';    /**     * @var string app_secret     */    public $app_secret = '';    //毫秒级工夫戳    private $msec_time;    public $content_type = "application/json";//类型    public $accept = "*/*" ;//accept    public $method = 'POST';    //接口地址    private $api_url;    //传递参数    private $data;    /**     * @param string $api_url     * @param string $method     * @param array $data     */    public function __construct($api_url = '', $method = '', $data = [])    {        if ($api_url) {            $this->api_url = $api_url;        }        if ($method) {            $this->method = $method;        }        $this->data = $data;        $this->msec_time = $this->msectime();        $this->charset = 'utf-8';    }    /**     * 调用海康接口     */    public function apiInterface()    {        $sign = $this->get_sign($this->method,$this->api_url);        $headers = [            CURLOPT_HTTPHEADER => [            "Accept:".$this->accept,            "Content-Type:".$this->content_type,            "x-Ca-Key:".$this->app_key,            "X-Ca-Signature:".$sign,            "X-Ca-Timestamp:".$this->msec_time,            "X-Ca-Signature-Headers:"."x-ca-key,x-ca-timestamp",            ]                    ];        $result  = $this->curl($headers);        return json_decode($result,true);    }    /**     * 海康接口调用     * @param string $url     * @param string $postData     * @param array $headers     * @return bool|string     */    public function curl($headers = array())    {        $data = json_encode($this->data);        if (is_array($data)) {            $data = http_build_query($data);        }        $ch = curl_init();        $url = $this->url . $this->api_url;        curl_setopt($ch, CURLOPT_URL, $url);        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);        if ($this->method = 'POST') {            curl_setopt($ch, CURLOPT_POST, 1);        } else {            curl_setopt($ch, CURLOPT_POST, 0);        }        if ($data) {            curl_setopt($ch, CURLOPT_POSTFIELDS, $data);        }        curl_setopt($ch, CURLOPT_TIMEOUT, 30); //设置cURL容许执行的最长秒数        if (!empty($headers)) {            curl_setopt_array($ch, $headers);        }        //https申请 不验证证书和host        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);        $data = curl_exec($ch);        curl_close($ch);        return $data;    }        /**     * 签名     * 以appSecret为密钥,应用HmacSHA256算法对签名字符串生成音讯摘要,对音讯摘要应用BASE64算法生成签名(签名过程中的编码方式全为UTF-8)     */    function get_sign($method,$url){        $sign_str = $this->get_sign_str($method,$url); //签名字符串        $sign = hash_hmac('sha256', $sign_str, $this->app_secret,true); //生成音讯摘要        $result = base64_encode($sign);        return $result;    }    /**     * 获取签名字符串     *     * @param $postData     * @param $url     * @return string     */    function get_sign_str($method,$url){        $next = "\n";        $str = $method . $next;        $str .= $this->accept . $next;        $str .= $this->content_type . $next;        $str .= "x-ca-key:" . $this->app_key.$next;        $str .= "x-ca-timestamp:" . $this->msec_time.$next;        $str .= $url;        return $str;    }        /**     * 获取毫秒级工夫戳     */    public function msectime() {        list($msec, $sec) = explode(' ', microtime());        $msectime = (float)sprintf('%.0f', (floatval($msec) + floatval($sec)) * 1000);        return $msectime;    }}

须要将demo中url,app_key,app_secret改成您本人的即可

应用海康监控demo简略示例
分页获取监控点资源

$data = [     'pageNo' => 1,//指标页码,范畴 (0 , ~ )     'pageSize' => 1000,//每页记录数,范畴 (0 , 1000) ]; $apiUrl = '/artemis/api/resource/v1/cameras'; $artemis = new Artemis($apiUrl, 'POST', $data); $data=$artemis->apiInterface();

如上既能够获取到监控点资源,其余相干接口调用形式参照如上即可