Pārlūkot izejas kodu

添加海康视频接口

qiuzijian 4 gadi atpakaļ
vecāks
revīzija
5d97990a19

+ 110 - 60
.idea/workspace.xml

@@ -2,7 +2,9 @@
 <project version="4">
   <component name="ChangeListManager">
     <list default="true" id="b5beace6-e4f4-419b-8299-c67e17af5998" name="Default Changelist" comment="">
-      <change beforePath="$PROJECT_DIR$/Modules/Mine/Http/Controllers/MineController.php" beforeDir="false" afterPath="$PROJECT_DIR$/Modules/Mine/Http/Controllers/MineController.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/Modules/Camera/Http/Controllers/Api/HaiKangController.php" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/Modules/Camera/Routes/api.php" beforeDir="false" afterPath="$PROJECT_DIR$/Modules/Camera/Routes/api.php" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/Modules/Mine/Services/MineServices.php" beforeDir="false" afterPath="$PROJECT_DIR$/Modules/Mine/Services/MineServices.php" afterDir="false" />
     </list>
     <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
@@ -49,11 +51,11 @@
           </provider>
         </entry>
       </file>
-      <file pinned="false" current-in-tab="true">
+      <file pinned="false" current-in-tab="false">
         <entry file="file://$PROJECT_DIR$/Modules/Mine/Services/MineServices.php">
           <provider selected="true" editor-type-id="text-editor">
             <state relative-caret-position="531">
-              <caret line="159" column="8" selection-start-line="159" selection-start-column="8" selection-end-line="159" selection-end-column="8" />
+              <caret line="159" selection-start-line="159" selection-end-line="159" />
               <folding>
                 <element signature="e#127#148#0#PHP" expanded="true" />
               </folding>
@@ -61,29 +63,53 @@
           </provider>
         </entry>
       </file>
+      <file pinned="false" current-in-tab="true">
+        <entry file="file://$PROJECT_DIR$/Modules/Camera/Http/Controllers/Api/HaiKangController.php">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="414">
+              <caret line="43" column="54" lean-forward="true" selection-start-line="40" selection-start-column="10" selection-end-line="43" selection-end-column="54" />
+              <folding>
+                <element signature="e#141#185#0#PHP" expanded="true" />
+              </folding>
+            </state>
+          </provider>
+        </entry>
+      </file>
       <file pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/storage/logs/laravel-2021-04-28.log">
+        <entry file="file://$PROJECT_DIR$/Modules/Camera/Routes/api.php">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="304">
-              <caret line="65" column="92" lean-forward="true" selection-start-line="65" selection-start-column="92" selection-end-line="65" selection-end-column="92" />
+            <state relative-caret-position="252">
+              <caret line="21" column="47" lean-forward="true" selection-start-line="21" selection-start-column="47" selection-end-line="21" selection-end-column="47" />
             </state>
           </provider>
         </entry>
       </file>
       <file pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/Modules/Admin/Traits/ClassifyMethod.php">
+        <entry file="file://$PROJECT_DIR$/Modules/Camera/Http/Controllers/Api/CameraApiController.php">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="253">
-              <caret line="87" column="20" selection-start-line="87" selection-start-column="20" selection-end-line="87" selection-end-column="20" />
+            <state relative-caret-position="63">
+              <caret line="8" column="46" lean-forward="true" selection-start-line="8" selection-start-column="10" selection-end-line="8" selection-end-column="46" />
+              <folding>
+                <element signature="e#141#162#0#PHP" expanded="true" />
+              </folding>
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/storage/logs/laravel-2021-04-28.log">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="222">
+              <caret line="61" column="43" selection-start-line="61" selection-start-column="43" selection-end-line="61" selection-end-column="43" />
             </state>
           </provider>
         </entry>
       </file>
       <file pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/Modules/Camera/Database/Migrations/2021_04_20_082221_create_camera_list_table.php">
+        <entry file="file://$PROJECT_DIR$/Modules/Admin/Traits/ClassifyMethod.php">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="357">
-              <caret line="19" column="66" lean-forward="true" selection-start-line="19" selection-start-column="12" selection-end-line="19" selection-end-column="66" />
+            <state relative-caret-position="253">
+              <caret line="87" column="20" selection-start-line="87" selection-start-column="20" selection-end-line="87" selection-end-column="20" />
             </state>
           </provider>
         </entry>
@@ -130,7 +156,6 @@
   <component name="IdeDocumentHistory">
     <option name="CHANGED_PATHS">
       <list>
-        <option value="$PROJECT_DIR$/Modules/Admin/Resources/views/layouts/master.blade.php" />
         <option value="$PROJECT_DIR$/Modules/Mine/Database/Migrations/2021_04_16_083654_create_mine_list_table.php" />
         <option value="$PROJECT_DIR$/Modules/Mine/Entities/MineList.php" />
         <option value="$PROJECT_DIR$/Modules/Mine/Routes/web.php" />
@@ -169,7 +194,6 @@
         <option value="$PROJECT_DIR$/Modules/Mine/Routes/api.php" />
         <option value="$PROJECT_DIR$/Modules/Mine/Http/Controllers/Api/MineApiController.php" />
         <option value="$PROJECT_DIR$/.env" />
-        <option value="$PROJECT_DIR$/Modules/Camera/Routes/api.php" />
         <option value="$PROJECT_DIR$/app/Helpers.php" />
         <option value="$PROJECT_DIR$/Modules/Camera/Http/Controllers/Api/CameraApiController.php" />
         <option value="$PROJECT_DIR$/Modules/Camera/Services/CameraServices.php" />
@@ -181,6 +205,8 @@
         <option value="$PROJECT_DIR$/storage/logs/laravel-2021-04-28.log" />
         <option value="$PROJECT_DIR$/Modules/Mine/Http/Controllers/MineController.php" />
         <option value="$PROJECT_DIR$/Modules/Mine/Services/MineServices.php" />
+        <option value="$PROJECT_DIR$/Modules/Camera/Routes/api.php" />
+        <option value="$PROJECT_DIR$/Modules/Camera/Http/Controllers/Api/HaiKangController.php" />
       </list>
     </option>
   </component>
@@ -350,7 +376,31 @@
               <item name="video_system" type="462c0819:PsiDirectoryNode" />
               <item name="Modules" type="462c0819:PsiDirectoryNode" />
               <item name="Camera" type="462c0819:PsiDirectoryNode" />
-              <item name="Entities" type="462c0819:PsiDirectoryNode" />
+              <item name="Http" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="video_system" type="b2602c69:ProjectViewProjectNode" />
+              <item name="video_system" type="462c0819:PsiDirectoryNode" />
+              <item name="Modules" type="462c0819:PsiDirectoryNode" />
+              <item name="Camera" type="462c0819:PsiDirectoryNode" />
+              <item name="Http" type="462c0819:PsiDirectoryNode" />
+              <item name="Controllers" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="video_system" type="b2602c69:ProjectViewProjectNode" />
+              <item name="video_system" type="462c0819:PsiDirectoryNode" />
+              <item name="Modules" type="462c0819:PsiDirectoryNode" />
+              <item name="Camera" type="462c0819:PsiDirectoryNode" />
+              <item name="Http" type="462c0819:PsiDirectoryNode" />
+              <item name="Controllers" type="462c0819:PsiDirectoryNode" />
+              <item name="Api" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="video_system" type="b2602c69:ProjectViewProjectNode" />
+              <item name="video_system" type="462c0819:PsiDirectoryNode" />
+              <item name="Modules" type="462c0819:PsiDirectoryNode" />
+              <item name="Camera" type="462c0819:PsiDirectoryNode" />
+              <item name="Routes" type="462c0819:PsiDirectoryNode" />
             </path>
             <path>
               <item name="video_system" type="b2602c69:ProjectViewProjectNode" />
@@ -416,18 +466,18 @@
       <option name="presentableId" value="Default" />
       <updated>1618368322468</updated>
       <workItem from="1618368323697" duration="143000" />
-      <workItem from="1618368497550" duration="158229000" />
+      <workItem from="1618368497550" duration="159191000" />
     </task>
     <servers />
   </component>
   <component name="TimeTrackingManager">
-    <option name="totallyTimeSpent" value="158372000" />
+    <option name="totallyTimeSpent" value="159334000" />
   </component>
   <component name="ToolWindowManager">
     <frame x="0" y="0" width="1440" height="900" extended-state="0" />
     <editor active="true" />
     <layout>
-      <window_info content_ui="combo" id="Project" order="0" visible="true" weight="0.2532189" />
+      <window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.2532189" />
       <window_info id="Structure" order="1" side_tool="true" weight="0.25" />
       <window_info id="Favorites" order="2" side_tool="true" />
       <window_info anchor="bottom" id="Message" order="0" />
@@ -452,16 +502,6 @@
     <option name="version" value="1" />
   </component>
   <component name="editorHistoryManager">
-    <entry file="file://$PROJECT_DIR$/Modules/Admin/Http/Controllers/UsersController.php">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="2996">
-          <caret line="157" column="45" selection-start-line="144" selection-start-column="7" selection-end-line="157" selection-end-column="45" />
-          <folding>
-            <element signature="e#136#149#0#PHP" expanded="true" />
-          </folding>
-        </state>
-      </provider>
-    </entry>
     <entry file="file://$PROJECT_DIR$/storage/logs/laravel-2021-04-25.log">
       <provider selected="true" editor-type-id="text-editor" />
     </entry>
@@ -597,13 +637,6 @@
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/vendor/laravel/framework/src/Illuminate/Support/helpers.php">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="260">
-          <caret line="640" column="13" selection-start-line="640" selection-start-column="13" selection-end-line="640" selection-end-column="13" />
-        </state>
-      </provider>
-    </entry>
     <entry file="file://$PROJECT_DIR$/vendor/predis/predis/src/Client.php">
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="253">
@@ -683,23 +716,6 @@
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/Modules/Camera/Routes/api.php">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="147">
-          <caret line="16" column="14" selection-start-line="16" selection-start-column="14" selection-end-line="16" selection-end-column="14" />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/Modules/Camera/Http/Controllers/Api/CameraApiController.php">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="487">
-          <caret line="59" column="5" selection-start-line="59" selection-start-column="5" selection-end-line="59" selection-end-column="5" />
-          <folding>
-            <element signature="e#141#162#0#PHP" expanded="true" />
-          </folding>
-        </state>
-      </provider>
-    </entry>
     <entry file="file://$PROJECT_DIR$/app/Helpers.php">
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="316">
@@ -783,13 +799,6 @@
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/storage/logs/laravel-2021-04-28.log">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="304">
-          <caret line="65" column="92" lean-forward="true" selection-start-line="65" selection-start-column="92" selection-end-line="65" selection-end-column="92" />
-        </state>
-      </provider>
-    </entry>
     <entry file="file://$PROJECT_DIR$/Modules/Mine/Enum/MineEnum.php">
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="168">
@@ -807,15 +816,56 @@
         </state>
       </provider>
     </entry>
+    <entry file="file://$PROJECT_DIR$/Modules/Camera/Http/Controllers/Api/CameraApiController.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="63">
+          <caret line="8" column="46" lean-forward="true" selection-start-line="8" selection-start-column="10" selection-end-line="8" selection-end-column="46" />
+          <folding>
+            <element signature="e#141#162#0#PHP" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/vendor/laravel/framework/src/Illuminate/Support/helpers.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="260">
+          <caret line="640" column="13" selection-start-line="640" selection-start-column="13" selection-end-line="640" selection-end-column="13" />
+        </state>
+      </provider>
+    </entry>
     <entry file="file://$PROJECT_DIR$/Modules/Mine/Services/MineServices.php">
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="531">
-          <caret line="159" column="8" selection-start-line="159" selection-start-column="8" selection-end-line="159" selection-end-column="8" />
+          <caret line="159" selection-start-line="159" selection-end-line="159" />
           <folding>
             <element signature="e#127#148#0#PHP" expanded="true" />
           </folding>
         </state>
       </provider>
     </entry>
+    <entry file="file://$PROJECT_DIR$/Modules/Camera/Routes/api.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="252">
+          <caret line="21" column="47" lean-forward="true" selection-start-line="21" selection-start-column="47" selection-end-line="21" selection-end-column="47" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/storage/logs/laravel-2021-04-28.log">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="222">
+          <caret line="61" column="43" selection-start-line="61" selection-start-column="43" selection-end-line="61" selection-end-column="43" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/Modules/Camera/Http/Controllers/Api/HaiKangController.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="414">
+          <caret line="43" column="54" lean-forward="true" selection-start-line="40" selection-start-column="10" selection-end-line="43" selection-end-column="54" />
+          <folding>
+            <element signature="e#141#185#0#PHP" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
   </component>
 </project>

+ 244 - 0
Modules/Camera/Http/Controllers/Api/HaiKangController.php

@@ -0,0 +1,244 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: qiuzijian
+ * Date: 2021-04-28
+ * Time: 20:59
+ */
+
+namespace Modules\Camera\Http\Controllers\Api;
+
+use App\Http\Controllers\Api\BaseController;
+use Illuminate\Http\Request;
+
+
+class HaiKangController extends BaseController
+{
+    protected $pre_url;  // 海康接口地址
+    protected $app_key;  // 海康app_key
+    protected $app_secret;  // 海康app_secret
+    protected $sign;//  签名
+    protected $time;//  时间戳
+    protected $artemis;//  OpenAPI接口的上下文
+
+    public function __construct(Request $request)
+    {
+//        if ($request->has('mine')) {
+//            $this->pre_url    = config('haikang.' . $request->input('mine') . '.pre_url');  // https://120.253.79.51:4433
+//            $this->app_key    = config('haikang.' . $request->input('mine') . '.app_key');  // 25720460
+//            $this->app_secret = config('haikang.' . $request->input('mine') . '.app_secret');  // qqP7NLcIDwO9MgtYmp8L
+//            $this->artemis    = config('haikang.' . $request->input('mine') . '.artemis');  // /artemis
+//        } else {
+//            $this->pre_url    = env('HAI_KANG_URL');  // https://120.253.79.51:4433
+//            $this->app_key    = env('HAI_KANG_APP_KEY');  // 25720460
+//            $this->app_secret = env('HAI_KANG_APP_SECRET');  // qqP7NLcIDwO9MgtYmp8L
+//            $this->artemis    = env('HAI_KANG_ARTEMIS_PATH');  // /artemis
+//        }
+        $this->pre_url    = 'https://10.71.252.64:4433';  // https://120.253.79.51:4433
+        $this->app_key    = '25720460';  // 25720460
+        $this->app_secret = 'qqP7NLcIDwO9MgtYmp8L';  // qqP7NLcIDwO9MgtYmp8L
+        $this->artemis    = '/artemis';  // /artemis
+//        $this->pre_url    = 'https://120.253.79.51:4433';  // https://120.253.79.51:4433
+//        $this->app_key    = '25720460';  // 25720460
+//        $this->app_secret = 'qqP7NLcIDwO9MgtYmp8L';  // qqP7NLcIDwO9MgtYmp8L
+//        $this->artemis    = '/artemis';  // /artemis
+        list($msec, $sec) = explode(' ', microtime());
+        $this->time = (float)sprintf('%.0f', (floatval($msec) + floatval($sec)) * 1000);
+    }
+
+    /**
+     * 获取区域列表
+     * @param Request $request
+     * @return bool|mixed|string
+     */
+    public function getRegionsList(Request $request)
+    {
+        $url = $this->artemis . '/api/resource/v1/regions';
+        //请求参数
+        $params             = [];
+        $params['pageNo']   = $request->has('pageNo') ? intval($request->input('pageNo')) : 1;
+        $params['pageSize'] = $request->has('pageSize') ? intval($request->input('pageSize')) : 1000;
+        $this->sign         = $this->get_sign($url);
+
+        $result = $this->curlPost($this->pre_url . $url, json_encode($params));
+        $result = json_decode($result, true);
+        if (isset($result['code']) && $result['code'] == 0) {
+            $list = $result['data']['list'];
+            foreach ($list as $key => $item) {
+                if ($item['parentIndexCode'] == '-1') {
+                    unset($list[$key]);
+                }
+            }
+            $result['data']['list'] = array_values($list);
+        }
+        if ($request->has('type') && $request->input('type') == 'has_sub') {
+            $result['data']['list'] = $this->regionsTree($result['data']['list']);
+        }
+        return $result;
+    }
+
+    protected function regionsTree($regions, $pid = 'root000000')
+    {
+        $arr = [];
+        if (empty($regions)) {
+            return [];
+        }
+        foreach ($regions as $key => $value) {
+            if (isset($value['parentIndexCode']) && $value['parentIndexCode'] == $pid) {
+                $arr[$key]['indexCode']       = $value['indexCode'];
+                $arr[$key]['name']            = $value['name'];
+                $arr[$key]['parentIndexCode'] = $value['parentIndexCode'];
+                $arr[$key]['treeCode']        = $value['treeCode'];
+                $arr[$key]['children']        = array_values(self::regionsTree($regions, $value['indexCode']));
+//                if (count($arr[$key]['children']) == 0) {
+//                    unset($arr[$key]);
+//                }
+            }
+        }
+        return array_values($arr);
+    }
+
+    /**
+     * 获取区域监控列表
+     * @param Request $request
+     * @return bool|mixed|string
+     */
+    public function getCamerasList(Request $request)
+    {
+        if (!$request->has('indexCode')) {
+            return $this->error(1, '缺少必要参数');
+        }
+        $url = $this->artemis . '/api/resource/v1/regions/regionIndexCode/cameras';
+        //请求参数
+        $params                    = [];
+        $params['regionIndexCode'] = $request->input('indexCode');
+        $params['pageNo']          = $request->has('pageNo') ? intval($request->input('pageNo')) : 1;
+        $params['pageSize']        = $request->has('pageSize') ? intval($request->input('pageSize')) : 1000;
+        $this->sign                = $this->get_sign($url);
+
+        $result = $this->curlPost($this->pre_url . $url, json_encode($params));
+        $result = json_decode($result, true);
+        return $result;
+    }
+
+    /**
+     * 获取摄像头码流url
+     * @param Request $request
+     * @return array|mixed
+     */
+    public function getCamerasUrl(Request $request)
+    {
+        if (!$request->has('cameraIndexCode')) {
+            return $this->error(1, '缺少必要参数');
+        }
+        $url          = $this->artemis . '/api/video/v1/cameras/previewURLs';
+        $cameras_info = json_decode($this->getCamerasInfo($request), true);
+        //请求参数
+        $params = [];
+//        $params['regionIndexCode'] = $request->input('regionIndexCode');
+        $params['cameraIndexCode'] = $request->input('cameraIndexCode');
+        $params['streamType']      = 0;
+        $params['protocol']        = 'rtsp';
+        $params['transmode']       = 1;
+        if ($cameras_info['data']['channelType'] == 'analog') {
+            $params['expand'] = 'transcode=1&videotype=h264';
+        }
+        $this->sign = $this->get_sign($url);
+
+        $result = $this->curlPost($this->pre_url . $url, json_encode($params));
+        $result = json_decode($result, true);
+        if (isset($result['code']) && $result['code'] == 0) {  // 将内网地址替换为外网地址
+            $video_url = $result['data']['url'];
+            preg_match('/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/i', $video_url, $res);  // 提取内网ip
+            preg_match('/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/i', $this->pre_url, $res_n);  // 提取外网ip
+            $result['data']['url'] = str_replace($res, $res_n, $video_url);
+        }
+        return $result;
+    }
+
+    /**
+     * 获取摄像头详情
+     * @param Request $request
+     * @return array|bool|string
+     */
+    public function getCamerasInfo(Request $request)
+    {
+        if (!$request->has('cameraIndexCode')) {
+            return $this->error(1, '缺少必要参数');
+        }
+        $url = $this->artemis . '/api/resource/v1/cameras/indexCode';
+        //请求参数
+        $params                    = [];
+        $params['cameraIndexCode'] = $request->input('cameraIndexCode');
+
+        $this->sign = $this->get_sign($url);
+        $result     = $this->curlPost($this->pre_url . $url, json_encode($params));
+        return $result;
+    }
+
+    /**
+     * 以appSecret为密钥,使用HmacSHA256算法对签名字符串生成消息摘要,对消息摘要使用BASE64算法生成签名(签名过程中的编码方式全为UTF-8)
+     */
+    protected function get_sign($url)
+    {
+        $sign_str = $this->get_sign_str($url); //签名字符串
+        $priKey   = $this->app_secret;
+        $sign     = hash_hmac('sha256', $sign_str, $priKey, true); //生成消息摘要
+        $result   = base64_encode($sign);
+        return $result;
+    }
+
+    /**
+     * 生成签名
+     * @param $url
+     * @return string
+     */
+    protected function get_sign_str($url)
+    {
+        // $next = "\n";
+        $next = "\n";
+        $str  = "POST" . $next . '*/*' . $next . 'application/json' . $next;
+        $str  .= "x-ca-key:" . $this->app_key . $next;
+        $str  .= "x-ca-timestamp:" . $this->time . $next;
+        $str  .= $url;
+        return $str;
+    }
+
+    /**
+     * 发送请求
+     * @param string $url
+     * @param string $postData
+     * @param array  $options
+     * @return bool|string
+     */
+    public function curlPost($url = '', $postData = '', $options = array())
+    {
+        if (is_array($postData)) {
+            $postData = http_build_query($postData);
+        }
+        $ch = curl_init();
+        curl_setopt($ch, CURLOPT_URL, $url);
+        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+        curl_setopt($ch, CURLOPT_POST, 1);
+        curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
+        curl_setopt($ch, CURLOPT_TIMEOUT, 30); //设置cURL允许执行的最长秒数
+
+        curl_setopt_array($ch, array(
+            CURLOPT_HTTPHEADER => array(
+                "Accept:" . '*/*',
+                "Content-Type:" . 'application/json',
+                "x-Ca-Key:" . $this->app_key,
+                "X-Ca-Signature:" . $this->sign,
+                "X-Ca-Timestamp:" . $this->time,
+                "X-Ca-Signature-Headers:" . "x-ca-key,x-ca-timestamp",
+            )
+        ));
+
+        //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;
+    }
+}

+ 6 - 0
Modules/Camera/Routes/api.php

@@ -12,7 +12,13 @@
 */
 
 Route::namespace('Api')->group(function () {
+    //视频接口
     Route::post('camera/getlist', 'CameraApiController@getCamerasList');
     Route::post('camera/geturl', 'CameraApiController@getCamerasUrl');
     Route::get('camera/stopstream', 'CameraApiController@stopCamerasStream');
+
+    //海康视频接口
+    Route::get('haikang/monitor/regions/list', 'HaiKangController@getRegionsList');
+    Route::get('haikang/monitor/cameras/list', 'HaiKangController@getCamerasList');
+    Route::get('haikang/monitor/cameras/url', 'HaiKangController@getCamerasUrl');
 });

+ 1 - 1
Modules/Mine/Services/MineServices.php

@@ -157,7 +157,7 @@ class MineServices{
                 ]
             );
         }
-        
+
         return $result;
     }