
本教程详细介绍了如何将ZKTeco考勤机(如K40、F18)的考勤数据集成到Google Sheets或在线PHP服务器。核心策略是利用中间服务器开发程序,通过ZKTeco的API/SDK获取设备数据,将其格式化为JSON,然后通过Google Apps Script的UrlFetchService或PHP服务器的HTTP请求进行数据同步与展示。
ZKTeco考勤设备,如K40和F18,因其通常不直接支持HTTP请求或推送功能,使得将其考勤数据直接同步到Google Sheets或自定义在线PHP服务器成为一项挑战。本文将提供一套专业的解决方案,通过引入中间服务器层,实现数据的有效采集、处理与集成。
ZKTeco设备通常通过TCP/IP协议或特定的SDK(软件开发工具包)与上位机软件进行通信。它们不具备直接向Web服务发送HTTP请求的能力。因此,要实现与Google Sheets或PHP服务器的集成,必须引入一个中间层。
核心策略如下:
立即学习“PHP免费学习笔记(深入)”;
这是整个集成方案的关键环节。您需要一台能够与ZKTeco设备进行网络通信的服务器(可以是本地服务器、云服务器或树莓派等)。
首先,您需要在中间服务器上开发一个应用程序,用于连接ZKTeco设备并获取考勤日志。
一旦您的程序能够从设备获取数据,下一步是将其通过HTTP接口暴露出来。
[
{
"user_id": "1001",
"timestamp": "2023-10-27 09:00:00",
"device_id": "K40-001",
"status": "in"
},
{
"user_id": "1002",
"timestamp": "2023-10-27 09:05:00",
"device_id": "K40-001",
"status": "in"
}
]Google Sheets可以通过Google Apps Script来执行自定义脚本,其中包括强大的UrlFetchService,可以用来向外部API发送HTTP请求。
在Apps Script编辑器中,您可以编写JavaScript代码来调用中间服务器的API。
function getAttendanceData() {
// 替换为您的中间服务器API的URL
var apiUrl = "http://your-intermediate-server.com/api/attendance";
try {
// 使用UrlFetchApp.fetch发送HTTP GET请求
var response = UrlFetchApp.fetch(apiUrl);
// 获取响应内容
var content = response.getContentText();
// 将JSON字符串解析为JavaScript对象
var jsonData = JSON.parse(content);
// 获取当前活动的电子表格和工作表
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
// 假设第一行是标题,从第二行开始写入数据
// 可以在这里添加标题行,如果尚未存在
// sheet.appendRow(["User ID", "Timestamp", "Device ID", "Status"]);
// 清除现有数据(可选,根据需求决定是否每次刷新都清空)
// var lastRow = sheet.getLastRow();
// if (lastRow > 1) { // 假设第一行是标题
// sheet.getRange(2, 1, lastRow - 1, sheet.getLastColumn()).clearContent();
// }
// 遍历JSON数据并写入Google Sheet
if (jsonData && jsonData.length > 0) {
var dataToWrite = [];
jsonData.forEach(function(record) {
dataToWrite.push([
record.user_id,
record.timestamp,
record.device_id,
record.status
]);
});
// 将数据写入到工作表,从下一行开始
sheet.getRange(sheet.getLastRow() + 1, 1, dataToWrite.length, dataToWrite[0].length).setValues(dataToWrite);
Logger.log("Attendance data successfully updated.");
} else {
Logger.log("No attendance data received or data is empty.");
}
} catch (e) {
Logger.log("Error fetching or processing attendance data: " + e.toString());
SpreadsheetApp.getUi().alert("错误", "获取考勤数据时发生错误: " + e.message, SpreadsheetApp.getUi().ButtonSet.OK);
}
}您可以设置Apps Script定时自动运行,定期更新Google Sheet中的数据。
如果您的目标是将数据存储到自己的PHP服务器数据库中,过程会更直接。PHP服务器可以直接通过curl或file_get_contents等函数调用中间服务器的API。
<?php
// 替换为您的中间服务器API的URL
$apiUrl = "http://your-intermediate-server.com/api/attendance";
try {
// 使用cURL获取数据
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $apiUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 返回响应内容而不是直接输出
// 如果您的API需要认证,可以在这里添加头部信息
// curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Bearer YOUR_API_KEY'));
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode === 200 && $response) {
$jsonData = json_decode($response, true); // 将JSON字符串解析为PHP数组
if (json_last_error() === JSON_ERROR_NONE) {
if (!empty($jsonData)) {
// 连接数据库(请替换为您的数据库连接信息)
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "attendance_db";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("数据库连接失败: " . $conn->connect_error);
}
// 准备SQL插入语句
$stmt = $conn->prepare("INSERT INTO attendance_logs (user_id, timestamp, device_id, status) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE timestamp=VALUES(timestamp), device_id=VALUES(device_id), status=VALUES(status)");
$stmt->bind_param("ssss", $userId, $timestamp, $deviceId, $status);
foreach ($jsonData as $record) {
$userId = $record['user_id'];
$timestamp = $record['timestamp'];
$deviceId = $record['device_id'];
$status = $record['status'];
$stmt->execute();
}
$stmt->close();
$conn->close();
echo "考勤数据成功同步到数据库。\n";
} else {
echo "未从中间服务器获取到考勤数据。\n";
}
} else {
echo "JSON解析错误: " . json_last_error_msg() . "\n";
}
} else {
echo "从中间服务器获取数据失败。HTTP状态码: " . $httpCode . ", 响应: " . $response . "\n";
}
} catch (Exception $e) {
echo "获取或处理考勤数据时发生错误: " . $e->getMessage() . "\n";
}
?>为了存储考勤数据,您需要在PHP服务器的数据库中创建一个表,例如:
CREATE TABLE `attendance_logs` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `user_id` VARCHAR(50) NOT NULL, `timestamp` DATETIME NOT NULL, `device_id` VARCHAR(50) NOT NULL, `status` VARCHAR(10) NOT NULL, UNIQUE KEY `idx_user_time_device` (`user_id`, `timestamp`, `device_id`) -- 防止重复记录 );
通过引入一个中间服务器层,我们可以有效克服ZKTeco考勤机直接连接Web服务的限制。这个中间层负责与考勤设备通信、处理原始数据并将其通过标准HTTP API暴露。无论是Google Sheets还是自定义的PHP服务器,都可以通过调用这个API,实现考勤数据的自动化同步和管理。这种架构不仅解决了集成难题,也为未来的扩展和更复杂的业务逻辑处理提供了灵活性。
以上就是ZKTeco考勤机与Google Sheets/PHP服务器集成指南的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号