一个 PHP 类,提供对 Ubiquiti 的UniFi 网络应用程序API 的访问。
我们的 API 浏览器工具使用该类,可以在此处找到该工具。
该包可以手动安装或使用composer/packagist安装,以便轻松包含在您的项目中。有关更多详细信息,请参阅下面的安装说明。
软件 | 版本 |
---|---|
UniFi 网络应用程序/控制器 | 5.XX、6.XX、7.XX、8.XX( 8.5.6已确认) |
UniFi操作系统 | 3.X、4.X( 4.1.15已确认) |
服务器具有:
PHP 7.4.0或更高版本(对于 PHP 7.3.x 及更低版本,使用版本 1.1.83)
PHP json 和 PHP cURL 模块
在 Apache 2.4 上使用 PHP 7.4.27 和 cURL 7.60.0 以及 PHP 8.3.11 和 cURL 7.81.0 进行测试
该服务器与运行 UniFi 控制器的主机和端口(通常为 TCP 端口 8443 或 UniFi 操作系统的端口 443)之间的直接网络连接
您必须使用具有本地访问权限的帐户才能通过此类访问UniFi控制器API
不要使用 UniFi Cloud 帐户,并且不要为您在此类中使用的帐户启用 2FA
自版本 1.1.47 起添加了对基于 UniFi 操作系统的控制器的支持。这些设备/服务已被验证可以正常工作:
UniFi 梦想路由器 (UDR)
UniFi 梦想机器 (UDM)
UniFi Dream Machine Pro (UDM PRO)
UniFi Cloud Key Gen2 (UCK G2),固件版本 2.0.24 或更高版本
UniFi Cloud Key Gen2 Plus (UCK G2 Plus),固件版本 2.0.24 或更高版本
UniFi Express (UX)
UniFi 梦想墙 (UDW)
UniFi 云网关 Ultra (UCG-Ultra)
UniFi CloudKey 企业版(CK-企业版)
UniFi 企业堡垒网关 (EFG)
官方 UniFi 托管,详细信息请参见此处
该类自动检测 UniFi OS 控制台并相应地调整 URL 和多个函数/方法。
基于 UniFi 操作系统的控制器要求您使用端口443而不是用于“基于软件”的控制器的8443进行连接。如果您自己的代码对传递给构造函数的 URL 实施严格验证,请调整您的逻辑,以在使用基于 UniFi 操作系统的控制器时允许不带端口后缀或带端口 443 的 URL。
通过 WAN 接口连接到基于 UniFi 操作系统的网关时,您需要创建特定的防火墙规则以允许这样做。有关更多详细信息,请参阅 WiFi 艺术网站上的这篇博文:https://artofwifi.net/blog/how-to-access-the-unifi-controller-by-wan-ip-or-hostname-on-a- udm-pro
其中描述的“自定义防火墙规则”方法是推荐的方法。
从1.1.84之前的版本升级时,请:
确保您使用的是 PHP 7.4或更高版本
使用您的代码测试客户端是否有任何重大更改;类方法现在具有严格的参数类型提示和响应类型,在某些情况下,如果传递了错误的类型或期望返回不同的响应类型,可能会破坏您的代码
使用 Composer、Git 或直接下载版本来安装 API 客户端类。
首选的安装方法是通过composer。如果您尚未安装 Composer,请按照这些安装说明进行操作。
安装 Composer 后,只需从项目目录中的 shell 执行以下命令:
作曲家需要 art-of-wifi/unifi-api-client
或者手动将包添加到您的composer.json文件中:
{"require": {"art-of-wifi/unifi-api-client": "^1.1"}}
最后,如果您的框架尚未为您执行此操作,请务必在代码中包含 Composer 自动加载器:
/** * 使用 Composer 自动加载器加载类 */require_once 'vendor/autoload.php';
从项目目录中的 shell 执行以下git
命令:
git 克隆 https://github.com/Art-of-WiFi/UniFi-API-client.git
当 git 完成克隆后,在代码中包含包含该类的文件,如下所示:
/** * 直接加载类,而不是使用 Composer 自动加载器 */require_once 'path/to/src/Client.php';
如果您不想使用 Composer 或 git,只需下载包,解压 zip 文件,然后将包含该类的文件包含在您的代码中,如下所示:
/** * 直接加载类,而不是使用 Composer 自动加载器 */require_once 'path/to/src/Client.php';
如何使用该类的基本示例:
/** * 使用 Composer 自动加载器加载类 */require_once 'vendor/autoload.php';/** * 初始化 UniFi API 连接类,登录控制器并请求警报集合 * (此示例假设您有已为所使用的变量分配了正确的值) */$unifi_connection = new UniFi_APIClient($controller_user, $controller_password, $controller_url, $site_id, $controller_version, true);$login = $unifi_connection->login();$results = $unifi_connection->list_alarms(); // 返回包含警报对象的 PHP 数组
请参阅examples/
目录以获取一些更详细的示例,这些示例可以用作您自己的 PHP 代码的起点。
在上面的示例中, $site_id
是短站点“名称”(通常为 8 个字符长),在 UniFi 网络控制器中管理站点时在 URL 中可见。例如,使用以下 URL:
https://<controller IP address or FQDN>:8443/manage/site/jl3z2shm/dashboard
jl3z2shm
是短站点“名称”以及分配给 $site_id 的值。
在上例中传递给构造函数的第 6 个可选参数 ( true
) 用于启用控制器 SSL 证书的验证,否则默认情况下会禁用该证书。强烈建议在生产环境中启用此功能,在该环境中,UniFi 控制器上安装了有效的 SSL 证书,该证书与controller_url
参数中的 FQDN 关联。此选项是在 API 客户端版本 1.1.16 中添加的。
使用具有只读权限的管理员帐户(上例中的$controller_user
)可以限制某些集合/对象属性的可见性。请参阅此问题和此问题,了解 WPA2 密码对于只读管理员帐户不可见的示例。
该类当前支持以下函数/方法来访问 UniFi 控制器 API。该列表按字母顺序排序。请参阅源代码中的注释,了解每个函数/方法、其用途以及各自参数的更多详细信息。
采用_设备()
高级采用设备()
archive_alarm()
分配_现有_管理员()
授权访客()
block_sta()
取消滚动升级()
检查控制器更新()
检查固件更新()
cmd_stat()
计数警报()
创建_apgroup()
创建动态域名()
创建_防火墙组()
创建热点()
创建网络()
创建半径帐户()
创建用户()
创建用户组()
创建优惠券()
创建无线网络()
自定义 API 请求()
删除_apgroup()
删除设备()
删除_防火墙组()
删除网络()
删除半径帐户()
删除站点()
删除用户组()
删除无线网络()
禁用_ap()
禁用_wlan()
编辑_apgroup()
edit_client_fixedip()
编辑客户端名称()
编辑_防火墙组()
编辑用户组()
延长访客有效性()
忘记斯塔()
生成备份()
生成备份站点()
获取类版本()
获取cookie()
获取cookies()
get_curl_connection_timeout()
get_curl_http_version()
获取_curl_方法()
get_curl_request_timeout()
get_curl_request_timeout()
get_curl_ssl_verify_host()
get_curl_ssl_verify_peer()
获取调试()
获取_is_unifi_os()
get_last_error_message()
get_last_results_raw()
获取站点()
邀请管理员()
led_override()
列表管理员()
列出所有管理员()
列表_警报()
列表_aps()
列表备份()
列表_客户()
列表国家/地区代码()
list_current_channels()
列表仪表板()
list_device_name_mappings()
列表_设备_状态()
列表设备()
列表_设备_基本()
list_dynamicdns()
列表事件()
列表扩展名()
列表_防火墙组()
列表_固件()
名单客人()
列表_健康状况()
列表_热点()
list_known_rogueaps()
列表_网络配置()
list_portconf()
list_portforward_stats()
列表_端口转发()
list_radius_accounts()
list_radius_profiles()
列表_self()
列表设置()
列表站点()
列表标签()
列表_用户()
list_wlan_groups()
list_wlanconf()
定位_ap()
登录()
注销()
移动设备()
power_cycle_switch_port()
重新启动_云密钥()
重命名_ap()
撤销_admin()
撤销_优惠券()
set_ap_radiosettings()
set_ap_wlangroup()
设置连接超时()
设置cookies()
set_curl_http_version()
set_curl_request_timeout()
set_curl_ssl_verify_host()
set_curl_ssl_verify_peer()
设置_调试()
set_device_settings_base()
set_dynamicdns()
设置元素采用()
set_guestlogin_settings()
set_guestlogin_settings_base()
set_ips_settings_base()
set_is_unifi_os()
set_locate_ap()(已弃用,但仍可用作别名)
set_networksettings_base()
set_radius_account_base()
设置请求方法()
设置请求超时()
设置站点()
设置站点连接()
设置站点国家/地区()
set_site_guest_access()
设置站点区域设置()
设置站点管理()
设置网站名称()
set_site_ntp()
set_site_snmp()
set_sta_name()
set_sta_note()
set_super_identity_settings_base()
set_super_mgmt_settings_base()
set_super_smtp_settings_base()
设置用户组()
set_wlan_mac_filter()
set_wlan设置()
set_wlansettings_base()
site_leds()
频谱扫描()
频谱扫描状态()
开始滚动升级()
stat_5分钟_aps()
stat_5分钟_gateway()
stat_5分钟_站点()
stat_5分钟_用户()
stat_allusers()
stat_auths()
stat_client()
stat_daily_aps()
stat_daily_gateway()
stat_daily_site()
stat_daily_user()
stat_full_status()
stat_hourly_aps()
stat_hourly_gateway()
stat_hourly_site()
stat_hourly_user()
stat_ips_events()
stat_monthly_aps()
stat_monthly_gateway()
stat_monthly_site()
stat_monthly_user()
统计付款()
stat_sessions()
统计站点()
stat_speedtest_results()
stat_sta_sessions_latest()
stat_status()
stat_sysinfo()
stat_voucher()
取消授权_guest()
解锁_sta()
unset_locate_ap()(已弃用,但仍可用作别名)
升级设备()
升级设备外部()
仍有工作要做来添加功能并进一步提高此类的可用性,因此欢迎所有建议/评论。请使用 GitHub 问题部分或 Ubiquiti 社区论坛 (https://community.ubnt.com/t5/UniFi-Wireless/PHP-class-to-access-the-UniFi-controller-API-updates-and/td- p/1512870)分享您的建议和问题。
当使用其他库、cURL 或 Postman 时遇到 UniFi API 问题时,请不要打开问题。此类问题将立即关闭。请改用讨论部分。
如果您想贡献代码(改进),请打开一个问题并在其中包含您的代码,或者创建一个拉取请求。
此类基于以下开发人员的初始工作:
domwo:https://community.ui.com/questions/little-php-class-for-unifi-api/933d3fb3-b401-4499-993a-f9af079a4a3a
fbagnol:https://github.com/fbagnol/class.unifi.php
以及 Ubiquiti 发布的 API:
https://dl.ui.com/unifi/8.0.26/unifi_sh_api
此 API 客户端类中的许多功能并未得到 Ubiquiti 的正式支持,因此 UniFi 控制器 API 的未来版本可能不支持。