Tarik Data Absensi X100C Dengan PHP Soap
Solution X100C adalah mesin absensi dengan teknologi finger print yang banyak digunakan di kalangan industri maupun perkantoran. Mesin absen solution X100C ini dapat bekerja dengan standalone, dalam arti tidak perlu terhubung dengan PC atau komputer. Absensi ini juga memiliki interface ethernet yang memungkinkan untuk beroperasi menggunakan jaringan LAN. Tujuan dari koneksi ke jaringan adalah untuk memudahkan dalam penarikan data absensi.
Sebenarnya dalam paket bawaan mesin absensi ini sudah disediakan software Zktime untuk manajemen absensi dan pengolahan data. Namun jika kita mempunyai aplikasi sendiri kita bisa menarik data absensi mesin x100c ini salah satunya dengan menggunakan PHP. Mesin ini mendukung protokol SOAP untuk komunikasi data dengan aplikasi pihak ketiga. Berikut saya jelaskan bagaimana cara menarik data absensi x100c menggunakan PHP.
Tahap Persiapan
Pastikan mesin absensi x100c terhubung ke jaringan via LAN dan sudah mendapatkan IP. Komputer yang akan kita gunakan untuk menarik data dari mesin ini harus dalam satu segmen jaringan yang sama. Kemudian pastikan anda mengetahui COM key atau communication key pada mesin absensi. Secara default mesin absensi X100C mempunyai com key 0. Namun tidak selamanya mesin tersebut memiliki com key 0, bisa juga angka yang lain. Untuk memastikannya silahkan lihat COM key di menu pengaturan pada mesin ini.Kita juga bisa melakukan penarikan data lebih dari satu mesin absensi sekaligus selama mesin-mesin tersebut terhubung pada jaringan yang sama. Dan pastikan mesin absensi tersebut memiliki data atau log absensi karyawan. Jika belum silahkan tambahkan dulu sampel karyawan didalam mesin dan coba digunakan untuk absen supaya mesin tersebut memiliki riwayat absensi.
Dalam contoh ini saya akan menampilkan data dari 3 mesin absensi sekaligus dengan parameter tiap-tiap mesin absensi sebagai berikut :
Dalam contoh ini saya akan menampilkan data dari 3 mesin absensi sekaligus dengan parameter tiap-tiap mesin absensi sebagai berikut :
No | Mesin Absen | IP | COM key |
---|---|---|---|
1 | Head Office | 192.168.101.135 | 0 |
2 | Gudang | 192.168.101.133 | 0 |
3 | Produksi | 192.168.101.145 | 0 |
Membuat Kode PHP Untuk Menampilkan Data Absensi
Sebelumnya anda harus mengaktifkan 2 ekstensi pada php.ini yaitu soap dan socket. Cara mengaktifkan ekstensi pada PHP bisa kalian baca pada artikel dibawah ini .Baca Juga :
Cara Mengaktifkan Ekstensi PHP di Hosting
10 Ekstensi PHP Yang Sering Digunakan, Fungsi dan Cara Mengaktifkan
Setelah itu jalankan XAMPP dan buat folder dengan nama absensi di htdocs, didalamnya kalian buat file bernama tarikdata.php sehingga foldernya akan seperti ini htdocs/absensi/tarikdata.php . Kemudian isi dengan kode berikut, sesuaikan dengan IP dan COM key pada mesin absensi kalian.
<!DOCTYPE html>
<html>
<head>
<title>Tes Tarik Data Mesin Absensi</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<div class="card shadow-sm radius-10 border-0 mb-3">
<div class="card-body">
<form action="" method="GET">
<select name="finger" id="" class="form-select" onchange="form.submit()">
<option value="0">Pilih Mesin</option>
<option value="192.168.101.135">Mesin Finger 1</option>
<option value="192.168.101.133">Mesin Finger 2</option>
<option value="192.168.101.145">Mesin Finger 3</option>
</select>
</form>
<hr>
<?php
function Parse_Data($data, $p1, $p2)
{
$data = " " . $data;
$hasil = "";
$awal = strpos($data, $p1);
if ($awal != "") {
$akhir = strpos(strstr($data, $p1), $p2);
if ($akhir != "") {
$hasil = substr($data, $awal + strlen($p1), $akhir - strlen($p1));
}
}
return $hasil;
}
if (isset($_GET['finger'])) {
$IP = $_GET['finger'];
} else {
$IP = '';
}
$Key = "0";
?>
<?php
if ($IP != "") { ?>
<table>
<thead>
<tr align="center">
<th><B>UserID</B></th>
<th width="200"><B>Tanggal & Jam</th>
<th><B>Verifikasi</B></th>
<th><B>Status</B></th>
</tr>
</thead>
<tbody>
<?php
$Connect = fsockopen($IP, "80", $errno, $errstr, 1);
if ($Connect) {
$soap_request = "<GetAttLog><ArgComKey xsi:type=\"xsd:integer\">" . $Key . "</ArgComKey><Arg><PIN xsi:type=\"xsd:integer\">All</PIN></Arg></GetAttLog>";
$newLine = "\r\n";
fputs($Connect, "POST /iWsService HTTP/1.0" . $newLine);
fputs($Connect, "Content-Type: text/xml" . $newLine);
fputs($Connect, "Content-Length:" . strlen($soap_request) . $newLine . $newLine);
fputs($Connect, $soap_request . $newLine);
$buffer = "";
while ($Response = fgets($Connect, 1024)) {
$buffer = $buffer . $Response;
}
} else echo "Koneksi Gagal";
$buffer = Parse_Data($buffer, "<GetAttLogResponse>", "</GetAttLogResponse>");
$buffer = explode("\r\n", $buffer);
for ($a = 1; $a < count($buffer) - 1; $a++) {
$data = Parse_Data($buffer[$a], "<Row>", "</Row>");
$PIN = Parse_Data($data, "<PIN>", "</PIN>");
$Name = Parse_Data($data, "<Name>", "</Name>");
$DateTime = Parse_Data($data, "<DateTime>", "</DateTime>");
$Verified = Parse_Data($data, "<Verified>", "</Verified>");
$Status = Parse_Data($data, "<Status>", "</Status>");
?>
<tr align="center">
<td><?php echo $PIN ?></td>
<td><?= $DateTime ?></td>
<td><?= $Verified ?></td>
<td><?= $Status ?></td>
</tr>
<?php } ?>
</tbody>
</table>
<?php } ?>
</div>
</div>
</body>
</html>
Jalankan menggunakan browser dengan URL localhost/absensi/tarikdata.php maka akan tampil seperti gambar dibawah ini. Silahkan pilih mesin absensi untuk menampilkan data pada tiap-tiap mesin.
Membuat Kode PHP Untuk Menghapus Data Absensi
Selain menampilkan data, kita juga bisa menghapus riwayat absensi pada mesin menggunakan PHP. Buat file hapusdata.php di folder yang sama dengan langkah diatas, lalu isikan kode berikut :<!DOCTYPE html>
<html>
<head>
<title>Tes Hapus Data Mesin Absensi</title>
</head>
<body>
<div class="card shadow-sm radius-10 border-0 mb-3">
<div class="card-body">
<form action="" method="GET">
<select name="finger" id="" class="form-select" onchange="form.submit()">
<option value="0">Pilih Mesin</option>
<option value="192.168.101.135">Mesin Finger 1</option>
<option value="192.168.101.133">Mesin Finger 2</option>
<option value="192.168.101.145">Mesin Finger 3</option>
</select>
</form>
<hr>
<?php
function Parse_Data($data, $p1, $p2)
{
$data = " " . $data;
$hasil = "";
$awal = strpos($data, $p1);
if ($awal != "") {
$akhir = strpos(strstr($data, $p1), $p2);
if ($akhir != "") {
$hasil = substr($data, $awal + strlen($p1), $akhir - strlen($p1));
}
}
return $hasil;
}
if (isset($_GET['finger'])) {
$IP = $_GET['finger'];
} else {
$IP = '';
}
$Key = "0";
?>
<?php
if ($IP != "") { ?>
<table>
<thead>
<tr align="center">
<th><B>UserID</B></th>
<th width="200"><B>Tanggal & Jam</th>
<th><B>Verifikasi</B></th>
<th><B>Status</B></th>
</tr>
</thead>
<tbody>
<?php
$Connect = fsockopen($IP, "80", $errno, $errstr, 1);
if ($Connect) {
$soap_request = "<ClearData><ArgComKey xsi:type=\"xsd:integer\">".$Key."</ArgComKey><Arg><Value xsi:type=\"xsd:integer\">3</Value></Arg></ClearData>";
$newLine = "\r\n";
fputs($Connect, "POST /iWsService HTTP/1.0" . $newLine);
fputs($Connect, "Content-Type: text/xml" . $newLine);
fputs($Connect, "Content-Length:" . strlen($soap_request) . $newLine . $newLine);
fputs($Connect, $soap_request . $newLine);
$buffer = "";
while ($Response = fgets($Connect, 1024)) {
$buffer = $buffer . $Response;
}
} else echo "Koneksi Gagal"; ?>
<tr align="center">
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<?php } ?>
</tbody>
</table>
</div>
</div>
</body>
</html>
Jalankan menggunakan browser dengan URL localhost/absensi/hapusdata.php kemudian pilih mesin absensi yang akan dihapus datanya. Ingat ! Penghapusan ini bersifat mengosongkan semua data absensi dan tidak dapat dipulihkan kembali