Kimlik Doğrulama

Tüm API istekleri HTTP Basic Auth ile imzalanır.

Başlık Biçimi

Authorization: Basic BASE64(apiKey:apiSecret)

Çoğu HTTP istemcisinde -u veya auth parametresini kullanırsanız base64 dönüşümü kendiliğinden yapılır.

Anahtarı Nasıl Alırsınız

API anahtarlarını kendiniz oluşturamazsınız. Anahtarı Milagron ekibi üretir ve sizinle paylaşır.

  1. Milagron ekibine API erişim talebinizi iletirsiniz.
  2. Talep onaylandıktan sonra API Key ve API Secret değerleriniz paylaşılır.
  3. Secret değeri yalnızca bir kez paylaşılır. Güvenli bir yerde saklayın.
Secret değerini kaybederseniz Yeni bir secret üretmemiz için bize ulaşın. Yeni secret üretildiği anda eskisi geçersiz olur.

Kullanım Örnekleri

Aşağıda farklı dillerde kimlik doğrulamalı bir API çağrısı örneği var. API_KEY ve API_SECRET yerine kendi değerlerinizi yazın.

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 uçlar 403 Forbidden hatası ile yanıt verir.

ScopeErişim
stock:readStok bilgilerinin sorgulanması
stock:writeStok ve fiyat güncellemesi
product:readÜrün listesi ve katalog bilgilerinin (kategori, özellik, marka) görüntülenmesi
product:writeÜrün oluşturma ve ürün bilgilerinin güncellenmesi
order:readSipariş listesinin görüntülenmesi
order:writeSipariş güncelleme işlemleri (kargoya teslim vb.)
price:readFiyat bilgilerinin görüntülenmesi
price:writeFiyat bilgilerinin güncellenmesi
shipment:readKargo bilgilerinin görüntülenmesi
shipment:writeKargo bilgilerinin güncellenmesi

Güvenlik Önerileri

Secret Değerinin Korunması
  • 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.