Install via Composer:
composer require keepcloud/freshdesk-php-sdk
(Note: Use a stable version instead of dev-master in production.)
Initialize the API:
use Freshdesk\Api;
$api = new Api(config('services.freshdesk.api_key'), config('services.freshdesk.domain'));
(Store credentials in .env for security.)
First Use Case: Fetch all tickets with pagination:
$tickets = $api->tickets->all(['page' => 1, 'per_page' => 20]);
tickets, contacts, groups).keepcloud/freshdesk-laravel for service providers, facades, and caching.CRUD Operations:
// Create
$ticket = $api->tickets->create(['subject' => 'Test', 'description' => 'Hello']);
// Read
$ticket = $api->tickets->view($ticket['id']);
// Update
$updated = $api->tickets->update($ticket['id'], ['status' => 2]);
// Delete
$api->tickets->delete($ticket['id']);
Pagination & Filtering:
// Paginated results
$tickets = $api->tickets->all(['page' => 2, 'per_page' => 50]);
// Filter by status (e.g., 'open')
$tickets = $api->tickets->all(['query' => 'status:open']);
Attachments & Related Data:
// Upload attachment
$attachment = $api->attachments->create($ticket['id'], '/path/to/file.pdf');
// Fetch replies
$replies = $api->tickets->replies->all($ticket['id']);
Service Provider Binding:
// config/services.php
'freshdesk' => [
'api_key' => env('FRESHDESK_API_KEY'),
'domain' => env('FRESHDESK_DOMAIN'),
];
// AppServiceProvider.php
$this->app->singleton(Api::class, function ($app) {
return new Api(
$app['config']['services.freshdesk.api_key'],
$app['config']['services.freshdesk.domain']
);
});
Facade Usage (if using the Laravel package):
use Freshdesk\Facades\Freshdesk;
$tickets = Freshdesk::tickets()->all();
Caching Responses:
// Cache for 10 minutes
$tickets = Cache::remember('freshdesk_tickets', 600, function () {
return $api->tickets->all();
});
Queueing Long-Running Tasks:
// Dispatch a job to update tickets asynchronously
UpdateTicketsJob::dispatch($api, $ticketIds)->onQueue('freshdesk');
Wrap API calls in a try-catch to handle HTTP errors:
try {
$ticket = $api->tickets->view($id);
} catch (\Freshdesk\Exception\ApiException $e) {
Log::error('Freshdesk API Error: ' . $e->getMessage());
return response()->json(['error' => 'Failed to fetch ticket'], 500);
}
API Key & Domain Sensitivity:
.env:
FRESHDESK_API_KEY=your_key_here
FRESHDESK_DOMAIN=yourdomain.freshdesk.com
yourdomain.freshdesk.com, not just yourdomain).Rate Limiting:
$retryAfter = $e->getRetryAfter();
sleep($retryAfter);
Pagination Quirks:
per_page max is 250 (Freshdesk’s API limit). Avoid fetching large datasets without pagination.$allTickets = [];
$page = 1;
do {
$tickets = $api->tickets->all(['page' => $page, 'per_page' => 100]);
$allTickets = array_merge($allTickets, $tickets);
$page++;
} while (!empty($tickets));
Data Validation:
$validator = Validator::make($data, [
'subject' => 'required|string|max:255',
'description' => 'required|string',
]);
Time Zones:
$createdAt = Carbon::parse($ticket['created_time'])->tz('America/New_York');
Enable Debugging:
Add this to your Api initialization to log requests/responses:
$api = new Api($key, $domain, [
'debug' => true,
'logger' => function ($message) {
Log::debug($message);
}
]);
Common HTTP Errors:
Retry-After header.Testing:
$mockApi = Mockery::mock(Api::class);
$mockApi->shouldReceive('tickets->view')->andReturn(['id' => 123]);
Custom Endpoints: The SDK is thin; extend it for unsupported endpoints:
$response = $api->request('GET', '/api/v2/contacts/{id}/tickets', ['id' => 123]);
Middleware: Add request/response middleware:
$api->setMiddleware(function ($request) {
$request->headers['X-Custom-Header'] = 'value';
});
Event Dispatching: Trigger Laravel events after API calls:
$api->tickets->create($data);
event(new TicketCreated($ticket));
Webhooks: Use the SDK to verify Freshdesk webhook signatures:
$signature = hash_hmac('sha256', $payload, config('services.freshdesk.webhook_secret'));
if ($signature !== $_SERVER['HTTP_X_FRESHDESK_SIGNATURE']) {
abort(403);
}
How can I help you explore Laravel packages today?