Guides
Trin for trin-vejledninger til opsætning og brug af systemet.
Vejledninger - TOKEN - Login (frontend)
TOKEN - Login (frontend)
Hvis du allerede har et login på din side, fx i form af et intranet, kan du med TOKEN-Login undgå, at kunderne/brugerne skal logge ind to gange. TOKEN-Login findes og aktiveres under avancerede indstillinger. Her finder I også jeres to token-nøgler og listen over godkendte IP-adresser, som kaldene må komme fra. Aftalen og onlinebooking skal være aktive. Funktionen fungerer ved, at jeres server kalder systemet via en sikker forbindelse (https://) fra en godkendt IP med oplysninger om den bruger, I gerne vil logge ind. I modtager herefter et token, som sættes ind i indsætningskoden. Tokenet logger den pågældende bruger ind og kan bruges flere gange, så længe levetiden varer. Alt efter jeres ønsker kan I justere følgende under avancerede indstillinger:
Nedenfor er et eksempel på brug af TOKEN-Login i PHP med POST og cURL. POST anbefales, fordi oplysningerne ikke står i adressen (og dermed ikke i serverlogs), og fordi det kan klare længere tekststrenge. Kaldet kan teknisk også laves som GET, men det frarådes.
OBS: Nedenstående kode tager udgangspunkt i, at jeres aftale er placeret på serveren https://login.geckobooking.dk.
Udskift derfor serveradressen, hvis I er placeret på en anden server. |
<?php
declare(strict_types=1);
const GECKO_SERVER = 'https://login.geckobooking.dk';
const GECKO_AGREEMENT_NO = '[INSERT_AGREEMENT_NUMBER_HERE]';
const GECKO_IC_CODE = '[INSERT_ICCODE_HERE]';
/**
* Asks GECKO for a login token for the customer.
* Returns an empty string if the login failed.
*/
function geckoGetLoginToken(array $customerFields, array $extraBookingFields = []): string
{
// The token keys are secret, like a password. Keep them on the server (for example in
// environment variables) and never write them to HTML, JavaScript or URLs.
$tokenKey1 = getenv('GECKO_TOKEN_KEY_1');
$tokenKey2 = getenv('GECKO_TOKEN_KEY_2');
if ($tokenKey1 === false || $tokenKey2 === false) {
error_log('GECKO token login: the token keys are not set');
return '';
}
$fields = [
'do' => 'tokenLogin',
'tk' => $tokenKey1,
'tk2' => $tokenKey2,
'id' => GECKO_AGREEMENT_NO,
] + $customerFields;
if ($extraBookingFields !== []) {
// Keyed by the Id of the extra booking field. The values must be UTF-8 encoded.
$fields['bef'] = json_encode($extraBookingFields, JSON_THROW_ON_ERROR);
}
$ch = curl_init(GECKO_SERVER . '/site/token.php');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query($fields),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 10,
]);
$result = curl_exec($ch);
if ($result === false) {
error_log('GECKO token login failed: ' . curl_error($ch));
return '';
}
$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
if ($status !== 200) {
error_log('GECKO token login failed: HTTP status ' . $status);
return '';
}
// GECKO answers "false" if the login is refused. A token only contains letters and digits.
$token = trim($result);
if ($token === 'false' || !preg_match('/^[A-Za-z0-9]+$/', $token)) {
error_log('GECKO token login was refused or gave an unexpected answer');
return '';
}
return $token;
}
// Replace with your own check of whether the user is logged in
$myUser = $_SESSION['user'] ?? null;
$token = '';
if ($myUser !== null) {
// Optional second argument: values for "Extra booking fields", an array keyed by the Id of the field
$token = geckoGetLoginToken([
'CustomerNumber' => $myUser['id'],
'CustomerName' => $myUser['name'],
'CustomerAddress' => $myUser['address'],
'CustomerPostalCode' => $myUser['postalCode'],
'CustomerCity' => $myUser['city'],
'CustomerEmail' => $myUser['email'],
'CustomerTelephone' => $myUser['telephone'],
'CustomerMobile' => $myUser['mobile'],
'CustomerSSN' => $myUser['ssn'],
]);
}
$tokenParam = $token !== '' ? '&token=' . urlencode($token) : '';
echo '<script src="https://login.geckobooking.dk/site/iframe.js?icCode=' . GECKO_IC_CODE . $tokenParam . '"></script>';
![]() |
Vigtigt! Token-nøglerne er hemmelige, ligesom en adgangskode. Gem dem kun på serveren, fx som miljøvariabler eller i en konfigurationsfil uden for web-roden, og skriv dem aldrig i HTML, JavaScript eller adresser. Kaldet til systemet skal altid ske fra jeres server og aldrig fra brugerens browser. Det eneste, der sendes til browseren, er tokenet. Er en nøgle kommet ud, kan I oprette en ny under avancerede indstillinger. Så virker eksisterende tokens ikke længere, og I skal opdatere nøglen på jeres server. |
Udover felterne i eksemplet kan I sende følgende, hvis det er relevant:
|
