User API guide/sv: Difference between revisions

From SimplyBook.me
Created page with "Användar-API-guide"
 
Created page with "'''Initialisering av JSON-RPC-klient'''. <br><br> <nowiki>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) {} });</nowiki> <br><br>"
Tags: Mobile edit Mobile web edit
 
(9 intermediate revisions by the same user not shown)
Line 15: Line 15:
Användning av Simplybook API-metoder kräver autentisering. För att auktorisera i Simplybook API måste du skaffa en åtkomstnyckel – access-token. För att få denna access-token måste du anropa JSON-RPC-metoden getToken på https://user-api.simplybook.me/login service och ange din personliga API-nyckel. Du kan kopiera din API-nyckel i admin-gränssnittet: gå till länken "Anpassade funktioner" och välj API-anpassad funktion "Inställningar". Sedan måste du initiera fjärråtkomst till Simplybook API. Din begäran ska innehålla följande rubriker: "X-Company-Login", "X-Token".
Användning av Simplybook API-metoder kräver autentisering. För att auktorisera i Simplybook API måste du skaffa en åtkomstnyckel – access-token. För att få denna access-token måste du anropa JSON-RPC-metoden getToken på https://user-api.simplybook.me/login service och ange din personliga API-nyckel. Du kan kopiera din API-nyckel i admin-gränssnittet: gå till länken "Anpassade funktioner" och välj API-anpassad funktion "Inställningar". Sedan måste du initiera fjärråtkomst till Simplybook API. Din begäran ska innehålla följande rubriker: "X-Company-Login", "X-Token".


<div lang="en" dir="ltr" class="mw-content-ltr">
Åtkomsttoken kan implementeras antingen från klientsidan eller från din server, vilket är den säkrare lösningen.
Getting the access-token can be implemented either from client side or from your server which is the more secure solution.
</div>




<div lang="en" dir="ltr" class="mw-content-ltr">
Du kan använda [https://simplybook.me/api_example/json-rpc-client.js javascript JSON-RPC-klientbibliotek] och [https://simplybook.me/api_example/JsonRpcClient.zip php JSON-RPC-klientbibliotek] från våra exempel för att utveckla egna lösningar.
You may use [https://simplybook.me/api_example/json-rpc-client.js javascript JSON-RPC-client library] and [https://simplybook.me/api_example/JsonRpcClient.zip php JSON-RPC-client library] from our examples for your own solution development.
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
Observera att åtkomsttoken är giltigt i en timme. Detta görs av säkerhetsskäl. Du måste generera det på nytt minst en gång per timme.
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">
= '''KLIENT-API ([https://simplybook.me/api/doc#/admin FÖRETAGETS OFFENTLIGA TJÄNST]) AUTORISERING''' =
='''CLIENT API([https://simplybook.me/api/doc#/admin COMPANY PUBLIC SERVICE])AUTHORIZATION'''=
<br><br>
<br><br>
=='''Authorization from client side code'''==
== '''Auktorisering från klientens kod''' ==
<br><br>
<br><br>
'''Getting the token-key'''.
'''Hämta token-nyckeln'''.
<br><br>
<br><br>
  <nowiki>var loginClient = new JSONRpcClient({
  <nowiki>var loginClient = new JSONRpcClient({
Line 43: 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.'''
'''Initialisering av JSON-RPC-klient.'''
<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': DITT_FÖRETAGSLOGIN,
'X-Token': token
'X-Token': token
},
},
Line 54: Line 47:
});</nowiki>
});</nowiki>
<br><br>
<br><br>
=='''Authorization from server side code'''==
== '''Auktorisering från serverns kod''' ==
<br><br>
<br><br>
'''Getting the token-key.'''<br><br>
'''Hämta token-nyckeln.'''<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.'''
'''Initialisering av JSON-RPC-klient.'''
<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: ' . DITT_FÖRETAGSLOGIN,
        'X-Token: ' . $token
      'X-Token: ' . $token
    )
  )
));</nowiki>
));</nowiki>
<br><br><br>
<br><br><br>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
= '''ANVÄNDARE/ADMIN API ([https://simplybook.me/api/doc#/admin FÖRETAGSADMINISTRATIONSTJÄNST]) AUTORISATION''' =
='''USER/ADMIN API ([https://simplybook.me/api/doc#/admin COMPANY ADMINISTRATION SERVICE]) AUTHORIZATION'''=
<br><br>
<br><br>
=='''Authorization from client side code'''==
== '''Auktorisering från klientens kod''' ==
<br><br>
<br><br>
'''Getting the token-key.'''
'''Hämta token-nyckeln.'''
<br><br>
<br><br>
  <nowiki>var loginClient = new JSONRpcClient({
  <nowiki>var loginClient = new JSONRpcClient({
Line 84: 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">
'''Initialisering av JSON-RPC-klient'''.
'''Initialization JSON-RPC-client'''.
<br><br>
<br><br>
  <nowiki>this.client = new JSONRpcClient({
  <nowiki>this.client = new JSONRpcClient({
Line 98: Line 87:
});</nowiki>
});</nowiki>
<br><br>
<br><br>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
== '''Auktorisering från serverns kod''' ==
=='''Authorization from server side code'''==
<br><br>
<br><br>
'''Getting the token-key.'''
'''Hämta token-nyckeln.'''
<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.'''
'''Initialisering av JSON-RPC-klient.'''
<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 117: Line 104:
));</nowiki>
));</nowiki>
<br><br><br>
<br><br><br>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
= '''HÄMTA DATA FRÅN SIMPLYBOOK-SERVER''' =
='''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].
En bokningssida är vanligtvis en sida där kunder väljer den tjänst de behöver, en anställd och en tid för sitt möte. Därefter anger kunden sina kontaktuppgifter och bekräftar bokningen. Mer komplexa lösningar kan innefatta ifyllande av olika intagsformulär, gruppbokningar, bokningar av flera tider och så vidare. Låt oss beskriva arbetsflödet för att skapa den enklaste bokningssidan. Om du sedan behöver lägga till ytterligare funktioner till din sida hittar du en fullständig lista över [https://simplybook.me/api/doc Simplybook API-metoder] här.
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
Det första du bör visa är listan över tjänster och listan över anställda. Hämta dessa data med metoderna getEventList och getUnitList. Båda returnerar en lista med fullständig information om varje objekt i listan, så du har många möjligheter att visa tjänster och anställda på din sida. För att filtrera anställda använder du egenskapen unit_map i tjänstelistan, som innehåller information om anställda som kan tillhandahålla den valda tjänsten.
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">
'''Kodexempel för att hämta tjänstelistan'''
'''Code example of getting services list'''
<br><br>
<br><br>
  <nowiki>$services = $client->getEventList();
  <nowiki>$services = $client-&gt;getEventList();
// returns array(array(
// returnerar array(array(
//    'id' => 1, - service id
//    'id' =&gt; 1, - tjänst-id
//    'name' => 'Service 1', - service's name
//    'name' =&gt; 'Service 1', - tjänstens namn
//    'description' => 'Describe your service...', - service description
//    'description' =&gt; 'Beskriv din tjänst...', - tjänstens beskrivning
//    'duration' => 60, - service duration
//    'duration' =&gt; 60, - tjänstens varaktighet
//    'hide_duration' => 0, - Hide duration to clients flag,
//    'hide_duration' =&gt; 0, - flagga för att dölja varaktighet för kunder,
//    'picture' => null, - file name of picture or null
//    'picture' =&gt; null, - filnamn på bild eller null
//    'picture_path' => '/uploads/apidemo/event__picture/small/', - full path to picture,
//    'picture_path' =&gt; '/uploads/apidemo/event__picture/small/', - fullständig sökväg till bild,
//    'position' => 1 - service position
//    'position' =&gt; 1 - tjänstens position
//    'is_active' => 1, - the service is activated
//    'is_active' =&gt; 1, - tjänsten är aktiverad
//    'is_public' => 1, - the service is allowed to book by clients
//    'is_public' =&gt; 1, - tjänsten får bokas av kunder
// ), ...)</nowiki>
// ), ...)</nowiki>
<br><br>
<br><br>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
'''Kodexempel för att hämta en lista över tjänsteleverantörer'''
'''Code example of getting service performers list'''
<br><br>
<br><br>
  <nowiki>$services = $client->getUnitList();
  <nowiki>$services = $client-&gt;getUnitList();
// returns array(array(
// returnerar array(array(
//    'id' => 1, - performer id
//    'id' =&gt; 1, - leverantörs-id
//    'name' => 'Provider 1', - performer name
//    'name' =&gt; 'Provider 1', - utförarens namn
//    'phone' => '111111111', - perfomer phone number
//    'phone' =&gt; '111111111', - utförarens telefonnummer
//    'description' => 'Describe your performer...', - performer description
//    'description' =&gt; 'Beskriv din utförare...', - beskrivning av utföraren
//    'email' => 'test@gmail.com', - perfomer email,
//    'email' =&gt; 'test@gmail.com', - utförarens e-postadress,
//    'is_active' => 1, - the performer is activated
//    'is_active' =&gt; 1, - utföraren är aktiv
//    'is_visible' => 1, - the perfomer is visible for clients,
//    'is_visible' =&gt; 1, - artisten är synlig för kunder,
//    'picture' => null, - file name of picture or null,
//    'picture' =&gt; null, - filnamn på bild eller null,
//    'picure_path' => '/uploads/apidemo/unit_group__picture/small/', - full path to picture
//    'picure_path' =&gt; '/uploads/apidemo/unit_group__picture/small/', - fullständig sökväg till bild
//    'position' => 1, - performer position
//    'position' =&gt; 1, - artistens position
//    'qty' => 1, performer quantity
//    'qty' =&gt; 1, antal artister
// ), ...)</nowiki>
// ), ...)</nowiki>
<br><br>
<br><br>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
Nästa steg för en kund är att välja datum och tid för sin tjänst. Vi har använt en Bootstrap-datumväljare i API-användningsexemplet, men du kan också använda denna eller någon annan kalender. För att ställa in första datum i kalendern använder du metoden getFirstWorkingDay. Den kan ta anställd-id som parameter och returnerar nästa datum när den valda anställda (eller någon anställd i företaget som standard) är tillgänglig för bokning. För att visa tidsluckor inom ett valt datum behöver du metoderna getWorkCalendar och getStartTimeMatrix. Den första metoden ger dig information om arbetsdagens start- och sluttid samt om lediga dagar. Den andra returnerar en lista över tidsluckor som kan bokas för ett visst datum.
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'''
'''Kodexempel för att hämta information om arbetsdagar'''
<br><br>
<br><br>
</div>


  <div lang="en" dir="ltr" class="mw-content-ltr">
  <nowiki>$year = 2015;
<nowiki>$year = 2015;
$month = 3; // mars
$month = 3; // March
$performerId = 1; // Kan vara null  
$performerId = 1; // Can be null  
$workDaysInfo = $client-&gt;getWorkCalendar($year, $month, $performerId);
$workDaysInfo = $client->getWorkCalendar($year, $month, $performerId);
// returnerar 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'''
'''Kodexempel för att hämta starttidsmatris'''
<br><br>
<br><br>
  <nowiki>$dateFrom = '2015-03-03';
  <nowiki>$dateFrom = '2015-03-03';
Line 194: 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(
// returnerar 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">
En annan användbar metod som du kan behöva är calculateEndTime. Varje tjänst kan ha sin egen varaktighet, och dina anställda kan ha olika arbetsscheman från dag till dag. Med den här metoden kan du visa en kund slutdatum och sluttid för den tjänst han eller hon har bokat på ett korrekt sätt.
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'''
'''Kodexempel för beräkning av bokningens sluttid'''
<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'
// returnerar '2015-03-03 10:00:00'
</nowiki>
</nowiki>
<br><br>
<br><br>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
När en kund klickar på knappen Bekräfta bokning måste du anropa metoden book. Detta är huvudfunktionen som utför alla nödvändiga valideringar och registrerar en ny bokning i Simplybook-systemet. Den tar information om bokningen, kunddata som namn och telefonnummer samt några ytterligare parametrar. Se alla parametrarbeskrivningar för denna metod i [https://simplybook.me/api/doc listan över API-funktioner]. Svaret från bokningsmetoden innehåller en unik kod och andra detaljer om den nya bokningen eller en lista över fel om några problem har uppstått, så att du kan använda denna information för att visa bokningsresultatet för kunden på ett bekvämt och intuitivt sätt.
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">
= '''ANVÄNDNING AV API-HEMLIG NYCKEL''' =
='''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.
I vissa fall kan bokningsmetoden kräva bekräftelse, t.ex. om du accepterar betalningar från kunder bekräftar du bokningen först efter att betalningen har kommit in. Simplybook API:s bekräftelsemetod tar boknings-id och säker signatur som parametrar (en annan metod som kräver säker signatur är cancelBookng). För att generera en säker signatur måste du använda din hemliga API-nyckel. Se hur det går till i exemplet nedan. Du hittar den hemliga nyckeln i admin-gränssnittet under länken "Inställningar" i API-anpassade funktioner i listan "Anpassade funktioner".
<br><br>
<br><br>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
'''Kodexempel på bokning av tjänst och bekräftelse med hjälp av hemlig API-nyckel'''
'''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; 'Kundnamn',
'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 '
Bekräfta resultat
Confirm result
';
';
  var_dump($result);
var_dump($result);
    }
}
}</nowiki>
}</nowiki>
<br><br>
<br><br>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
'''Kodexempel för att hämta intagsformulär'''
'''Code example of getting intake forms'''
<br><br>
<br><br>
  <nowiki>$fields = $client->getAdditionalFields($eventId);
  <nowiki>$fields = $client-&gt;getAdditionalFields($eventId);
// returns - array(array(
// returnerar - array(array(
// 'name' => 'b0657bafaec7a2c9800b923f959f8163', - field name
// 'name' =&gt; 'b0657bafaec7a2c9800b923f959f8163', - fältnamn
// 'title' => 'Test digits', - field title
// 'title' =&gt; 'Test digits', - fälttitel
// 'type' => 'digits', - field type
// 'type' =&gt; 'digits', - fälttyp
// 'values' => null, - available values for select field type
// 'values' =&gt; null, - tillgängliga värden för fält av typ select
// 'default' => null, - default value for field
// 'default' =&gt; null, - standardvärde för fält
// 'is_null' => null, - is filed nullable
// 'is_null' =&gt; null, - kan fältet vara tomt
// 'on_main_page' => 1,  
// 'on_main_page' =&gt; 1,  
// 'pos' => 1, - field position
// 'pos' =&gt; 1, - fältets position
// 'value' => null
// 'value' =&gt; null
// )), ...)</nowiki>
// )), ...)</nowiki>
<br><br><br>
<br><br><br>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
= '''SIMPLYBOOK ANPASSADE FUNKTIONER''' =
='''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.
Om ditt företag behöver ytterligare funktioner kan du aktivera några av våra extra anpassade funktioner. En komplett lista över anpassade funktioner med detaljerade beskrivningar finns i administratörsgränssnittet under länken "Anpassade funktioner". När den önskade anpassade funktionen har aktiverats aktiveras motsvarande API-metoder så att du kan använda dem i din kod.
<br><br><br>
<br><br><br>
='''BOOKING FUNCTIONALITY CODEFLOW'''=
= '''KODFLÖDE FÖR BOKNINGSFUNKTIONER''' =
<br><br>
<br><br>
Authorize in Simplybook API using '''loginClient.getToken(companyLogin, apiKey);''' function.
Auktorisera i Simplybook API med funktionen '''loginClient.getToken(companyLogin, apiKey);'''.
</div>




<div lang="en" dir="ltr" class="mw-content-ltr">
Kontrollera om tjänstekategorierna Anpassad funktion är aktiverade med [https://simplybook.me/en/api/doc#isPluginActivated isPluginActivated("event_category")]. Om ja, visa listan över kategorier med [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">
Hämta en lista över tjänster (evenemang) och utförare (enheter) med hjälp av funktionerna [https://simplybook.me/en/api/doc#getEventList getEventList()] och [https://simplybook.me/en/api/doc#getUnitList getUnitList()]. Om arrayen "unit_map" är tillgänglig för en tjänst betyder det att denna tjänst endast kan tillhandahållas av angivna utförare.
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">
Om någon anpassad funktion för val av anställd är aktiverad [https://simplybook.me/en/api/doc#isPluginActivated isPluginActivated("any_unit")] och ingen särskild varaktighet är angiven för paret tjänsteleverantör-tjänsteutförare i matrisen "unit_map", ska användaren kunna välja alternativet Valfri leverantör eller välja leverantör manuellt. Manuell val av tjänsteutförare ska dock inte vara möjligt om [https://simplybook.me/en/api/doc#getCompanyParam getCompanyParam("any_unit__hide_other_units")] är aktiverat.
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">
Använd [https://simplybook.me/en/api/doc#getStartTimeMatrix getStartTimeMatrix ($from som aktuellt datum, $to som aktuellt datum, $eventId, $unitId, $count som valt deltagarantal)] för att få tillgängliga tidsluckor för ett visst datum. '''$unitId''' ska vara null om alternativet Alla anställda är valt.
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">
Om valet "Alla anställda" är aktivt och någon anställd har valts, anropa [https://simplybook.me/en/api/doc#getAvailableUnits getAvailableUnits($eventId, $dateTime, $count)] för att hämta tillgängliga $unitId
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">
Om den anpassade funktionen Intake Forms är aktiverad, anropa [https://simplybook.me/en/api/doc#isPluginActivated isPluginActivated("event_field")] och funktionen [https://simplybook.me/en/api/doc#getAdditionalFields getAdditionalFields($eventId)] för att hämta listan över fält som kunden ska fylla i.
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">
Ring [https://simplybook.me/en/api/doc#book bokning($eventId, $unitId, $date, $time, $clientData, $additional, $count, $batchId)] för att göra en bokning.
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:22, 15 May 2025



Använd vårt utvecklings-API för att skapa ditt eget bokningsgränssnitt. Du kan utforma vilken lösning du vill, från den enklaste widgeten till en multifunktionell applikation med funktioner anpassade efter just ditt företag.

Simplybook Application Programming Interface använder JSON-RPC 2.0-protokollet.

Se ett exempel på ett API-baserat bokningsgränssnitt och läs även källkoden för denna lösning.



AUKTORISERING



Användning av Simplybook API-metoder kräver autentisering. För att auktorisera i Simplybook API måste du skaffa en åtkomstnyckel – access-token. För att få denna access-token måste du anropa JSON-RPC-metoden getToken på https://user-api.simplybook.me/login service och ange din personliga API-nyckel. Du kan kopiera din API-nyckel i admin-gränssnittet: gå till länken "Anpassade funktioner" och välj API-anpassad funktion "Inställningar". Sedan måste du initiera fjärråtkomst till Simplybook API. Din begäran ska innehålla följande rubriker: "X-Company-Login", "X-Token".

Åtkomsttoken kan implementeras antingen från klientsidan eller från din server, vilket är den säkrare lösningen.


Du kan använda javascript JSON-RPC-klientbibliotek och php JSON-RPC-klientbibliotek från våra exempel för att utveckla egna lösningar.

Observera att åtkomsttoken är giltigt i en timme. Detta görs av säkerhetsskäl. Du måste generera det på nytt minst en gång per timme.



KLIENT-API (FÖRETAGETS OFFENTLIGA TJÄNST) AUTORISERING



Auktorisering från klientens kod



Hämta token-nyckeln.

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



Initialisering av JSON-RPC-klient.

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



Auktorisering från serverns kod



Hämta token-nyckeln.

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



Initialisering av JSON-RPC-klient.

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




ANVÄNDARE/ADMIN API (FÖRETAGSADMINISTRATIONSTJÄNST) AUTORISATION



Auktorisering från klientens kod



Hämta token-nyckeln.

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);



Initialisering av JSON-RPC-klient.

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) {}
});



Auktorisering från serverns kod



Hämta token-nyckeln.

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



Initialisering av JSON-RPC-klient.

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




HÄMTA DATA FRÅN SIMPLYBOOK-SERVER



En bokningssida är vanligtvis en sida där kunder väljer den tjänst de behöver, en anställd och en tid för sitt möte. Därefter anger kunden sina kontaktuppgifter och bekräftar bokningen. Mer komplexa lösningar kan innefatta ifyllande av olika intagsformulär, gruppbokningar, bokningar av flera tider och så vidare. Låt oss beskriva arbetsflödet för att skapa den enklaste bokningssidan. Om du sedan behöver lägga till ytterligare funktioner till din sida hittar du en fullständig lista över Simplybook API-metoder här.

Det första du bör visa är listan över tjänster och listan över anställda. Hämta dessa data med metoderna getEventList och getUnitList. Båda returnerar en lista med fullständig information om varje objekt i listan, så du har många möjligheter att visa tjänster och anställda på din sida. För att filtrera anställda använder du egenskapen unit_map i tjänstelistan, som innehåller information om anställda som kan tillhandahålla den valda tjänsten.

Kodexempel för att hämta tjänstelistan

$services = $client->getEventList();
// returnerar array(array(
//     'id' => 1, - tjänst-id
//     'name' => 'Service 1', - tjänstens namn
//     'description' => 'Beskriv din tjänst...', - tjänstens beskrivning
//     'duration' => 60, - tjänstens varaktighet
//     'hide_duration' => 0, - flagga för att dölja varaktighet för kunder,
//     'picture' => null, - filnamn på bild eller null
//     'picture_path' => '/uploads/apidemo/event__picture/small/', - fullständig sökväg till bild,
//     'position' => 1 - tjänstens position
//     'is_active' => 1, - tjänsten är aktiverad
//     'is_public' => 1, - tjänsten får bokas av kunder
// ), ...)



Kodexempel för att hämta en lista över tjänsteleverantörer

$services = $client->getUnitList();
// returnerar array(array(
//    'id' => 1, - leverantörs-id
//    'name' => 'Provider 1', - utförarens namn
//    'phone' => '111111111', - utförarens telefonnummer
//    'description' => 'Beskriv din utförare...', - beskrivning av utföraren
//    'email' => 'test@gmail.com', - utförarens e-postadress,
//    'is_active' => 1, - utföraren är aktiv
//    'is_visible' => 1, - artisten är synlig för kunder,
//    'picture' => null, - filnamn på bild eller null,
//    'picure_path' => '/uploads/apidemo/unit_group__picture/small/', - fullständig sökväg till bild
//    'position' => 1, - artistens position
//    'qty' => 1, antal artister
// ), ...)



Nästa steg för en kund är att välja datum och tid för sin tjänst. Vi har använt en Bootstrap-datumväljare i API-användningsexemplet, men du kan också använda denna eller någon annan kalender. För att ställa in första datum i kalendern använder du metoden getFirstWorkingDay. Den kan ta anställd-id som parameter och returnerar nästa datum när den valda anställda (eller någon anställd i företaget som standard) är tillgänglig för bokning. För att visa tidsluckor inom ett valt datum behöver du metoderna getWorkCalendar och getStartTimeMatrix. Den första metoden ger dig information om arbetsdagens start- och sluttid samt om lediga dagar. Den andra returnerar en lista över tidsluckor som kan bokas för ett visst datum.

Kodexempel för att hämta information om arbetsdagar

$year = 2015;
$month = 3; // mars
$performerId = 1; // Kan vara null 
$workDaysInfo = $client->getWorkCalendar($year, $month, $performerId);				
// returnerar 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),
//     ...
//);



Kodexempel för att hämta starttidsmatris

$dateFrom = '2015-03-03';
$dateTo = '2015-03-04';
$serviceId = 1;
$performerId = 1;
$qty = 1;
$availableTime = $client->getStartTimeMatrix($dateFrom, $dateTo, $serviceId, $performerId, $qty);
// returnerar 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', ....),
//);



En annan användbar metod som du kan behöva är calculateEndTime. Varje tjänst kan ha sin egen varaktighet, och dina anställda kan ha olika arbetsscheman från dag till dag. Med den här metoden kan du visa en kund slutdatum och sluttid för den tjänst han eller hon har bokat på ett korrekt sätt.

Kodexempel för beräkning av bokningens sluttid

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



När en kund klickar på knappen Bekräfta bokning måste du anropa metoden book. Detta är huvudfunktionen som utför alla nödvändiga valideringar och registrerar en ny bokning i Simplybook-systemet. Den tar information om bokningen, kunddata som namn och telefonnummer samt några ytterligare parametrar. Se alla parametrarbeskrivningar för denna metod i listan över API-funktioner. Svaret från bokningsmetoden innehåller en unik kod och andra detaljer om den nya bokningen eller en lista över fel om några problem har uppstått, så att du kan använda denna information för att visa bokningsresultatet för kunden på ett bekvämt och intuitivt sätt.


ANVÄNDNING AV API-HEMLIG NYCKEL



I vissa fall kan bokningsmetoden kräva bekräftelse, t.ex. om du accepterar betalningar från kunder bekräftar du bokningen först efter att betalningen har kommit in. Simplybook API:s bekräftelsemetod tar boknings-id och säker signatur som parametrar (en annan metod som kräver säker signatur är cancelBookng). För att generera en säker signatur måste du använda din hemliga API-nyckel. Se hur det går till i exemplet nedan. Du hittar den hemliga nyckeln i admin-gränssnittet under länken "Inställningar" i API-anpassade funktioner i listan "Anpassade funktioner".

Kodexempel på bokning av tjänst och bekräftelse med hjälp av hemlig API-nyckel

$additionalFields = array(
	'6740d3bce747107ddb9a789cbb78abf3' => 'value1', 
	'b0657bafaec7a2c9800b923f959f8163' => 'value2'
);
$clientData = array(
	'name' => 'Kundnamn',
	'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 '
Bekräfta resultat
';
	 var_dump($result);
 }
}



Kodexempel för att hämta intagsformulär

$fields = $client->getAdditionalFields($eventId);
// returnerar - array(array(
//		'name' => 'b0657bafaec7a2c9800b923f959f8163', - fältnamn
//		'title' => 'Test digits', - fälttitel
//		'type' => 'digits', - fälttyp
//		'values' => null, - tillgängliga värden för fält av typ select
//		'default' => null, - standardvärde för fält
//		'is_null' => null, - kan fältet vara tomt
//		'on_main_page' => 1, 
//		'pos' => 1, - fältets position
//		'value' => null
// )), ...)




SIMPLYBOOK ANPASSADE FUNKTIONER



Om ditt företag behöver ytterligare funktioner kan du aktivera några av våra extra anpassade funktioner. En komplett lista över anpassade funktioner med detaljerade beskrivningar finns i administratörsgränssnittet under länken "Anpassade funktioner". När den önskade anpassade funktionen har aktiverats aktiveras motsvarande API-metoder så att du kan använda dem i din kod.


KODFLÖDE FÖR BOKNINGSFUNKTIONER



Auktorisera i Simplybook API med funktionen loginClient.getToken(companyLogin, apiKey);.


Kontrollera om tjänstekategorierna Anpassad funktion är aktiverade med isPluginActivated("event_category"). Om ja, visa listan över kategorier med getCategoriesList().


Hämta en lista över tjänster (evenemang) och utförare (enheter) med hjälp av funktionerna getEventList() och getUnitList(). Om arrayen "unit_map" är tillgänglig för en tjänst betyder det att denna tjänst endast kan tillhandahållas av angivna utförare.


Om någon anpassad funktion för val av anställd är aktiverad isPluginActivated("any_unit") och ingen särskild varaktighet är angiven för paret tjänsteleverantör-tjänsteutförare i matrisen "unit_map", ska användaren kunna välja alternativet Valfri leverantör eller välja leverantör manuellt. Manuell val av tjänsteutförare ska dock inte vara möjligt om getCompanyParam("any_unit__hide_other_units") är aktiverat.


Använd getStartTimeMatrix ($from som aktuellt datum, $to som aktuellt datum, $eventId, $unitId, $count som valt deltagarantal) för att få tillgängliga tidsluckor för ett visst datum. $unitId ska vara null om alternativet Alla anställda är valt.


Om valet "Alla anställda" är aktivt och någon anställd har valts, anropa getAvailableUnits($eventId, $dateTime, $count) för att hämta tillgängliga $unitId


Om den anpassade funktionen Intake Forms är aktiverad, anropa isPluginActivated("event_field") och funktionen getAdditionalFields($eventId) för att hämta listan över fält som kunden ska fylla i.


Ring bokning($eventId, $unitId, $date, $time, $clientData, $additional, $count, $batchId) för att göra en bokning.