基于 Yii2 开发的海康威视综合安防平台的接口组件 [ 2.0 版本 ]
在不断学习和使用 Yii2 的过程中,慢慢写出YII特有性质的功能代码并用于实际工作中。
在这里发布一个 Yii2 组件化的一个接口功能,愿和大家学习交流
GitHub地址:Yi2-iSecureCenter
组件代码(组件主要的实现):
namespace jcore\iSecureCenter;
use Yii;
use yii\base\Component;
use yii\web\HttpException;
use yii\web\BadRequestHttpException;
class iSecureCenter extends Component
{
CONST EVENT_BEFORE_SEND = 'beforeSend';
CONST EVENT_AFTER_SEND = 'afterSend';
//海康威视综合安防管理平台version
public $version;
// 合作方接口主机
public $host;
//设置OpenAPI接口的上下文
public $artemisPath = '/artemis';
//TODO:合作方 多合作方配置,加入一层service
public $partners;
public $requestTimeout = 5;
public $xCaSignatureHeaders = 'x-ca-key';
private $_service;
public function init()
{
parent::init(); // TODO: Change the autogenerated stub
// TODO: empty($this->partners) 可以抛出异常也可以走数据库取数据取一个默认配置
// $this->partners['adminPartner'] = [
// 'hikvideo_icenter_appkey' => $dbConfig['hikvideo_icenter_appkey'],
// 'hikvideo_icenter_secret' => $dbConfig['hikvideo_icenter_secret'],
// ];
}
public function getService($partner = 'adminPartner')
{
if (!isset($this->partners[$partner])) {
throw new BadRequestHttpException("找不到该合作方,无法连接到综合安防管理平台");
}
$config = $this->partners[$partner];
$this->_service = Service::getInstance($this->host , $this->artemisPath, $config['hikvideo_icenter_appkey'], $config['hikvideo_icenter_secret']);
return $this->_service;
}
public function send($apiClass, $action, $data = [], $partner = 'adminPartner')
{
if (!$this->beforeSend($partner, $apiClass, $action, $data)) {
return false;
}
Yii::info('...Sending Hk Open Api...partner#' . $partner . '#action#' . $action, __METHOD__);
$response = [];
try {
$response = $this->getService($partner)->send($apiClass, $action, $data);
} catch (\Throwable $throwable) {
throw new HttpException(200, "无法连接到综合安防管理平台(请检查服务器)", 1001);
} finally {
$this->afterSend($partner, $apiClass, $action, $data, $response);
}
return empty($response) ? null : $response->getData();
}
public function beforeSend($partner, $apiClass, $action, $data)
{
$event = new MessageEvent([
'partner' => $partner,
'apiClass' => $apiClass,
'data' => $data,
'action' => $action
]);
$this->trigger(self::EVENT_BEFORE_SEND, $event);
return $event->isValid;
}
public function afterSend($partner, $apiClass, $action, $data, $response)
{
$event = new MessageEvent([
'partner' => $partner,
'apiClass' => $apiClass,
'data' => $data,
'action' => $action,
'response' => $response
]);
$this->trigger(self::EVENT_AFTER_SEND, $event);
}
}
jiechengyang chengdu
注册时间:2019-07-27
最后登录:2023-11-24
在线时长:4小时16分
最后登录:2023-11-24
在线时长:4小时16分
- 粉丝1
- 金钱20
- 威望10
- 积分160
热门源码
- 基于 Yii 2 + Bootstrap 3 搭建一套后台管理系统 CMF
- 整合完 yii2-rbac+yii2-admin+adminlte 等库的基础开发后台源码
- 适合初学者学习的一款通用的管理后台
- yii-goaop - 将 goaop 集成到 Yii,在 Yii 中优雅的面向切面编程
- yii-log-target - 监控系统异常且多渠道发送异常信息通知
- 店滴云1.3.0
- 面向对象的一小步:添加 ActiveRecord 的 Scope 功能
- Yii2 开源商城 FecShop
- 基于 Yii2 开发的多店铺商城系统,免费开源 + 适合二开
- leadshop - 基于 Yii2 开发的一款免费开源且支持商业使用的商城管理系统
共 1 条评论
占楼先!支持楼主!~