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¶
- MuditaKurye restoran paneline giriş yapın
- Ayarlar → Entegrasyon → API Anahtarı bölümüne gidin
- "Yeni API Key Oluştur" butonuna tıklayın
- API Key'i güvenli bir yere kaydedin (tekrar gösterilmeyecek)
Kullanım¶
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¶
- MuditaKurye restoran paneline giriş yapın
- Ayarlar → Entegrasyon → Basic Auth bölümüne gidin
- Kullanıcı adı ve şifre oluşturun
Kullanım¶
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ı¶
Webhook Signature Doğrulama¶
Gelen webhook'ların MuditaKurye'den geldiğini doğrulamak için HMAC signature kullanılabilir.
Webhook Secret Oluşturma¶
- MuditaKurye restoran paneline giriş yapın
- Ayarlar → Entegrasyon → Webhook Secret bölümüne gidin
- 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.