User API guide/fr: Difference between revisions

From SimplyBook.me
Created page with "Découvrez [https://simplybook.me/api_example/index.html un exemple d'interface de réservation basée sur une API] et consultez [https://simplybook.me/api_example/scheduler.js le code source] de cette solution. <br><br><br>"
Created page with "'''Exemple de code pour obtenir les formulaires d'inscription''' <br><br> <nowiki>$fields = $client->getAdditionalFields($eventId); // renvoie - array(array( // 'name' => 'b0657bafaec7a2c9800b923f959f8163', - nom du champ // 'title' => 'Test digits', - titre du champ // 'type' => 'digits', - type de champ // 'values' => null, - valeurs disponibles pour le type de champ de sélection // 'default' => null, - valeur par défaut pour le champ // 'is_..."
 
(14 intermediate revisions by the same user not shown)
Line 20: Line 20:
Vous pouvez utiliser [https://simplybook.me/api_example/json-rpc-client.js la bibliothèque client JSON-RPC JavaScript] et [https://simplybook.me/api_example/JsonRpcClient.zip la bibliothèque client JSON-RPC PHP] de nos exemples pour développer votre propre solution.
Vous pouvez utiliser [https://simplybook.me/api_example/json-rpc-client.js la bibliothèque client JSON-RPC JavaScript] et [https://simplybook.me/api_example/JsonRpcClient.zip la bibliothèque client JSON-RPC PHP] de nos exemples pour développer votre propre solution.


<div lang="en" dir="ltr" class="mw-content-ltr">
Veuillez noter que l'accès-token est valable une heure. Ceci est fait pour des raisons de sécurité. Vous devrez le régénérer au moins une fois par heure.
Please note access-token has one hour one time. This is done for security reasons. You will need to regenerate it at least once per hour.
<br><br><br>
<br><br><br>
</div>




<div lang="en" dir="ltr" class="mw-content-ltr">
= '''API CLIENT ([https://simplybook.me/api/doc#/admin SERVICE PUBLIC DE L'ENTREPRISE]) AUTORISATION''' =
='''CLIENT API([https://simplybook.me/api/doc#/admin COMPANY PUBLIC SERVICE])AUTHORIZATION'''=
<br><br>
<br><br>
=='''Authorization from client side code'''==
== '''Autorisation depuis le code côté client''' ==
<br><br>
<br><br>
'''Getting the token-key'''.
'''Obtention de la clé token'''.
<br><br>
<br><br>
  <nowiki>var loginClient = new JSONRpcClient({
  <nowiki>var loginClient = new JSONRpcClient({
Line 39: Line 36:
var token = loginClient.getToken(YOUR_COMPANY_LOGIN, YOUR_API_KEY);</nowiki>
var token = loginClient.getToken(YOUR_COMPANY_LOGIN, YOUR_API_KEY);</nowiki>
<br><br>
<br><br>
'''Initialization JSON-RPC-client.'''
'''Initialisation du client JSON-RPC.'''
<br><br>
<br><br>
  <nowiki>this.client = new JSONRpcClient({
  <nowiki>this.client = new JSONRpcClient({
'url': 'https://user-api.simplybook.me',
'url': 'https://user-api.simplybook.me',
'headers': {
'headers': {
'X-Company-Login': YOUR_COMPANY_LOGIN,
'X-Company-Login': VOTRE_IDENTIFIANT_DE_CONNEXION_À_VOTRE_ENTREPRISE,
'X-Token': token
'X-Token': token
},
},
Line 50: Line 47:
});</nowiki>
});</nowiki>
<br><br>
<br><br>
=='''Authorization from server side code'''==
== '''Autorisation depuis le code côté serveur''' ==
<br><br>
<br><br>
'''Getting the token-key.'''<br><br>
'''Obtention de la clé du jeton.'''<br><br>
  <nowiki>$loginClient = new JsonRpcClient('https://user-api.simplybook.me' . '/login/');
  <nowiki>$loginClient = new JsonRpcClient('https://user-api.simplybook.me' . '/login/');
$token = $loginClient->getToken(YOUR_COMPANY_LOGIN, YOUR_API_KEY);</nowiki>
$token = $loginClient-&gt;getToken(YOUR_COMPANY_LOGIN, YOUR_API_KEY);</nowiki>
<br><br>
<br><br>
'''Initialization JSON-RPC-client.'''
'''Initialisation du client JSON-RPC.'''
<br><br>
<br><br>
  <nowiki>$client = new JsonRpcClient('https://user-api.simplybook.me' . '/', array(
  <nowiki>$client = new JsonRpcClient('https://user-api.simplybook.me' . '/', array(
    'headers' => array(
  'headers' =&gt; array(
        'X-Company-Login: ' . YOUR_COMPANY_LOGIN,
      'X-Company-Login: ' . VOTRE_IDENTIFIANT_DE_CONNEXION,
        'X-Token: ' . $token
      'X-Token: ' . $token
    )
  )
));</nowiki>
));</nowiki>
<br><br><br>
<br><br><br>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
= '''AUTORISATION DE L'API UTILISATEUR/ADMIN ([https://simplybook.me/api/doc#/admin SERVICE D'ADMINISTRATION DE L'ENTREPRISE])''' =
='''USER/ADMIN API ([https://simplybook.me/api/doc#/admin COMPANY ADMINISTRATION SERVICE]) AUTHORIZATION'''=
<br><br>
<br><br>
=='''Authorization from client side code'''==
== '''Autorisation depuis le code côté client''' ==
<br><br>
<br><br>
'''Getting the token-key.'''
'''Obtention de la clé token.'''
<br><br>
<br><br>
  <nowiki>var loginClient = new JSONRpcClient({
  <nowiki>var loginClient = new JSONRpcClient({
Line 80: Line 75:
var token = loginClient.getUserToken(YOUR_COMPANY_LOGIN, YOUR_USER_LOGIN, YOUR_USER_PASSWORD);</nowiki>
var token = loginClient.getUserToken(YOUR_COMPANY_LOGIN, YOUR_USER_LOGIN, YOUR_USER_PASSWORD);</nowiki>
<br><br>
<br><br>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
'''Initialisation du client JSON-RPC'''.
'''Initialization JSON-RPC-client'''.
<br><br>
<br><br>
  <nowiki>this.client = new JSONRpcClient({
  <nowiki>this.client = new JSONRpcClient({
Line 94: Line 87:
});</nowiki>
});</nowiki>
<br><br>
<br><br>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
== '''Autorisation côté serveur''' ==
=='''Authorization from server side code'''==
<br><br>
<br><br>
'''Getting the token-key.'''
'''Obtention de la clé de jeton.'''
<br><br>
<br><br>
  <nowiki>$loginClient = new JsonRpcClient('https://user-api.simplybook.me' . '/login/');
  <nowiki>$loginClient = new JsonRpcClient('https://user-api.simplybook.me' . '/login/');
$token = $loginClient->getUserToken(YOUR_COMPANY_LOGIN, YOUR_USER_LOGIN, YOUR_USER_PASSWORD);</nowiki>
$token = $loginClient-&gt;getUserToken(YOUR_COMPANY_LOGIN, YOUR_USER_LOGIN, YOUR_USER_PASSWORD);</nowiki>
<br><br>
<br><br>
'''Initialization JSON-RPC-client.'''
'''Initialisation du client JSON-RPC.'''
<br><br>
<br><br>
  <nowiki>$client = new JsonRpcClient('https://user-api.simplybook.me' . '/admin/', array(
  <nowiki>$client = new JsonRpcClient('https://user-api.simplybook.me' . '/admin/', array(
'headers' => array(
'headers' =&gt; array(
'X-Company-Login: ' . YOUR_COMPANY_LOGIN,
'X-Company-Login: ' . YOUR_COMPANY_LOGIN,
'X-User-Token: ' . $token
'X-User-Token: ' . $token
Line 113: Line 104:
));</nowiki>
));</nowiki>
<br><br><br>
<br><br><br>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
= '''OBTENTION DE DONNÉES À PARTIR DU SERVEUR SIMPLYBOOK''' =
='''GETTING DATA FROM SIMPLYBOOK SERVER'''=
<br><br>
<br><br>
A booking page usually is a page where clients choose service they need, an employee and a time of their meeting. Then a client enters some contact info and confirms the booking. The more complex solutions may include filling different intake forms, making some group or multi-times booking and so on. Lets describe the workflow of creation the simpliest booking page. Then if you need to add some extra functionality to your page, see here the full list of [https://simplybook.me/api/doc Simplybook API methods].
Une page de réservation est généralement une page où les clients choisissent le service dont ils ont besoin, un employé et l'heure de leur rendez-vous. Ensuite, le client saisit ses coordonnées et confirme la réservation. Les solutions plus complexes peuvent inclure le remplissage de différents formulaires d'inscription, la création de réservations de groupe ou de plusieurs rendez-vous, etc. Décrivons le processus de création d'une page de réservation simple. Si vous avez besoin d'ajouter des fonctionnalités supplémentaires à votre page, consultez ici la liste complète [https://simplybook.me/api/doc des méthodes API Simplybook].
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
La première chose à afficher est donc la liste des services et la liste des employés. Obtenez ces données à l'aide des méthodes getEventList et getUnitList. Elles renvoient toutes deux une liste contenant des informations complètes sur chaque élément, ce qui vous offre de nombreuses possibilités pour afficher les services et les employés sur votre page. Pour filtrer les employés, utilisez la propriété unit_map de la liste des services, qui contient des informations sur les employés pouvant fournir le service sélectionné.
So the first thing you should display is the list of services and the list of employes. Get this data by getEventList and getUnitList methods. They both return a list with complete information about each item in it, so you have many possibilities how to display services and employees at your page. To make employee filtration use unit_map property of the service list, it contains the info about employees who can provide the selected service.
<br><br>
<br><br>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
'''Exemple de code pour obtenir la liste des services'''
'''Code example of getting services list'''
<br><br>
<br><br>
  <nowiki>$services = $client->getEventList();
  <nowiki>$services = $client-&gt;getEventList();
// returns array(array(
// renvoie array(array(
//    'id' => 1, - service id
//    'id' =&gt; 1, - identifiant du service
//    'name' => 'Service 1', - service's name
//    'name' =&gt; 'Service 1', - nom du service
//    'description' => 'Describe your service...', - service description
//    'description' =&gt; 'Describe your service...', - description du service
//    'duration' => 60, - service duration
//    'duration' =&gt; 60, - durée du service
//    'hide_duration' => 0, - Hide duration to clients flag,
//    'hide_duration' =&gt; 0, - drapeau permettant de masquer la durée aux clients,
//    'picture' => null, - file name of picture or null
//    'picture' =&gt; null, - nom du fichier de l'image ou null
//    'picture_path' => '/uploads/apidemo/event__picture/small/', - full path to picture,
//    'picture_path' =&gt; '/uploads/apidemo/event__picture/small/', - chemin complet vers l'image,
//    'position' => 1 - service position
//    'position' =&gt; 1 - position du service
//    'is_active' => 1, - the service is activated
//    'is_active' =&gt; 1, - le service est activé
//    'is_public' => 1, - the service is allowed to book by clients
//    'is_public' =&gt; 1, - le service peut être réservé par les clients
// ), ...)</nowiki>
// ), ...)</nowiki>
<br><br>
<br><br>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
'''Exemple de code pour obtenir la liste des prestataires de services'''
'''Code example of getting service performers list'''
<br><br>
<br><br>
  <nowiki>$services = $client->getUnitList();
  <nowiki>$services = $client-&gt;getUnitList();
// returns array(array(
// renvoie array(array(
//    'id' => 1, - performer id
//    'id' =&gt; 1, - identifiant du prestataire
//    'name' => 'Provider 1', - performer name
//    'name' =&gt; 'Prestataire 1', - nom du prestataire
//    'phone' => '111111111', - perfomer phone number
//    'phone' =&gt; '111111111', - numéro de téléphone du prestataire
//    'description' => 'Describe your performer...', - performer description
//    'description' =&gt; 'Décrivez votre prestataire...', - description du prestataire
//    'email' => 'test@gmail.com', - perfomer email,
//    'email' =&gt; 'test@gmail.com', - adresse e-mail du prestataire,
//    'is_active' => 1, - the performer is activated
//    'is_active' =&gt; 1, - le prestataire est activé
//    'is_visible' => 1, - the perfomer is visible for clients,
//    'is_visible' =&gt; 1, - l'artiste est visible pour les clients,
//    'picture' => null, - file name of picture or null,
//    'picture' =&gt; null, - nom du fichier de l'image ou null,
//    'picure_path' => '/uploads/apidemo/unit_group__picture/small/', - full path to picture
//    'picure_path' =&gt; '/uploads/apidemo/unit_group__picture/small/', - chemin complet vers l'image
//    'position' => 1, - performer position
//    'position' =&gt; 1, - position de l'artiste
//    'qty' => 1, performer quantity
//    'qty' =&gt; 1, quantité d'artistes
// ), ...)</nowiki>
// ), ...)</nowiki>
<br><br>
<br><br>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
L'étape suivante pour un client consiste à choisir une date et une heure pour son service. Nous avons utilisé un sélecteur de date Bootstrap dans l'exemple d'utilisation de l'API, mais vous pouvez également utiliser celui-ci ou tout autre calendrier. Pour définir la première date de votre calendrier, utilisez la méthode getFirstWorkingDay. Elle peut prendre l'identifiant de l'employé comme paramètre et renvoie la prochaine date à laquelle l'employé sélectionné (ou tout employé de l'entreprise par défaut) est disponible pour une réservation. Pour afficher les créneaux horaires disponibles à une date sélectionnée, vous devez utiliser les méthodes getWorkCalendar et getStartTimeMatrix. La première méthode vous donne des informations sur les heures de début et de fin des jours ouvrables, ainsi que sur les jours fériés. La seconde renvoie la liste des créneaux horaires pouvant être réservés pour une date donnée.
The next step to a client is to pick a date and time of his service. We've used a Bootstrap date-picker in API-usage example, you can also use this or any other calendar. To set your calendar first date use getFirstWorkingDay method. It can take employee id as a parameter and returns the next date when the selected employee (or any employee in the company by default) is avaiable for booking. To show time slots inside a selected date you need getWorkCalendar and getStartTimeMatrix methods. The first method give you an information about working day start and end time, and about day-offs. And the second one returns the list of time-slots which can be booked for a certain date.
<br><br>
<br><br>
'''Code example of getting work days info'''
'''Exemple de code pour obtenir des informations sur les jours ouvrables'''
<br><br>
<br><br>
</div>


  <div lang="en" dir="ltr" class="mw-content-ltr">
  <nowiki>$année = 2015 ;
<nowiki>$year = 2015;
$mois = 3 ; // mars
$month = 3; // March
$performerId = 1 ; // Peut être nul
$performerId = 1; // Can be null
$workDaysInfo = $client-&gt;getWorkCalendar($année, $mois, $performerId) ;
$workDaysInfo = $client->getWorkCalendar($year, $month, $performerId);
// renvoie array(
// returns array(
//    '2015-03-01' =&gt; array('from' =&gt; '09:00:00', 'to' =&gt; '18:00:00', 'is_day_off' =&gt; 0),
//    '2015-03-01' => array('from' => '09:00:00', 'to' => '18:00:00', 'is_day_off' => 0),
//    '2015-03-02' =&gt; array('from' =&gt; '09:00:00', 'to' =&gt; '18:00:00', 'is_day_off' =&gt; 0),
//    '2015-03-02' => array('from' => '09:00:00', 'to' => '18:00:00', 'is_day_off' => 0),
//    ...
//    ...
//);</nowiki>
//);</nowiki>
<br><br>
<br><br>
'''Code example of getting start time matrix'''
'''Exemple de code pour obtenir la matrice des heures de début'''
<br><br>
<br><br>
  <nowiki>$dateFrom = '2015-03-03';
  <nowiki>$dateFrom = '2015-03-03';
Line 190: Line 169:
$performerId = 1;
$performerId = 1;
$qty = 1;
$qty = 1;
$availableTime = $client->getStartTimeMatrix($dateFrom, $dateTo, $serviceId, $performerId, $qty);
$availableTime = $client-&gt;getStartTimeMatrix($dateFrom, $dateTo, $serviceId, $performerId, $qty);
// returns array(
// renvoie array(
//    '2015-03-03' => array('09:00:00', '09:30:00', '10:00:00', ....),
//    '2015-03-03' =&gt; array('09:00:00', '09:30:00', '10:00:00', ....),
//    '2015-03-04' => array('09:00:00', '09:30:00', '10:00:00', ....),
//    '2015-03-04' =&gt; array('09:00:00', '09:30:00', '10:00:00', ....),
//);</nowiki>
//);</nowiki>
<br><br>
<br><br>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
Une autre méthode utile dont vous pourriez avoir besoin est calculateEndTime. Chaque service peut avoir sa propre durée, et les employés de votre entreprise peuvent avoir des horaires de travail différents d'un jour à l'autre. Cette méthode vous permet donc d'indiquer à un client la date et l'heure de fin du service qu'il a réservé de manière correcte.
Another usefull method you may need is calculateEndTime. Each service can have its own duration, also your company's employees possible have different work schedule form day to day. So using this method you can show to a client an end date and time of the service he've booked in a correct way.
<br><br>
<br><br>
'''Code example of calculating booking end time'''
'''Exemple de code pour calculer l'heure de fin d'une réservation'''
<br><br>
<br><br>
  <nowiki>$startDateTime = '2015-03-03 09:00:00';
  <nowiki>$startDateTime = '2015-03-03 09:00:00';
$serviceId = 1;
$serviceId = 1;
$performerId = 1;
$performerId = 1;
$availableTime = $client->calculateEndTime($startDateTime, $serviceId, $performerId);
$availableTime = $client-&gt;calculateEndTime($startDateTime, $serviceId, $performerId);
// returns '2015-03-03 10:00:00'
// renvoie « 2015-03-03 10:00:00 »
</nowiki>
</nowiki>
<br><br>
<br><br>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
Lorsqu'un client clique sur le bouton « Confirmer la réservation », vous devez appeler la méthode « book ». Il s'agit de la fonction principale qui effectue toutes les validations nécessaires et enregistre une nouvelle réservation dans le système Simplybook. Elle récupère les informations relatives à la réservation, les données du client telles que son nom et son numéro de téléphone, ainsi que certains paramètres supplémentaires. Vous trouverez la description de tous les paramètres de cette méthode dans [https://simplybook.me/api/doc la liste des fonctions API]. La réponse de la méthode book contient un code unique et d'autres détails sur la nouvelle réservation ou la liste des erreurs si des problèmes sont survenus. Vous pouvez utiliser ces informations pour afficher le résultat de la réservation au client de manière pratique et intuitive.
When a client clicks confirm booking button you have to call book method. This is the main function which performs all necessary validations and registers a new booking in Simplybook system. It takes information about booking, client data like name and phone and some additional params. See all params descriptions of this method in [https://simplybook.me/api/doc API functions list]. The book method responce contains an uniqe code and other details of the new booking or the list of errors if some problems occured, so you can use this information to show booking result to a client in convinient and intuitive way.
<br><br><br>
<br><br><br>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
= '''UTILISATION DE LA CLÉ SECRÈTE API''' =
='''USING OF API SECRET KEY'''=
<br><br>
<br><br>
In some cases the book method may require the confirmation, e.g. if your accept payments from clients you confirm booking only after the payment is already came. The Simplybook API confirmBookng method takes booking-id and secure signature as params (another method which requires secure signature is cancelBookng). For the secure signature generation your secret API-key should be used. See how it can be done in the example below. You can find the secret key at admin interface under 'Settings' link of API Custom Feature in 'Custom Features' list.
Dans certains cas, la méthode de réservation peut nécessiter une confirmation, par exemple si vous acceptez les paiements de vos clients et que vous ne confirmez la réservation qu'après réception du paiement. La méthode confirmBookng de l'API Simplybook prend comme paramètres l'identifiant de la réservation et une signature sécurisée (une autre méthode qui nécessite une signature sécurisée est cancelBookng). Pour générer une signature sécurisée, vous devez utiliser votre clé API secrète. Découvrez comment procéder dans l'exemple ci-dessous. Vous trouverez la clé secrète dans l'interface d'administration, sous le lien « Paramètres » de la fonctionnalité API personnalisée dans la liste « Fonctionnalités personnalisées ».
<br><br>
<br><br>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
'''Exemple de code pour la réservation d'un service et sa confirmation à l'aide d'une clé API secrète'''
'''Code example of service booking and its confirmation using secret API key'''
<br><br>
<br><br>
  <nowiki>$additionalFields = array(
  <nowiki>$additionalFields = array(
'6740d3bce747107ddb9a789cbb78abf3' => 'value1',  
'6740d3bce747107ddb9a789cbb78abf3' =&gt; 'value1',  
'b0657bafaec7a2c9800b923f959f8163' => 'value2'
'b0657bafaec7a2c9800b923f959f8163' =&gt; 'value2'
);
);
$clientData = array(
$clientData = array(
'name' => 'Client name',
'name' =&gt; 'Nom du client',
'email' => 'client@email.com',
'email' =&gt; 'client@email.com',
'phone' => '+13152108338'
'phone' =&gt; '+13152108338'
);
);
$bookingsInfo = $client->book($eventId, $unitId, $date, $time, $clientData, $additionalFields);
$bookingsInfo = $client-&gt;book($eventId, $unitId, $date, $time, $clientData, $additionalFields);
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
if ($bookingsInfo-&gt;require_confirm) {
if ($bookingsInfo->require_confirm) {
foreach ($bookingsInfo-&gt;bookings as $booking) {
  foreach ($bookingsInfo->bookings as $booking) {
$sign = md5($booking-&gt;id . $booking-&gt;hash . YOUR_API_SECRET_KEY);
  $sign = md5($booking->id . $booking->hash . YOUR_API_SECRET_KEY);
$result = $client-&gt;confirmBooking($booking-&gt;id, $sign);
  $result = $client->confirmBooking($booking->id, $sign);
echo '
  echo '
Confirm result
Confirm result
';
';
  var_dump($result);
var_dump($result);
    }
}
}</nowiki>
}</nowiki>
<br><br>
<br><br>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
'''Exemple de code pour obtenir les formulaires d'inscription'''
'''Code example of getting intake forms'''
<br><br>
<br><br>
  <nowiki>$fields = $client->getAdditionalFields($eventId);
  <nowiki>$fields = $client-&gt;getAdditionalFields($eventId);
// returns - array(array(
// renvoie - array(array(
// 'name' => 'b0657bafaec7a2c9800b923f959f8163', - field name
// 'name' =&gt; 'b0657bafaec7a2c9800b923f959f8163', - nom du champ
// 'title' => 'Test digits', - field title
// 'title' =&gt; 'Test digits', - titre du champ
// 'type' => 'digits', - field type
// 'type' =&gt; 'digits', - type de champ
// 'values' => null, - available values for select field type
// 'values' =&gt; null, - valeurs disponibles pour le type de champ de sélection
// 'default' => null, - default value for field
// 'default' =&gt; null, - valeur par défaut pour le champ
// 'is_null' => null, - is filed nullable
// 'is_null' =&gt; null, - champ pouvant être vide
// 'on_main_page' => 1,  
// 'on_main_page' =&gt; 1,  
// 'pos' => 1, - field position
// 'pos' =&gt; 1, - position du champ
// 'value' => null
// 'value' =&gt; null
// )), ...)</nowiki>
// )), ...)</nowiki>
<br><br><br>
<br><br><br>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
= '''FONCTIONNALITÉS PERSONNALISÉES SIMPLYBOOK''' =
='''SIMPLYBOOK CUSTOM FEATURES'''=
<br><br>
<br><br>
If your company specific requires some additional functionality you can activate some of our additional Custom Features. The complete Custom Features list with detailed description is avaiable in your admin interface under the 'Custom Feature' link. After the necessary Custom Feature is enabled the corresponding API methods will be activated so you can use them in your code.
Si votre entreprise a besoin de fonctionnalités supplémentaires, vous pouvez activer certaines de nos fonctionnalités personnalisées. La liste complète des fonctionnalités personnalisées avec une description détaillée est disponible dans votre interface d'administration sous le lien « Fonctionnalités personnalisées ». Une fois la fonctionnalité personnalisée nécessaire activée, les méthodes API correspondantes seront activées afin que vous puissiez les utiliser dans votre code.
<br><br><br>
<br><br><br>
='''BOOKING FUNCTIONALITY CODEFLOW'''=
= '''FONCTIONNALITÉ DE RÉSERVATION CODEFLOW''' =
<br><br>
<br><br>
Authorize in Simplybook API using '''loginClient.getToken(companyLogin, apiKey);''' function.
Autorisez l'accès à l'API Simplybook à l'aide de la fonction '''loginClient.getToken(companyLogin, apiKey) ;'''.
</div>




<div lang="en" dir="ltr" class="mw-content-ltr">
Vérifiez si la fonctionnalité personnalisée Catégories de services est activée par [https://simplybook.me/en/api/doc#isPluginActivated isPluginActivated("event_category")]. Si oui, affichez la liste des catégories [https://simplybook.me/en/api/doc#getCategoriesList getCategoriesList()].
Check if Service categories Custom Feature is activated by [https://simplybook.me/en/api/doc#isPluginActivated isPluginActivated("event_category")] if yes then display list of categories [https://simplybook.me/en/api/doc#getCategoriesList getCategoriesList()].
</div>




<div lang="en" dir="ltr" class="mw-content-ltr">
Obtenir la liste des services (événements) et des prestataires (unités) à l'aide des fonctions [https://simplybook.me/en/api/doc#getEventList getEventList()] et [https://simplybook.me/en/api/doc#getUnitList getUnitList()]. Si le tableau « unit_map » est disponible pour un service, cela signifie que ce service ne peut être fourni que par les prestataires indiqués.
Get list of services (events) and performers (units) using [https://simplybook.me/en/api/doc#getEventList getEventList()] and [https://simplybook.me/en/api/doc#getUnitList getUnitList()] functions. If "unit_map" array is available for service it means this service can be provided by given performers only.
</div>






<div lang="en" dir="ltr" class="mw-content-ltr">
Si la fonctionnalité personnalisée Any Employee Selector est activée [https://simplybook.me/en/api/doc#isPluginActivated isPluginActivated("any_unit")] et qu'aucune durée particulière n'est définie pour la paire service-prestataire dans le tableau « unit_map », l'utilisateur doit pouvoir sélectionner l'option Any provider (Tout prestataire) ou choisir manuellement un prestataire. Cependant, la sélection manuelle des prestataires ne doit pas être possible si [https://simplybook.me/en/api/doc#getCompanyParam getCompanyParam("any_unit__hide_other_units")] est activé.
If Any Employee Selector Custom Feature is activated [https://simplybook.me/en/api/doc#isPluginActivated isPluginActivated("any_unit")] and no special duration is set for service-performer pair in "unit_map" array then user should be allowed to select Any provider option or choose provider manually. But manual selection of performers should not be possible if [https://simplybook.me/en/api/doc#getCompanyParam getCompanyParam("any_unit__hide_other_units")] is enabled.
</div>




<div lang="en" dir="ltr" class="mw-content-ltr">
Utilisez [https://simplybook.me/en/api/doc#getStartTimeMatrix getStartTimeMatrix ($from comme date actuelle, $to comme date actuelle, $eventId, $unitId, $count comme valeur des participants sélectionnés)] pour obtenir les créneaux horaires disponibles pour une date donnée. '''$unitId''' doit être nul si l'option « Tout employé » est sélectionnée.
Use [https://simplybook.me/en/api/doc#getStartTimeMatrix getStartTimeMatrix ($from as current date, $to as current date, $eventId, $unitId, $count as selected participants value )] to get available timeslots for given date. '''$unitId''' should be null if Any employee option is selected.
</div>




<div lang="en" dir="ltr" class="mw-content-ltr">
Si le sélecteur « Any Employee » (Tout employé) est actif et qu'un employé a été sélectionné, appelez [https://simplybook.me/en/api/doc#getAvailableUnits getAvailableUnits($eventId, $dateTime, $count)] pour obtenir le $unitId disponible
If Any Employee selector is active and Any employee was selected call [https://simplybook.me/en/api/doc#getAvailableUnits getAvailableUnits($eventId, $dateTime, $count)] to get available $unitId
</div>






<div lang="en" dir="ltr" class="mw-content-ltr">
Si la fonctionnalité personnalisée des formulaires de saisie est activée, [https://simplybook.me/en/api/doc#isPluginActivated isPluginActivated("event_field")] appelle la fonction [https://simplybook.me/en/api/doc#getAdditionalFields getAdditionalFields($eventId)] pour obtenir la liste des champs à remplir par le client.
If Intake Forms Custom Feature is activated [https://simplybook.me/en/api/doc#isPluginActivated isPluginActivated("event_field")] call [https://simplybook.me/en/api/doc#getAdditionalFields getAdditionalFields($eventId)] function to get list of fields for client to fill.
</div>




<div lang="en" dir="ltr" class="mw-content-ltr">
Appelez [https://simplybook.me/en/api/doc#book book($eventId, $unitId, $date, $time, $clientData, $additional, $count, $batchId)] pour effectuer une réservation.
Call [https://simplybook.me/en/api/doc#book book($eventId, $unitId, $date, $time, $clientData, $additional, $count, $batchId)] to make a booking.
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<br><br>
<br><br>
</div>

Latest revision as of 12:23, 15 May 2025



Utilisez notre API développeur pour créer votre propre interface de réservation. Vous pouvez concevoir la solution de votre choix, du widget le plus simple à l'application multifonctionnelle avec des fonctionnalités personnalisées en fonction des spécificités de votre entreprise.

L'interface de programmation d'application Simplybook utilise le protocole JSON-RPC 2.0.

Découvrez un exemple d'interface de réservation basée sur une API et consultez le code source de cette solution.



AUTORISATION



L'utilisation des méthodes API Simplybook nécessite une authentification. Pour vous autoriser dans l'API Simplybook, vous devez obtenir une clé d'accès — access-token. Pour obtenir cette clé d'accès, vous devez appeler la méthode JSON-RPC getToken sur le service https://user-api.simplybook.me/login en transmettant votre clé API personnelle. Vous pouvez copier votre clé API dans l'interface d'administration : allez dans le lien « Fonctionnalités personnalisées » et sélectionnez « Paramètres » dans les fonctionnalités personnalisées de l'API. Vous devez ensuite initialiser l'accès à distance à l'API Simplybook. Votre requête doit contenir les en-têtes suivants : « X-Company-Login », « X-Token ».

L'obtention du jeton d'accès peut être mise en œuvre soit côté client, soit depuis votre serveur, ce qui constitue la solution la plus sécurisée.


Vous pouvez utiliser la bibliothèque client JSON-RPC JavaScript et la bibliothèque client JSON-RPC PHP de nos exemples pour développer votre propre solution.

Veuillez noter que l'accès-token est valable une heure. Ceci est fait pour des raisons de sécurité. Vous devrez le régénérer au moins une fois par heure.



API CLIENT (SERVICE PUBLIC DE L'ENTREPRISE) AUTORISATION



Autorisation depuis le code côté client



Obtention de la clé token.

var loginClient = new JSONRpcClient({
	'url': 'https://user-api.simplybook.me' + '/login',
	'onerror': function (error) {},
});
var token = loginClient.getToken(YOUR_COMPANY_LOGIN, YOUR_API_KEY);



Initialisation du client JSON-RPC.

this.client = new JSONRpcClient({
	'url': 'https://user-api.simplybook.me',
	'headers': {
		'X-Company-Login': VOTRE_IDENTIFIANT_DE_CONNEXION_À_VOTRE_ENTREPRISE,
		'X-Token': token
	},
	'onerror': function (error) {}
});



Autorisation depuis le code côté serveur



Obtention de la clé du jeton.

$loginClient = new JsonRpcClient('https://user-api.simplybook.me' . '/login/');
$token = $loginClient->getToken(YOUR_COMPANY_LOGIN, YOUR_API_KEY);



Initialisation du client JSON-RPC.

$client = new JsonRpcClient('https://user-api.simplybook.me' . '/', array(
   'headers' => array(
       'X-Company-Login: ' . VOTRE_IDENTIFIANT_DE_CONNEXION,
       'X-Token: ' . $token
   )
));




AUTORISATION DE L'API UTILISATEUR/ADMIN (SERVICE D'ADMINISTRATION DE L'ENTREPRISE)



Autorisation depuis le code côté client



Obtention de la clé token.

var loginClient = new JSONRpcClient({
'url': 'https://user-api.simplybook.me' + '/login',
'onerror': function (error) {},
});
var token = loginClient.getUserToken(YOUR_COMPANY_LOGIN, YOUR_USER_LOGIN, YOUR_USER_PASSWORD);



Initialisation du client JSON-RPC.

this.client = new JSONRpcClient({
'url': 'https://user-api.simplybook.me' + '/admin/',
'headers': {
'X-Company-Login': YOUR_COMPANY_LOGIN,
'X-User-Token': token
},
'onerror': function (error) {}
});



Autorisation côté serveur



Obtention de la clé de jeton.

$loginClient = new JsonRpcClient('https://user-api.simplybook.me' . '/login/');
$token = $loginClient->getUserToken(YOUR_COMPANY_LOGIN, YOUR_USER_LOGIN, YOUR_USER_PASSWORD);



Initialisation du client JSON-RPC.

$client = new JsonRpcClient('https://user-api.simplybook.me' . '/admin/', array(
'headers' => array(
'X-Company-Login: ' . YOUR_COMPANY_LOGIN,
'X-User-Token: ' . $token
)
));




OBTENTION DE DONNÉES À PARTIR DU SERVEUR SIMPLYBOOK



Une page de réservation est généralement une page où les clients choisissent le service dont ils ont besoin, un employé et l'heure de leur rendez-vous. Ensuite, le client saisit ses coordonnées et confirme la réservation. Les solutions plus complexes peuvent inclure le remplissage de différents formulaires d'inscription, la création de réservations de groupe ou de plusieurs rendez-vous, etc. Décrivons le processus de création d'une page de réservation simple. Si vous avez besoin d'ajouter des fonctionnalités supplémentaires à votre page, consultez ici la liste complète des méthodes API Simplybook.

La première chose à afficher est donc la liste des services et la liste des employés. Obtenez ces données à l'aide des méthodes getEventList et getUnitList. Elles renvoient toutes deux une liste contenant des informations complètes sur chaque élément, ce qui vous offre de nombreuses possibilités pour afficher les services et les employés sur votre page. Pour filtrer les employés, utilisez la propriété unit_map de la liste des services, qui contient des informations sur les employés pouvant fournir le service sélectionné.

Exemple de code pour obtenir la liste des services

$services = $client->getEventList();
// renvoie array(array(
//     'id' => 1, - identifiant du service
//     'name' => 'Service 1', - nom du service
//     'description' => 'Describe your service...', - description du service
//     'duration' => 60, - durée du service
//     'hide_duration' => 0, - drapeau permettant de masquer la durée aux clients,
//     'picture' => null, - nom du fichier de l'image ou null
//     'picture_path' => '/uploads/apidemo/event__picture/small/', - chemin complet vers l'image,
//     'position' => 1 - position du service
//     'is_active' => 1, - le service est activé
//     'is_public' => 1, - le service peut être réservé par les clients
// ), ...)



Exemple de code pour obtenir la liste des prestataires de services

$services = $client->getUnitList();
// renvoie array(array(
//    'id' => 1, - identifiant du prestataire
//    'name' => 'Prestataire 1', - nom du prestataire
//    'phone' => '111111111', - numéro de téléphone du prestataire
//    'description' => 'Décrivez votre prestataire...', - description du prestataire
//    'email' => 'test@gmail.com', - adresse e-mail du prestataire,
//    'is_active' => 1, - le prestataire est activé
//    'is_visible' => 1, - l'artiste est visible pour les clients,
//    'picture' => null, - nom du fichier de l'image ou null,
//    'picure_path' => '/uploads/apidemo/unit_group__picture/small/', - chemin complet vers l'image
//    'position' => 1, - position de l'artiste
//    'qty' => 1, quantité d'artistes
// ), ...)



L'étape suivante pour un client consiste à choisir une date et une heure pour son service. Nous avons utilisé un sélecteur de date Bootstrap dans l'exemple d'utilisation de l'API, mais vous pouvez également utiliser celui-ci ou tout autre calendrier. Pour définir la première date de votre calendrier, utilisez la méthode getFirstWorkingDay. Elle peut prendre l'identifiant de l'employé comme paramètre et renvoie la prochaine date à laquelle l'employé sélectionné (ou tout employé de l'entreprise par défaut) est disponible pour une réservation. Pour afficher les créneaux horaires disponibles à une date sélectionnée, vous devez utiliser les méthodes getWorkCalendar et getStartTimeMatrix. La première méthode vous donne des informations sur les heures de début et de fin des jours ouvrables, ainsi que sur les jours fériés. La seconde renvoie la liste des créneaux horaires pouvant être réservés pour une date donnée.

Exemple de code pour obtenir des informations sur les jours ouvrables

$année = 2015 ;
$mois = 3 ; // mars
$performerId = 1 ; // Peut être nul 
$workDaysInfo = $client->getWorkCalendar($année, $mois, $performerId) ;				
// renvoie array(
//     '2015-03-01' => array('from' => '09:00:00', 'to' => '18:00:00', 'is_day_off' => 0),
//     '2015-03-02' => array('from' => '09:00:00', 'to' => '18:00:00', 'is_day_off' => 0),
//     ...
//);



Exemple de code pour obtenir la matrice des heures de début

$dateFrom = '2015-03-03';
$dateTo = '2015-03-04';
$serviceId = 1;
$performerId = 1;
$qty = 1;
$availableTime = $client->getStartTimeMatrix($dateFrom, $dateTo, $serviceId, $performerId, $qty);
// renvoie array(
//     '2015-03-03' => array('09:00:00', '09:30:00', '10:00:00', ....),
//     '2015-03-04' => array('09:00:00', '09:30:00', '10:00:00', ....),
//);



Une autre méthode utile dont vous pourriez avoir besoin est calculateEndTime. Chaque service peut avoir sa propre durée, et les employés de votre entreprise peuvent avoir des horaires de travail différents d'un jour à l'autre. Cette méthode vous permet donc d'indiquer à un client la date et l'heure de fin du service qu'il a réservé de manière correcte.

Exemple de code pour calculer l'heure de fin d'une réservation

$startDateTime = '2015-03-03 09:00:00';
$serviceId = 1;
$performerId = 1;
$availableTime = $client->calculateEndTime($startDateTime, $serviceId, $performerId);
// renvoie « 2015-03-03 10:00:00 »



Lorsqu'un client clique sur le bouton « Confirmer la réservation », vous devez appeler la méthode « book ». Il s'agit de la fonction principale qui effectue toutes les validations nécessaires et enregistre une nouvelle réservation dans le système Simplybook. Elle récupère les informations relatives à la réservation, les données du client telles que son nom et son numéro de téléphone, ainsi que certains paramètres supplémentaires. Vous trouverez la description de tous les paramètres de cette méthode dans la liste des fonctions API. La réponse de la méthode book contient un code unique et d'autres détails sur la nouvelle réservation ou la liste des erreurs si des problèmes sont survenus. Vous pouvez utiliser ces informations pour afficher le résultat de la réservation au client de manière pratique et intuitive.


UTILISATION DE LA CLÉ SECRÈTE API



Dans certains cas, la méthode de réservation peut nécessiter une confirmation, par exemple si vous acceptez les paiements de vos clients et que vous ne confirmez la réservation qu'après réception du paiement. La méthode confirmBookng de l'API Simplybook prend comme paramètres l'identifiant de la réservation et une signature sécurisée (une autre méthode qui nécessite une signature sécurisée est cancelBookng). Pour générer une signature sécurisée, vous devez utiliser votre clé API secrète. Découvrez comment procéder dans l'exemple ci-dessous. Vous trouverez la clé secrète dans l'interface d'administration, sous le lien « Paramètres » de la fonctionnalité API personnalisée dans la liste « Fonctionnalités personnalisées ».

Exemple de code pour la réservation d'un service et sa confirmation à l'aide d'une clé API secrète

$additionalFields = array(
	'6740d3bce747107ddb9a789cbb78abf3' => 'value1', 
	'b0657bafaec7a2c9800b923f959f8163' => 'value2'
);
$clientData = array(
	'name' => 'Nom du client',
	'email' => 'client@email.com',
	'phone' => '+13152108338'
);
		
$bookingsInfo = $client->book($eventId, $unitId, $date, $time, $clientData, $additionalFields);

if ($bookingsInfo->require_confirm) {
 foreach ($bookingsInfo->bookings as $booking) {
	 $sign = md5($booking->id . $booking->hash . YOUR_API_SECRET_KEY);
	 $result = $client->confirmBooking($booking->id, $sign);
	 echo '
Confirm result
';
	 var_dump($result);
 }
}



Exemple de code pour obtenir les formulaires d'inscription

$fields = $client->getAdditionalFields($eventId);
// renvoie - array(array(
//		'name' => 'b0657bafaec7a2c9800b923f959f8163', - nom du champ
//		'title' => 'Test digits', - titre du champ
//		'type' => 'digits', - type de champ
//		'values' => null, - valeurs disponibles pour le type de champ de sélection
//		'default' => null, - valeur par défaut pour le champ
//		'is_null' => null, - champ pouvant être vide
//		'on_main_page' => 1, 
//		'pos' => 1, - position du champ
//		'value' => null
// )), ...)




FONCTIONNALITÉS PERSONNALISÉES SIMPLYBOOK



Si votre entreprise a besoin de fonctionnalités supplémentaires, vous pouvez activer certaines de nos fonctionnalités personnalisées. La liste complète des fonctionnalités personnalisées avec une description détaillée est disponible dans votre interface d'administration sous le lien « Fonctionnalités personnalisées ». Une fois la fonctionnalité personnalisée nécessaire activée, les méthodes API correspondantes seront activées afin que vous puissiez les utiliser dans votre code.


FONCTIONNALITÉ DE RÉSERVATION CODEFLOW



Autorisez l'accès à l'API Simplybook à l'aide de la fonction loginClient.getToken(companyLogin, apiKey) ;.


Vérifiez si la fonctionnalité personnalisée Catégories de services est activée par isPluginActivated("event_category"). Si oui, affichez la liste des catégories getCategoriesList().


Obtenir la liste des services (événements) et des prestataires (unités) à l'aide des fonctions getEventList() et getUnitList(). Si le tableau « unit_map » est disponible pour un service, cela signifie que ce service ne peut être fourni que par les prestataires indiqués.


Si la fonctionnalité personnalisée Any Employee Selector est activée isPluginActivated("any_unit") et qu'aucune durée particulière n'est définie pour la paire service-prestataire dans le tableau « unit_map », l'utilisateur doit pouvoir sélectionner l'option Any provider (Tout prestataire) ou choisir manuellement un prestataire. Cependant, la sélection manuelle des prestataires ne doit pas être possible si getCompanyParam("any_unit__hide_other_units") est activé.


Utilisez getStartTimeMatrix ($from comme date actuelle, $to comme date actuelle, $eventId, $unitId, $count comme valeur des participants sélectionnés) pour obtenir les créneaux horaires disponibles pour une date donnée. $unitId doit être nul si l'option « Tout employé » est sélectionnée.


Si le sélecteur « Any Employee » (Tout employé) est actif et qu'un employé a été sélectionné, appelez getAvailableUnits($eventId, $dateTime, $count) pour obtenir le $unitId disponible


Si la fonctionnalité personnalisée des formulaires de saisie est activée, isPluginActivated("event_field") appelle la fonction getAdditionalFields($eventId) pour obtenir la liste des champs à remplir par le client.


Appelez book($eventId, $unitId, $date, $time, $clientData, $additional, $count, $batchId) pour effectuer une réservation.