diff --git a/app/Exceptions/MoJingException.php b/app/Exceptions/MoJingException.php new file mode 100644 index 0000000..84f8977 --- /dev/null +++ b/app/Exceptions/MoJingException.php @@ -0,0 +1,9 @@ + 'iframe', 'address' => (string) data_get($result, 'data.url'), - // 'expires' => (int) data_get($result, 'data.expiresIn'), + ]; + + // 中国电信魔镜 + case 'device-supplier-dianxin': + $client = new MoJingHttpClient( + config('services.dxmj.app_id'), + config('services.dxmj.app_secret'), + ); + $result = $client->get( + "/api/v3/channel/RealTimeVideo/{$device->sn}", + [ + 'transType' => 4, + 'natType' => 1, + ], + ); + + return [ + 'type' => 'flv', + 'address' => (string) data_get($result, 'data.playUrl'), ]; } diff --git a/app/Iot/MoJing/HttpClient.php b/app/Iot/MoJing/HttpClient.php new file mode 100644 index 0000000..3e46e8e --- /dev/null +++ b/app/Iot/MoJing/HttpClient.php @@ -0,0 +1,56 @@ +request('GET', $url, [ + 'query' => $query, + ]); + } + + protected function request(string $method, string $url, array $options = []): array + { + $timestamp = now()->getTimestampMs(); + + $sign = md5($this->appId.$this->appSecret.$timestamp); + + /** @var \Illuminate\Http\Client\Response */ + $response = Http::baseUrl(static::ENDPOINT_URL)->withHeaders([ + 'Authorization' => base64_encode( + json_encode([ + 'appId' => $this->appId, + 'time' => $timestamp, + 'sign' => $sign, + ]) + ), + ])->send($method, $url, $options); + + $result = $response->throw()->json(); + + $code = data_get($result, 'code', '-1'); + if ($code === 200) { + return $result; + } + + throw new MoJingException( + data_get($result, 'message', '请求失败').', 错误码: '.$code, + ); + } +} diff --git a/config/services.php b/config/services.php index 1983512..b2f492a 100644 --- a/config/services.php +++ b/config/services.php @@ -43,4 +43,9 @@ return [ 'rsa' => env('YDQLY_RSA'), ], + // 中国电信魔镜 + 'dxmj' => [ + 'app_id' => env('DXMJ_APP_ID'), + 'app_secret' => env('DXMJ_APP_SECRET'), + ], ]; diff --git a/database/seeders/KeywordsTableSeeder.php b/database/seeders/KeywordsTableSeeder.php index 84033cc..4a9dd59 100644 --- a/database/seeders/KeywordsTableSeeder.php +++ b/database/seeders/KeywordsTableSeeder.php @@ -53,7 +53,8 @@ class KeywordsTableSeeder extends Seeder ['key' => 'device-supplier-linkos', 'name' => '慧联无限', 'value' => ''], ['key' => 'device-supplier-biang', 'name' => '比昂', 'value' => ''], ['key' => 'device-supplier-yunfei', 'name' => '云飞', 'value' => ''], - ['key' => 'device-supplier-ydqly', 'name' => '移动千里眼', 'value' => ''], + ['key' => 'device-supplier-yidong', 'name' => '移动', 'value' => ''], + ['key' => 'device-supplier-dianxing', 'name' => '电信', 'value' => ''], ['key' => 'device-supplier-other', 'name' => '其它', 'value' => ''], ], ],