rohsyl/salto

A PHP Salto client implementing the PMS Industry Standard protocol via TCP/IP.

1.0 2022-12-21 15:58 UTC

This package is not auto-updated.

Last update: 2024-05-06 09:34:20 UTC


README

Latest Version on Packagist Total Downloads

A PHP Salto client implementing the PMS Industry Standard protocol via TCP/IP.

Installation

You can install the package via composer:

composer require rohsyl/salto

Usage

Create a client

$client = new SaltoClient('5.tcp.eu.ngrok.io', 14072);

Try to open the connection

$client->openSocketConnection();

Throws ConnectionFailedException when failed.

Check if the server is available

while (!$client->isReady()) {
    // wait some seconds and try again
    // or exit program
}

Send a message

$response = $client->sendMessage($message);

Messages available

Only the followings message have been implemented yet :

  • CNM : CheckInMobileMessage
  • CCM : CopyMobileMessage
  • MC : ModifyMessage
  • CO : CheckoutMessage

CNM : Check-in Mobile

Check-in for mobile apps.

Create access to a room for a guest with a phone number for given dates

$message = (new CheckInMobileMessage())
    ->forRoom('W10011')
    ->phone('+41774539943')
    ->from(Carbon::create(2022, 12, 21, 10, 30))
    ->to(Carbon::create(2022, 12, 30, 10, 30))
    ;

You can specify the operator

$message = (new CheckInMobileMessage())
    // ...
    ->by('Firstname Lastname')
    ;

You can set a text message to be shown on the phone’s display.

$message = (new CheckInMobileMessage())
    // ...
    ->withMessage('Lorem impsum')
    ;

You can allow or deny access to doors. You have to pass an array in parameter :

  • Key is the ID of the PMS Authorizations (See System > PMS Authorizations).
  • Value can be true or false.
$message = (new CheckInMobileMessage())
    // ...
    ->withAuthorizations(['1' => true])
    ;

CCM : Copy Mobile

Works the same way as CNM : CheckInMobileMessage.

MC : Modify

Modify a check in. Changing the expiry dates.

$message = (new ModifyMessage())
    ->fromRoom('W10011')
    ->expireAt(Carbon::create(2022, 12, 12, 11,0));

An error will be returned if the room is checked-out or not occupied.

CO : Check-out

Check-out a room.

$message = (new CheckoutMessage(+))
    ->forRoom('W10011');

Read response

An instance of Response is returned by the sendMessage method.

$response = $client->sendMessage($message);

If no exceptions is thrown, it means that everything went fine.

Display the string representation of the response and the request

$response->toString();
$response->getRequest()->toString();

Handle exceptions

Use a try .. catch !

try {

}
catch(SaltoException $e) {
    if($e instanceof ConnectionFailedException) {
        // ...
    }
    else if($e instanceof NakException) {
        // ...
    }
    else if($e instanceof WrongChecksumException) {
        // ...
    }
    else if($e instanceof SaltoErrorException) {
        // ...
    }
}

Existing exceptions :

  • ConnectionFailedException : Connection failed to the socket
  • NakException : Server responded with a negative acknowledgement. It means the server is not ready or the message sent is not correct (bad LRC)
  • WrongChecksumException : Response message is not correct (bad lrc)
  • SaltoErrorException : An error has been thrown by the server : See Error messages in PMS_SALTO_IS_V1.pdf

Testing

TODO

composer test

Changelog

Please see CHANGELOG for more information on what has changed recently.

Contributing

Please see CONTRIBUTING for details.

Security

If you discover any security related issues, please email syzin12@gmail.com instead of using the issue tracker.

Credits

License

The MIT License (MIT). Please see License File for more information.