brianfreytag/ultipro-sdk-php
Unofficial PHP SDK for UKG/Ultipro REST API. Provides an UltiproClient plus Configuration and Personnel clients, supports auth via object or array, configurable base URI, and Guzzle options. Includes endpoints like org levels, person/employment details, and ID lookup.
Employee::find(), Payroll::submit()) remains unchanged, preserving existing Laravel integrations.Http facade or Guzzle configurations if using custom middleware.HttpClient or ensure Guzzle is PSR-18 compatible.Auth system should be updated to use Symfony’s Authenticator or ClientCredentialsTokenAuthenticator if applicable.Serializer component if the SDK uses it for data transformation.| Risk Area | Mitigation Strategy |
|---|---|
| Symfony 8 Breaking Changes | Test the SDK with Laravel 10’s Symfony 8 components. Use symfony/http-client in Laravel’s config/app.php to isolate dependencies. |
| PSR-18 Compliance | Audit Laravel’s HTTP client usage (e.g., Http::withToken()). Update to use Symfony’s HttpClient or ensure Guzzle is PSR-18 compliant via guzzlehttp/psr7. |
| OAuth2 Deprecations | Verify Ultipro’s OAuth2 endpoints support Symfony 8’s ClientCredentialsTokenAuthenticator. Fall back to raw HTTP requests if needed. |
| Serializer Changes | If the SDK uses Symfony’s Serializer, test data mapping in Laravel. Use symfony/serializer-pack for backward compatibility if required. |
| Performance Regressions | Benchmark SDK operations in Laravel 10 vs. older versions. Monitor Symfony 8’s HTTP Client performance with Ultipro’s API. |
GuzzleHttp\Client in favor of Symfony\Contracts\HttpClient)?Authorization: Bearer headers)? If so, update Laravel’s Auth middleware.Serializer for JSON/XML parsing? If yes, test with Laravel 10’s Symfony 8 components for schema validation or normalization changes.Mockery or PHPUnit).if (app()->version() === '10.x')).HttpClient, Serializer). No additional packages needed unless using advanced features (e.g., Messenger for webhooks).UltiproEmployeeService) to abstract Symfony 8 dependencies.use Symfony\Component\Messenger\MessageBusInterface;
$bus->dispatch(new SyncUltiproEmployees());
UltiproEmployeeSynced) for decoupled workflows, using Symfony 8’s EventDispatcher if needed.Doctrine DBAL (if used) for data syncs.composer require symfony/http-client:^8.0 to isolate dependencies.config/app.php to prioritize Symfony 8 components:
'providers' => [
Symfony\Component\HttpClient\HttpClient::class,
],
HttpClient where possible.Authenticator or ClientCredentialsTokenAuthenticator.use Symfony\Component\HttpClient\Auth\ClientCredentialsAuthenticator;
$client = HttpClient::create(['auth_basic' => ['token', 'secret']]);
composer require symfony/http-client:^6.3 for backward compatibility.^7.4 (PSR-18 compatible).symfony/console, symfony/dependency-injection).| Phase | Tasks | Dependencies |
|---|---|---|
| Validation | Test SDK in Laravel 10; audit Symfony 8 components for breaking changes. | SDK v2.0.0, Laravel 10. |
| Dependency Update | Update composer.json to prioritize Symfony 8 components; replace Guzzle with symfony/http-client where possible. |
Composer, Laravel config. |
| Auth Migration | Refactor OAuth2 logic to use Symfony’s Authenticator. |
Ultipro API credentials. |
| CRUD Testing | Validate SDK methods (e.g., Employee::find()) in Laravel 10. |
Ultipro sandbox environment. |
| Webhook Setup | Migrate webhook listeners to Symfony Messenger if using async processing. |
How can I help you explore Laravel packages today?