Ana içeriğe geç

Kimlik Doğrulama

MuditaKurye API'sine erişim için iki kimlik doğrulama yöntemi desteklenmektedir.

API Key (Önerilen)

API Key, basit ve güvenli bir kimlik doğrulama yöntemidir. Her istekte X-API-Key header'ı ile gönderilir.

API Key Oluşturma

  1. MuditaKurye restoran paneline giriş yapın
  2. AyarlarEntegrasyonAPI Anahtarı bölümüne gidin
  3. "Yeni API Key Oluştur" butonuna tıklayın
  4. API Key'i güvenli bir yere kaydedin (tekrar gösterilmeyecek)

Kullanım

POST /webhook/third-party/order HTTP/1.1
Host: api.muditakurye.com.tr
Content-Type: application/json
X-API-Key: yk_abc123def456...

{
  "orderId": "order_12345",
  "restaurantId": "rest_abc1234567890",
  ...
}
curl -X POST https://api.muditakurye.com.tr/webhook/third-party/order \
  -H "X-API-Key: yk_abc123def456..." \
  -H "Content-Type: application/json" \
  -d '{"orderId": "order_12345", ...}'
const axios = require('axios');

const API_KEY = process.env.MUDITAKURYE_API_KEY;

axios.post('https://api.muditakurye.com.tr/webhook/third-party/order', {
  orderId: 'order_12345',
  restaurantId: 'rest_abc1234567890',
  // ...
}, {
  headers: {
    'X-API-Key': API_KEY,
    'Content-Type': 'application/json'
  }
});
import requests
import os

API_KEY = os.getenv('MUDITAKURYE_API_KEY')

response = requests.post(
    'https://api.muditakurye.com.tr/webhook/third-party/order',
    json={
        'orderId': 'order_12345',
        'restaurantId': 'rest_abc1234567890',
        # ...
    },
    headers={
        'X-API-Key': API_KEY,
        'Content-Type': 'application/json'
    }
)

Güvenlik En İyi Uygulamaları

API Key Güvenliği

  • API Key'i asla kaynak kodunuzda saklamayın
  • Ortam değişkenleri (environment variables) kullanın
  • Secret manager kullanın (AWS Secrets Manager, Azure Key Vault, vb.)
  • API Key'leri düzenli olarak rotate edin (örneğin 90 günde bir)

Public Repository'lerde

GitHub, GitLab gibi public repository'lerde API Key commit etmeyin. .gitignore dosyanıza .env ekleyin.

# .env dosyası örneği
MUDITAKURYE_API_KEY=yk_abc123def456...
MUDITAKURYE_RESTAURANT_ID=rest_abc1234567890

Basic Authentication

API Key kullanmak mümkün değilse, HTTP Basic Authentication da desteklenmektedir.

Kimlik Bilgileri Oluşturma

  1. MuditaKurye restoran paneline giriş yapın
  2. AyarlarEntegrasyonBasic Auth bölümüne gidin
  3. Kullanıcı adı ve şifre oluşturun

Kullanım

POST /webhook/third-party/order HTTP/1.1
Host: api.muditakurye.com.tr
Content-Type: application/json
Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=

{
  "orderId": "order_12345",
  ...
}
curl -X POST https://api.muditakurye.com.tr/webhook/third-party/order \
  -u username:password \
  -H "Content-Type: application/json" \
  -d '{"orderId": "order_12345", ...}'
const axios = require('axios');

const USERNAME = process.env.MUDITAKURYE_USERNAME;
const PASSWORD = process.env.MUDITAKURYE_PASSWORD;

const auth = Buffer.from(`${USERNAME}:${PASSWORD}`).toString('base64');

axios.post('https://api.muditakurye.com.tr/webhook/third-party/order', {
  orderId: 'order_12345',
  // ...
}, {
  headers: {
    'Authorization': `Basic ${auth}`,
    'Content-Type': 'application/json'
  }
});
import requests
from requests.auth import HTTPBasicAuth
import os

USERNAME = os.getenv('MUDITAKURYE_USERNAME')
PASSWORD = os.getenv('MUDITAKURYE_PASSWORD')

response = requests.post(
    'https://api.muditakurye.com.tr/webhook/third-party/order',
    json={'orderId': 'order_12345'},
    auth=HTTPBasicAuth(USERNAME, PASSWORD)
)

Kimlik Doğrulama Hataları

HTTP Status Hata Açıklama
401 Unauthorized Authentication failed API Key veya Basic Auth kimlik bilgileri geçersiz
403 Forbidden Integration disabled Entegrasyon bu restoran için devre dışı
403 Forbidden API key expired API Key süresi dolmuş, yeni key oluşturun
429 Too Many Requests Rate limit exceeded Rate limit aşıldı, 1 dakika sonra tekrar deneyin

Örnek Hata Yanıtı

{
  "error": "Authentication failed",
  "message": "Invalid API key",
  "code": "AUTH_001"
}

Webhook Signature Doğrulama

Gelen webhook'ların MuditaKurye'den geldiğini doğrulamak için HMAC signature kullanılabilir.

Webhook Secret Oluşturma

  1. MuditaKurye restoran paneline giriş yapın
  2. AyarlarEntegrasyonWebhook Secret bölümüne gidin
  3. Secret oluşturun ve kaydedin

Signature Doğrulama

Gelen webhook'larda X-MuditaKurye-Signature header'ı bulunur:

const crypto = require('crypto');

function verifyWebhookSignature(payload, signature, secret) {
  const hmac = crypto.createHmac('sha256', secret);
  const calculatedSignature = hmac.update(JSON.stringify(payload)).digest('hex');
  return crypto.timingSafeEqual(
    Buffer.from(signature),
    Buffer.from(calculatedSignature)
  );
}

// Express middleware örneği
app.post('/webhook/muditakurye', (req, res) => {
  const signature = req.headers['x-muditakurye-signature'];
  const secret = process.env.WEBHOOK_SECRET;

  if (!verifyWebhookSignature(req.body, signature, secret)) {
    return res.status(401).json({ error: 'Invalid signature' });
  }

  // Webhook'u işle...
  res.status(200).json({ received: true });
});
import hmac
import hashlib
import json

def verify_webhook_signature(payload: dict, signature: str, secret: str) -> bool:
    payload_str = json.dumps(payload, separators=(',', ':'))
    calculated_signature = hmac.new(
        secret.encode(),
        payload_str.encode(),
        hashlib.sha256
    ).hexdigest()
    return hmac.compare_digest(signature, calculated_signature)

# Flask örneği
@app.route('/webhook/muditakurye', methods=['POST'])
def webhook():
    signature = request.headers.get('X-MuditaKurye-Signature')
    secret = os.getenv('WEBHOOK_SECRET')

    if not verify_webhook_signature(request.json, signature, secret):
        return jsonify({'error': 'Invalid signature'}), 401

    # Webhook'u işle...
    return jsonify({'received': True})

Signature Doğrulama

Webhook signature doğrulama opsiyoneldir ancak production ortamında şiddetle önerilir.

Sonraki Adım

Kimlik doğrulama ayarlarınız hazır! Şimdi Sipariş Oluşturma sayfasına geçin.