The Loops PHP SDK provides an expressive interface for interacting with Loops's API.
Requires PHP 8.1+
You may install Loops into your project using the Composer package manager:
composer require plutolinks/loops
You can create an instance of the SDK like so:
use PlutoLinks\Loops\Loops;
$loops = Loops::client('<api-key>');
$response = $loops->contacts()->create([
'email' => 'john@example.com',
'firstName' => 'John',
]);
You can access the properties of the response:
$response->success;
$response->id;
$response->message;
$contact = $loops->contacts()->retrieve('john@example.com');
You can access the properties of the contact:
$contact->email;
$contact->firstName;
$contact->id;
$contact->lastName;
$contact->source;
$contact->subscribed;
$contact->userGroup;
$contact->userId;
$contact->favoriteColor; // Custom property
$response = $loops->contacts()->update('john@example.com', [
'firstName' => 'John',
]);
You can access the properties of the response:
$response->success;
$response->id;
$response->message;
$loops->contacts()->delete(email: 'john@example.com');
Alternatively, you can delete a contact by its userId:
$loops->contacts()->delete(userId: 'asdf');
You can access the properties of the response:
$response->message;
$response->success;
$fields = $loops->contacts()->customFields();
You can access the properties of the response:
foreach ($fields as $field) {
$field->key;
$field->label;
$field->type;
}
$response = $loops->events()->send(
eventName: 'signup',
email: 'john@example.com',
properties: [
'firstName' => 'John',
]
);
You can access the properties of the response:
$response->success;
$response->message;
$response = $loops->transactional()->send(
transactionalId: 'asdf',
email: 'john@example.com',
dataVariables: [
'url' => 'https://example.com',
],
attachments: [
[
'contentType' => 'application/pdf',
'data' => '/9j/4AAQSkZJRgABAQEASABIAAD/4...',
'filename' => 'file.pdf',
],
]
);
You can access the properties of the response:
$response->success;
$response->error;
$response->message;
$response->path;
$response->transactionalId;
It's necessary to check for errors in different places due to the difference error responses from the Loops API.
The MIT License (MIT). Please see License File for more information.