LinkOS Http 客户端
parent
80ca23c2ed
commit
3d1d58ac61
|
|
@ -0,0 +1,114 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Iot\Linkos;
|
||||||
|
|
||||||
|
use Illuminate\Support\Carbon;
|
||||||
|
use Illuminate\Support\Facades\Http;
|
||||||
|
use RuntimeException;
|
||||||
|
|
||||||
|
class HttpClient
|
||||||
|
{
|
||||||
|
public const ENDPOINT_URL = 'http://service.easylinkin.com';
|
||||||
|
|
||||||
|
public function __construct(
|
||||||
|
protected readonly string $apiKey,
|
||||||
|
protected readonly string $apiSecret,
|
||||||
|
) {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取设备的历史数据
|
||||||
|
*
|
||||||
|
* @param string $deviceId
|
||||||
|
* @param \Illuminate\Support\Carbon $start
|
||||||
|
* @param \Illuminate\Support\Carbon $end
|
||||||
|
* @param array $pageable
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getDeviceFlowList(string $deviceId, Carbon $start, Carbon $end, array $pageable = []): array
|
||||||
|
{
|
||||||
|
$result = $this->post('/api/deviceFlow/v1/list', [
|
||||||
|
'device_id' => $deviceId,
|
||||||
|
'start_time' => $start->unix() * 1000,
|
||||||
|
'end_time' => $end->unix() * 1000,
|
||||||
|
'pageable' => array_merge([
|
||||||
|
'page' => 0,
|
||||||
|
'size' => 20,
|
||||||
|
], $pageable),
|
||||||
|
]);
|
||||||
|
|
||||||
|
return $result['data'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $url
|
||||||
|
* @param array $data
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function post(string $url, array $data = []): array
|
||||||
|
{
|
||||||
|
return $this->request('POST', $url, [
|
||||||
|
'json' => $data,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $method
|
||||||
|
* @param string $url
|
||||||
|
* @param array $options
|
||||||
|
* @return array
|
||||||
|
*
|
||||||
|
* @throws \Illuminate\Http\Client\RequestException
|
||||||
|
* @throws \RuntimeException
|
||||||
|
*/
|
||||||
|
public function request(string $method, string $url, array $options = []): array
|
||||||
|
{
|
||||||
|
$nonce = $this->nonce();
|
||||||
|
|
||||||
|
$timestamp = now()->getTimestampMs();
|
||||||
|
|
||||||
|
/** @var \Illuminate\Http\Client\Response */
|
||||||
|
$response = Http::withHeaders([
|
||||||
|
'Content-Type' => 'application/json',
|
||||||
|
'api-key' => $this->apiKey,
|
||||||
|
'Nonce' => $nonce,
|
||||||
|
'Timestamp' => $timestamp,
|
||||||
|
'Signature' => $this->sign(compact('nonce', 'timestamp')),
|
||||||
|
])->baseUrl(self::ENDPOINT_URL)->send($method, $url, $options);
|
||||||
|
|
||||||
|
$result = $response->throw()->json();
|
||||||
|
|
||||||
|
if (data_get($result, 'success') !== true) {
|
||||||
|
throw new RuntimeException(data_get($result, 'msg', '出错啦!'));
|
||||||
|
}
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param array $data
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
protected function sign(array $data): string
|
||||||
|
{
|
||||||
|
return sha1(
|
||||||
|
sprintf(
|
||||||
|
'%s%s%s',
|
||||||
|
$data['nonce'] ?? '',
|
||||||
|
$data['timestamp'] ?? '',
|
||||||
|
$this->apiSecret
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function nonce(): string
|
||||||
|
{
|
||||||
|
$nonce = '';
|
||||||
|
|
||||||
|
for ($i = 0; $i < 8; $i++) {
|
||||||
|
$nonce .= mt_rand(0, 9);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $nonce;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
namespace App\Providers;
|
namespace App\Providers;
|
||||||
|
|
||||||
|
use App\Iot\Linkos\HttpClient as LinkosHttpClient;
|
||||||
use Illuminate\Support\ServiceProvider;
|
use Illuminate\Support\ServiceProvider;
|
||||||
|
|
||||||
class AppServiceProvider extends ServiceProvider
|
class AppServiceProvider extends ServiceProvider
|
||||||
|
|
@ -13,7 +14,7 @@ class AppServiceProvider extends ServiceProvider
|
||||||
*/
|
*/
|
||||||
public function register()
|
public function register()
|
||||||
{
|
{
|
||||||
//
|
$this->registerLinkos();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -23,7 +24,19 @@ class AppServiceProvider extends ServiceProvider
|
||||||
*/
|
*/
|
||||||
public function boot()
|
public function boot()
|
||||||
{
|
{
|
||||||
//
|
|
||||||
\Schema::defaultStringLength(191);
|
\Schema::defaultStringLength(191);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 注册 Linkos 服务
|
||||||
|
*/
|
||||||
|
protected function registerLinkos(): void
|
||||||
|
{
|
||||||
|
$this->app->singleton(LinkosHttpClient::class, function ($app) {
|
||||||
|
return new LinkosHttpClient(
|
||||||
|
(string) $app['config']->get('services.linkos.key'),
|
||||||
|
(string) $app['config']->get('services.linkos.secret')
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -31,4 +31,9 @@ return [
|
||||||
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
|
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
|
||||||
],
|
],
|
||||||
|
|
||||||
|
'linkos' => [
|
||||||
|
'key' => env('LINKOS_API_KEY'),
|
||||||
|
'secret' => env('LINKOS_API_SECRET'),
|
||||||
|
],
|
||||||
|
|
||||||
];
|
];
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue