Skip to content

Commit

Permalink
Update User Information
Browse files Browse the repository at this point in the history
  • Loading branch information
Muhammad Fahri committed May 24, 2022
1 parent 0550f77 commit 1ba1099
Show file tree
Hide file tree
Showing 3 changed files with 151 additions and 25 deletions.
89 changes: 88 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,89 @@
# ZK Soap PHP Library
ZK Soap PHP Library
======

A PHP Library For Manage Data From Fingerprint Machine with SOAP Protocol

## Features

* Get Attendance Log with DateRange
* Get User Information

## Requirements

* PHP version 7.2 or higher
* Fingerprint Machine Support ZK Web Service

## Easy Installation

### Install with composer

To install with [Composer](https://getcomposer.org/), simply require the
latest version of this package.

```bash
composer require fahriztx/zksoapphp
```

Make sure that the autoload file from Composer is loaded.

```php
// somewhere early in your project's loading, require the Composer autoloader
// see: http://getcomposer.org/doc/00-intro.md
require 'vendor/autoload.php';

```

## Quick Start

Just pass your IP, Port and Comkey :

* Get Attendance

```php
// reference the ZK Soap PHP namespace
use Fahriztx\Zksoapphp\Fingerprint;

// initial
$machine = Fingerprint::connect('192.168.1.175', '80', '123456');

// get machine status
echo "Machine Status : ".$machine->getStatus(); // connect | disconnect

// get all log data
print_r($machine->getAttendance()); // return Array of Attendance Log

// get all log data with date
print_r($machine->getAttendance('all', '2022-05-01')); // return Array of Attendance Log

// get all log data with date range
print_r($machine->getAttendance('all', '2022-05-01', '2022-05-10')); // return Array of Attendance Log

// get specific pin log data
print_r($machine->getAttendance(1)); // return Array of Attendance Log
// OR Array
print_r($machine->getAttendance([1, 2])); // return Array of Attendance Log

```

* Get User Information

```php
// reference the ZK Soap PHP namespace
use Fahriztx\Zksoapphp\Fingerprint;

// initial
$machine = Fingerprint::connect('192.168.1.175', '80', '123456');

// get machine status
echo "Machine Status : ".$machine->getStatus(); // connect | disconnect

// get all user data
print_r($machine->getUserInfo()); // return Array of User Info Data

// get specific pin user data
print_r($machine->getUserInfo(1)); // return Array of User Info Data
// OR Array
print_r($machine->getUserInfo([1, 2])); // return Array of User Info Data

```

2 changes: 1 addition & 1 deletion examples/getAttendance.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,5 @@

$machine = Fingerprint::connect('192.168.1.175', '80', '123456');
echo "Machine Status : ".$machine->getStatus().PHP_EOL;
print_r($machine->getAttendance());
print_r($machine->getAttendance('all', '2022-05-24'));
print_r($machine->getUserInfo());
85 changes: 62 additions & 23 deletions src/Fingerprint.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@
*/
class Fingerprint
{
protected static $conn;
protected static $ip;
protected static $port;
protected static $comkey;
protected static $isConnected = false;
protected static $NL = "\r\n";

protected static $payload = [
private static $conn;
private static $ip;
private static $port;
private static $comkey;
private static $isConnected = false;
private static $NL = "\r\n";

private static $payload = [
'GetAttLog' => '<GetAttLog><ArgComKey xsi:type=\"xsd:integer\">#COMKEY</ArgComKey>#PIN</GetAttLog>',
'GetUserInfo' => '<GetUserInfo><ArgComKey xsi:type=\"xsd:integer\">#COMKEY</ArgComKey>#PIN</GetUserInfo>'
];
Expand All @@ -31,7 +31,7 @@ public function connect($ip, $port=80, $comkey=0)
}else{
static::$isConnected = false;
}

return (new static);
}

Expand Down Expand Up @@ -78,7 +78,7 @@ public function getUserInfo($pin='all')
return static::parseUserInfoData($buffer);
}

static function parseUserInfoData($data="") {
private static function parseUserInfoData($data="") {

$dataRow = explode("<Row>", $data);
array_shift($dataRow);
Expand Down Expand Up @@ -110,8 +110,12 @@ static function parseUserInfoData($data="") {
return $userData;
}

public function getAttendance($pin='all')
public function getAttendance($pin='all', $date_start=null, $date_end=null)
{
if ($date_start != null && $date_end == null) {
$date_end = $date_start;
}

$payload = self::$payload['GetAttLog'];

static::connect(static::$ip, static::$port, static::$comkey);
Expand Down Expand Up @@ -145,11 +149,10 @@ public function getAttendance($pin='all')
$buffer = str_replace($gaRes, "", $buffer);

fclose(static::$conn);
return static::parseAttendanceData($buffer);
return static::parseAttendanceData($buffer, $date_start, $date_end);
}

static function parseAttendanceData($data="") {

private static function parseAttendanceData($data="", $date_start=null, $date_end=null) {
$dataRow = explode("<Row>", $data);
array_shift($dataRow);

Expand All @@ -164,19 +167,37 @@ static function parseAttendanceData($data="") {
$status = static::getValueFromTag($endRow, "<Status>", "</Status>");
$workcode = static::getValueFromTag($endRow, "<WorkCode>", "</WorkCode>");

$fingerData[] = [
'pin' => $fid,
'datetime' => $datetime,
'verified' => $verified,
'status' => $status,
'workcode' => $workcode,
];
if ($date_start != null && $date_end != null) {

$rangeDate = static::dateRange($date_start, $date_end);

$dateCheck = explode(' ', $datetime)[0];

if (in_array($dateCheck, $rangeDate)) {
$fingerData[] = [
'pin' => $fid,
'datetime' => $datetime,
'verified' => $verified,
'status' => $status,
'workcode' => $workcode,
];
}

} else {
$fingerData[] = [
'pin' => $fid,
'datetime' => $datetime,
'verified' => $verified,
'status' => $status,
'workcode' => $workcode,
];
}
}

return $fingerData;
}

static function getValueFromTag($a, $b, $c)
private static function getValueFromTag($a, $b, $c)
{
$a = " ".$a;
$hasil = "";
Expand All @@ -190,7 +211,25 @@ static function getValueFromTag($a, $b, $c)
return $hasil;
}

public function generateRequest($payload)
private static function dateRange($startDate, $endDate)
{
$dateRange = [];
$period = new \DatePeriod(
new \DateTime($startDate),
new \DateInterval('P1D'),
new \DateTime($endDate)
);

foreach ($period as $key => $value) {
array_push($dateRange, $value->format('Y-m-d'));
}

array_push($dateRange, date('Y-m-d', strtotime($endDate)));

return $dateRange;
}

private function generateRequest($payload)
{
$payload = str_replace("#COMKEY", static::$comkey, $payload);
fputs(static::$conn, "POST /iWsService HTTP/1.0".self::$NL);
Expand Down

0 comments on commit 1ba1099

Please sign in to comment.