提交其他文件
This commit is contained in:
138
app/common/service/iot/DoorService.php
Normal file
138
app/common/service/iot/DoorService.php
Normal file
@ -0,0 +1,138 @@
|
||||
<?php
|
||||
|
||||
namespace app\common\service\iot;
|
||||
|
||||
use think\facade\Cache;
|
||||
use think\facade\Config;
|
||||
|
||||
/**
|
||||
* 门禁控制类
|
||||
*/
|
||||
class DoorService
|
||||
{
|
||||
/**
|
||||
* 获取通通锁token(带缓存)
|
||||
*/
|
||||
public function getTtlockToken()
|
||||
{
|
||||
$config = Config::get('door.ttlock', []);
|
||||
|
||||
// 检查缓存
|
||||
if (Cache::has('ttlock_token')) {
|
||||
return Cache::get('ttlock_token');
|
||||
}
|
||||
|
||||
$apiurl = 'https://cnapi.sciener.com' . '/oauth2/token';
|
||||
$postData = [
|
||||
'clientId' =>'f5e04886d0b94e128a3115f895e29e22',
|
||||
'clientSecret' => '3b3d0eea32242e6b8dddb6ddb9fa9080',
|
||||
'username' => '18184888888',
|
||||
'password' => md5('cz221001')
|
||||
];
|
||||
|
||||
$result = $this->ttcurl($apiurl, $postData);
|
||||
if (isset($result['access_token'])) {
|
||||
$expireTime = $result['expires_in'];
|
||||
$accessToken = $result['access_token'];
|
||||
|
||||
// 缓存token,提前5秒过期
|
||||
Cache::set('ttlock_token', $accessToken, $expireTime - 5);
|
||||
|
||||
return $accessToken;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 通通锁-网关开锁
|
||||
*/
|
||||
public function unlockByNetwork($lockId)
|
||||
{
|
||||
|
||||
$apiurl = 'https://cnapi.sciener.com' . '/v3/lock/unlock';
|
||||
$accessToken = $this->getTtlockToken();
|
||||
|
||||
$postData = [
|
||||
'clientId' => 'f5e04886d0b94e128a3115f895e29e22',
|
||||
'accessToken' => $accessToken,
|
||||
'lockId' => $lockId,
|
||||
'date' => time() * 1000
|
||||
];
|
||||
|
||||
|
||||
return $this->ttcurl($apiurl, $postData);
|
||||
}
|
||||
|
||||
/**
|
||||
* 通通锁-创建临时密码
|
||||
*/
|
||||
public function createTempPassword($lockId, $password, $name, $startTime, $endTime)
|
||||
{
|
||||
$config = Config::get('door.ttlock', []);
|
||||
|
||||
$apiurl = 'https://cnapi.sciener.com' . '/v3/keyboardPwd/add';
|
||||
$accessToken = $this->getTtlockToken();
|
||||
|
||||
$postData = [
|
||||
'clientId' => 'f5e04886d0b94e128a3115f895e29e22',
|
||||
'accessToken' => $accessToken,
|
||||
'lockId' => $lockId,
|
||||
'keyboardPwd' => $password,
|
||||
'keyboardPwdType' => '3', // 时效密码
|
||||
'keyboardPwdName' => $name,
|
||||
'startDate' => $startTime * 1000,
|
||||
'endDate' => $endTime * 1000,
|
||||
'addType' => 2,
|
||||
'date' => time() * 1000
|
||||
];
|
||||
|
||||
return $this->ttcurl($apiurl, $postData);
|
||||
}
|
||||
|
||||
/**
|
||||
* 通通锁-删除密码
|
||||
*/
|
||||
public function deletePassword($lockId, $passwordId)
|
||||
{
|
||||
$config = Config::get('door.ttlock', []);
|
||||
|
||||
$apiurl = $config['base_url'] . '/v3/keyboardPwd/delete';
|
||||
$accessToken = $this->getTtlockToken();
|
||||
|
||||
$postData = [
|
||||
'clientId' => $config['client_id'],
|
||||
'lockId' => $lockId,
|
||||
'accessToken' => $accessToken,
|
||||
'keyboardPwdId' => $passwordId,
|
||||
'deleteType' => 2,
|
||||
'date' => time() * 1000
|
||||
];
|
||||
|
||||
return $this->ttcurl($apiurl, $postData);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 通通锁CURL请求(保持原有格式)
|
||||
*/
|
||||
private function ttcurl($apiurl, $postData)
|
||||
{
|
||||
$data_urlencode = http_build_query($postData);
|
||||
$ch = curl_init($apiurl);
|
||||
curl_setopt($ch, CURLOPT_POST, true);
|
||||
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_urlencode);
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
|
||||
// 修复SSL问题
|
||||
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
|
||||
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
|
||||
|
||||
$result = curl_exec($ch);
|
||||
curl_close($ch);
|
||||
|
||||
return json_decode($result, true);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user