Entegrasyon & API Genel Bakış
Randevu Ajandam platformu ile harici hekim ve klinik web siteleri arasında tam entegrasyon sağlamak için hazırlanan teknik kılavuz.
Giriş
Randevu Ajandam API, premium paket sahibi hekimlerin (doktoradi.com) ve kliniklerin (klinikadi.com) kendi özel web siteleri ile ana platform arasındaki çift yönlü veri akışını yönetir.
API altyapısı, güvenlik, yüksek performans ve izolasyon sağlamak amacıyla ana platformdan bağımsız çalışan bir Laravel API servisi olarak tasarlanmıştır. Bu servis, ana veritabanı ile doğrudan senkronize olarak çalışır.
Güvenlik & Kimlik Doğrulama
API isteklerinin güvenliği API Key + Secret Key (HMAC Signature) yöntemiyle sağlanmaktadır. Ağ üzerinden Secret Key asla ham biçimde aktarılmaz. Her isteğin sahtecilik ve manipülasyona karşı korunması için her istek özel olarak imzalanır.
X-Timestamp bilgisi sunucu saati ile +/- 5 dakikadan daha fazla fark gösteriyorsa, istek güvenlik gerekçesiyle reddedilir.
İstek Başlıkları (HTTP Headers)
| Başlık | Tip | Zorunlu | Açıklama |
|---|---|---|---|
| X-Api-Key | string | Evet | Size tahsis edilen benzersiz API Anahtarınız. |
| X-Timestamp | integer | Evet | İsteğin oluşturulduğu Unix Zaman Damgası (saniye cinsinden). |
| X-Signature | string | Evet | İstek verileriyle üretilmiş HMAC-SHA256 imzası. |
İmza Hesaplama Metodu
İmzalanacak metin (payload) şu verilerin ardışık olarak birleştirilmesiyle elde edilir:
Bu payload, size verilen Secret Key kullanılarak HMAC-SHA256 algoritmasından geçirilir. Çıkan hex değeri imzanızdır.
<?php
$apiKey = "api_key_demo_123";
$secretKey = "secret_key_demo_456";
$timestamp = time();
$method = "POST";
$path = "/api/v1/appointments";
$body = json_encode([
"service_id" => 1,
"date" => "2026-07-15",
"slot" => "10:30"
]);
// 1. Payload oluşturma
$payload = $timestamp . $method . $path . $body;
// 2. HMAC-SHA256 ile imzalama
$signature = hash_hmac("sha256", $payload, $secretKey);
// 3. İstek Gönderme (cURL Örneği)
$ch = curl_init("https://api.randevuajandam.com/api/v1/appointments");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Content-Type: application/json",
"X-Api-Key: " . $apiKey,
"X-Timestamp: " . $timestamp,
"X-Signature: " . $signature
]);
$response = curl_exec($ch);
curl_close($ch);
Bağlam Algılama (Context Detection)
API Anahtarları veritabanında bir hekim (doktor_id) veya klinik (klinik_id) ile ilişkilendirilir. İstek atıldığında API hangi kimlik üzerinden geldiğini otomatik olarak algılar:
- Bireysel Hekim Bağlamı: API sadece o hekime ait verileri (bloglar, hizmetler, randevular) döndürür ve yönetir. Klinik rotaları bu bağlamda kapalıdır (
403 Forbidden). - Klinik Bağlamı: API klinik düzeyinde çalışır. Klinikte yer alan tüm doktorların verilerine, randevularına, hakedişlerine ve klinik ayarları ile personel listelerine erişim sağlanır.
Standart HTTP Hata Kodları
| Durum Kodu | Anlamı | Açıklama |
|---|---|---|
| 200 OK | Başarılı | İşlem başarıyla tamamlandı. |
| 201 Created | Oluşturuldu | Yeni kaynak başarıyla oluşturuldu (örn. randevu eklendi). |
| 400 Bad Request | Geçersiz İstek | Gönderilen parametreler eksik ya da hatalı. |
| 401 Unauthorized | Yetkisiz Erişim | API Key geçersiz, imza doğrulaması başarısız veya istek zaman aşımına uğramış. |
| 403 Forbidden | Erişim Engellendi | İlgili paketin yetkisi bu işlem için yetersiz veya yanlış bağlamdasınız. |
| 404 Not Found | Bulunamadı | İstenen kaynak mevcut değil. |
| 422 Unprocessable Entity | Doğrulama Hatası | Form / girdi doğrulama kuralları ihlal edildi. Hata detayları JSON gövdesinde döner. |
| 500 Server Error | Sunucu Hatası | Sunucuda beklenmeyen bir teknik arıza oluştu. |