tmrw-life / ntak-guru-php-sdk
PHP SDK for NTAK.guru API
Fund package maintenance!
TMRW-Life
Requires
- php: ^8.1
- ext-openssl: *
- archtechx/enums: ^1.0.0
- guzzlehttp/guzzle: ^7.5
Requires (Dev)
- fakerphp/faker: ^1.21
- laravel/pint: ^1.9
- phpunit/phpunit: ^10.5
- spatie/ray: ^1.37
README
NTAK.GURU is wrapper for NTAK to provide a much simpler interface.
Documentation
You can find the documentation here.
Soon the documentation of this package will be migrated to the website.
Installation
You can install the package via composer:
composer require tmrw-life/ntak-guru-php-sdk
Usage
Accommodation
$gateway = \TmrwLife\NtakGuru\Services\Accommodation::setup([ 'accessToken' => '<your-access-token>', 'isProduction' => false, // default: false ]); $accommodationId = '00000000-0000-0000-0000-0000000'; // Provided by NTAK.guru // Retrieve accommodation $response = $gateway->show($accommodationId); // Update accommodation $provider = (new \TmrwLife\NtakGuru\Entities\AccommodationProvider()) ->setProviderName('Awesome provider Ltd') ->setProviderTaxNumber('12345678-1-41'); $response = $gateway->updateProvider($accommodationId, $provider); $urls = (new \TmrwLife\NtakGuru\Entities\AccommodationUrl()) ->setDailyCloseUrl('https://api.your-pms.com/v1/ntakguru/daily-close') ->setCallbackUrl('https://api.your-pms.com/v1/ntakguru/callback'); $response = $gateway->updateProvider($accommodationId, $urls); // Activate accommodation $response = $gateway->activate($accommodationId); // Deactivate accommodation $response = $gateway->deactivate($accommodationId);
Certificates
use TmrwLife\NtakGuru\Services\Certificate; $accommodationId = '00000000-0000-0000-0000-0000000'; // Provided by NTAK.guru $gateway = Certificate::setup([ 'accessToken' => '<your-access-token>', 'isProduction' => false, // default: false ]); // Generate certificate (private key) $gateway->generate($accommodationId); // Download certificate (certificate request) $gateway->download($accommodationId); // Upload certificate (certificate) $gateway->upload($accommodationId, '<content-of-certificate', '<reporting_id-provided-by-government-NTAK>'); // Delete certificate (private key and certificate request) $gateway->destroy($accommodationId);
Sending report
use TmrwLife\NtakGuru\Entities\Ntak\CheckIn; use TmrwLife\NtakGuru\Entities\Ntak\CheckOut; use TmrwLife\NtakGuru\Entities\Ntak\Reservation; use TmrwLife\NtakGuru\Entities\Ntak\RoomChange; use TmrwLife\NtakGuru\Services\Reporting\Ntak; $accommodationId = '00000000-0000-0000-0000-0000000'; // Provided by NTAK.guru $reporting = Ntak::setup([ 'accessToken' => '<your-access-token>', 'isProduction' => false, // default: false ]); // Check-in report $checkIn = (new CheckIn())->setAttribute('...'); $response = $reporting->checkIn($accommodationId, $checkIn); // Check-out report $checkOut = (new CheckOut())->setAttribute('...'); $response = $reporting->checkOut($accommodationId, $checkOut); // Reservation report $reservation = (new Reservation())->setAttribute('...'); $response = $reporting->reservation($accommodationId, $reservation); // Room change report $roomChange = (new RoomChange())->setAttribute('...'); $response = $reporting->roomChange($accommodationId, $roomChange);
Entity builders
You can use the entity builders to create the entities.
We covered the 5 main report type with the entity builders.
Name | Builder |
---|---|
Check-in | \TmrwLife\NtakGuru\Entities\Ntak\CheckIn |
Check-out | \TmrwLife\NtakGuru\Entities\Ntak\CheckOut |
Reservation | \TmrwLife\NtakGuru\Entities\Ntak\Reservation |
Room change | \TmrwLife\NtakGuru\Entities\Ntak\RoomChange |
Daily close | \TmrwLife\NtakGuru\Entities\Ntak\DailyClose |
And a few more for properties.
Name | Builder |
---|---|
Guest | \TmrwLife\NtakGuru\Entities\Ntak\Guest |
Residential unit | \TmrwLife\NtakGuru\Entities\Ntak\ResidentialUnit |
Checkout Day Sale | \TmrwLife\NtakGuru\Entities\Ntak\CheckOutDaySale |
Expense | \TmrwLife\NtakGuru\Entities\Ntak\Expense |
Load | \TmrwLife\NtakGuru\Entities\Ntak\Load |
Residential unit night | \TmrwLife\NtakGuru\Entities\Ntak\ResidentialUnitNight |
We also have some enums to help you with the attributes.
Name | Enum |
---|---|
Charge item category | \TmrwLife\NtakGuru\Enums\ChargeItemCategory |
DocumentType | \TmrwLife\NtakGuru\Enums\DocumentType |
Gender | \TmrwLife\NtakGuru\Enums\Gender |
Market segment | \TmrwLife\NtakGuru\Enums\MarketSegment |
Payment option | \TmrwLife\NtakGuru\Enums\PaymentOption |
Payment option subtype | \TmrwLife\NtakGuru\Enums\PaymentOptionSubtype |
Residential unit | \TmrwLife\NtakGuru\Enums\ResidentialUnit |
Sales channel | \TmrwLife\NtakGuru\Enums\SalesChannel |
Tourist tax | \TmrwLife\NtakGuru\Enums\TouristTax |
For example:
use TmrwLife\NtakGuru\Entities\Ntak\Reservation; use TmrwLife\NtakGuru\Enums\MarketSegment; use TmrwLife\NtakGuru\Enums\ResidentialUnitType; use TmrwLife\NtakGuru\Enums\SalesChannel; $reservation = (new Reservation()) ->setReservationNumber(23597) ->setOccurredAt('2023-04-19 14:00:23') ->setReservedAt('2023-04-19 13:46:04') ->setCancelled(false) ->setNationality('hu') ->setArrival('2023-04-21') ->setDeparture('2023-04-23') ->setSalesChannel(SalesChannel::DIRECT_ONLINE) ->setMarketSegment(MarketSegment::BUSINESS_GROUP) ->setGrossAmount(98700) ->setGuestCount(2) ->addBookedResidentialUnits(type: ResidentialUnitType::APARTMENT, capacity: 2);
Daily close response
In order to respond to the daily close request, you can use the DailyClose
entity builder class.
use TmrwLife\NtakGuru\Crypt; use TmrwLife\NtakGuru\Entities\Ntak\CheckOutDaySale; use TmrwLife\NtakGuru\Entities\Ntak\DailyClose; use TmrwLife\NtakGuru\Entities\Ntak\Expense; use TmrwLife\NtakGuru\Entities\Ntak\Load; use TmrwLife\NtakGuru\Entities\Ntak\ResidentialUnit; use TmrwLife\NtakGuru\Entities\Ntak\ResidentialUnitNight; $dailyClose = (new DailyClose()) ->setClosedDay('2023-04-20') ->setResidentialUnits( all: 15, ooo: 0, oos: 2, occupied: 10, available: 3, ) ->addAfterStayExpense(new Expense()) ->addAfterStayLoad(new Load()) ->addCheckOutDaySale(new CheckOutDaySale()) ->addOtherExpense(new Expense()) ->addOtherLoad(new Load()) ->addOutOfOrderResidentialUnit(new ResidentialUnit()) ->addResidentialUnitNight(new ResidentialUnitNight()); return $data; // JSON response to NTAK.guru
Or if the accommodation is no operating
use TmrwLife\NtakGuru\Crypt; use TmrwLife\NtakGuru\Entities\Ntak\DailyClose; $dailyClose = (new DailyClose()) ->setClosedDay('2023-04-20') ->setResidentialUnits( all: $all = $this->faker->randomDigit(), ooo: $ooo = $this->faker->randomDigit(), oos: $oos = $this->faker->randomDigit(), occupied: $occupied = $this->faker->randomDigit(), available: $available = $this->faker->randomDigit(), ) ->accommodationNotOperating(); return $data; // JSON response to NTAK.guru
VIZA
Sending report
use TmrwLife\NtakGuru\Entities\Ntak\CheckIn; use TmrwLife\NtakGuru\Entities\Ntak\CheckOut; use TmrwLife\NtakGuru\Services\Reporting\Viza; $accommodationId = '00000000-0000-0000-0000-0000000'; // Provided by NTAK.guru $reporting = Viza::setup([ 'accessToken' => '<your-access-token>', 'isProduction' => false, // default: false ]); // Check-in report $checkIn = (new CheckIn())->setAttribute('...'); $response = $reporting->checkIn($accommodationId, $checkIn); // Check-out report $checkOut = (new CheckOut())->setAttribute('...'); $response = $reporting->checkOut($accommodationId, $checkOut);
Entity builders
You can use the entity builders to create the entities.
We covered the 2 main report type with the entity builders.
Name | Builder |
---|---|
Check-in | \TmrwLife\NtakGuru\Entities\Viza\CheckIn |
Check-out | \TmrwLife\NtakGuru\Entities\Viza\CheckOut |
And a few more for properties.
Name | Builder |
---|---|
Guest | \TmrwLife\NtakGuru\Entities\Viza\Guest |
Guest Document | \TmrwLife\NtakGuru\Entities\Ntak\GuestDocument |
Testing
composer test
Changelog
Please see CHANGELOG for more information on what has changed recently.
Contributing
Please see CONTRIBUTING for details.
Security Vulnerabilities
Please review our security policy on how to report security vulnerabilities.
Credits
License
The MIT License (MIT). Please see License File for more information.