Kimlik Doğrulama
Tüm API istekleri HTTP Basic Authentication standardı üzerinden yetkilendirilmektedir.
Header Format'ı
Authorization: Basic BASE64(apiKey:apiSecret)
Yaygın HTTP istemcilerinde -u veya auth parametreleri kullanıldığında base64 dönüşümü otomatik olarak gerçekleştirilmektedir.
Anahtar ve Gizli Değerin Edinilmesi
API anahtarları doğrudan tüketici tarafından oluşturulamaz. Anahtar talebi, Milagron yönetim ekibine iletilir ve ekip tarafından üretilerek paylaşılır.
- Milagron yönetim ekibi ile iletişime geçilir ve API erişim talebi iletilir.
- Talep onaylandıktan sonra üretilen API Key ve API Secret değerleri paylaşılır.
- Üretilen secret değeri yalnızca bir defa paylaşılır; güvenli bir şekilde saklanması zorunludur.
Kullanım Örnekleri
Aşağıda, farklı programlama dilleri ile kimlik doğrulamalı bir API çağrısı örneği yer almaktadır. API_KEY ve API_SECRET ifadeleri, kendi değerlerinizle değiştirilmelidir.
curl -u "API_KEY:API_SECRET" \
-X POST https://api.milagron.com/integration/inventory/sellers/123/products/stock \
-H "Content-Type: application/json" \
-d '{"barcode":"ABC123"}'<?php
$ch = curl_init('https://api.milagron.com/integration/inventory/sellers/123/products/stock');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_USERPWD => 'API_KEY:API_SECRET',
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode(['barcode' => 'ABC123']),
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
$data = json_decode($response, true);const auth = Buffer.from('API_KEY:API_SECRET').toString('base64');
const res = await fetch('https://api.milagron.com/integration/inventory/sellers/123/products/stock', {
method: 'POST',
headers: {
'Authorization': `Basic ${auth}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({ barcode: 'ABC123' })
});
const data = await res.json();import requests
response = requests.post(
'https://api.milagron.com/integration/inventory/sellers/123/products/stock',
auth=('API_KEY', 'API_SECRET'),
json={'barcode': 'ABC123'}
)
response.raise_for_status()
data = response.json()package main
import (
"bytes"
"encoding/json"
"net/http"
)
func main() {
payload, _ := json.Marshal(map[string]string{"barcode": "ABC123"})
req, _ := http.NewRequest("POST",
"https://api.milagron.com/integration/inventory/sellers/123/products/stock",
bytes.NewBuffer(payload))
req.SetBasicAuth("API_KEY", "API_SECRET")
req.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
}import java.net.URI;
import java.net.http.*;
import java.util.Base64;
HttpClient client = HttpClient.newHttpClient();
String auth = Base64.getEncoder()
.encodeToString("API_KEY:API_SECRET".getBytes());
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.milagron.com/integration/inventory/sellers/123/products/stock"))
.header("Authorization", "Basic " + auth)
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString("{\"barcode\":\"ABC123\"}"))
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());require 'net/http'
require 'uri'
require 'json'
uri = URI('https://api.milagron.com/integration/inventory/sellers/123/products/stock')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri.path)
request.basic_auth('API_KEY', 'API_SECRET')
request['Content-Type'] = 'application/json'
request.body = { barcode: 'ABC123' }.to_json
response = http.request(request)
data = JSON.parse(response.body)using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
var client = new HttpClient();
var auth = Convert.ToBase64String(
Encoding.UTF8.GetBytes("API_KEY:API_SECRET"));
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Basic", auth);
var content = new StringContent(
"{\"barcode\":\"ABC123\"}",
Encoding.UTF8,
"application/json");
var response = await client.PostAsync(
"https://api.milagron.com/integration/inventory/sellers/123/products/stock",
content);
var data = await response.Content.ReadAsStringAsync();Yetkiler (Scope'lar)
Her API anahtarı, yalnızca tanımlanmış yetkiler dahilinde işlem yapabilir. Gerekli yetki tanımlanmadan çağrılan endpoint'ler 403 Forbidden hatası ile yanıt verir.
| Scope | Erişim |
|---|---|
stock:read | Stok bilgilerinin sorgulanması |
stock:write | Stok ve fiyat güncellemesi |
product:read | Ürün listesi ve katalog bilgilerinin (kategori, ürün tipi, özellik, marka) görüntülenmesi |
product:write | Ürün oluşturma ve ürün bilgilerinin güncellenmesi |
order:read | Sipariş listesinin görüntülenmesi |
order:write | Sipariş güncelleme işlemleri (kargoya teslim vb.) |
price:read | Fiyat bilgilerinin görüntülenmesi |
price:write | Fiyat bilgilerinin güncellenmesi |
shipment:read | Kargo bilgilerinin görüntülenmesi |
shipment:write | Kargo bilgilerinin güncellenmesi |
Güvenlik Önerileri
- Secret değeri istemci tarafında (frontend, mobil uygulama) yer almamalıdır.
- Sürüm kontrol sistemlerine (Git vb.) commit edilmemelidir.
- Log kayıtlarında görünmediği düzenli olarak doğrulanmalıdır.
- Sunucu tarafında, environment variable veya yapılandırma yönetim sistemleri içerisinde saklanmalıdır.
IP Whitelist
Her API anahtarı için isteğe bağlı olarak IP whitelist tanımlanabilir. Tanımlı olduğu durumlarda, yalnızca belirtilen IP adreslerinden gelen istekler kabul edilir. Listenin boş bırakılması, tüm IP adreslerinden erişime izin verildiği anlamına gelir.