Microsoft Dynamics 365 Business Central, özellikle Microsoft ekosistemine yatırım yapmış orta ölçekli şirketler için tercih edilen ERP’dir. WooCommerce ile entegre etmek, D365’in API manzarasını anlamayı ve ölçeğiniz ile karmaşıklığınız için doğru entegrasyon kalıbını seçmeyi gerektirir.
D365 Business Central API Seçenekleri
OData/REST API’leri (Standart)
Business Central, OData v4 endpoint’leri aracılığıyla standart varlıkları sunar:
GET https://{tenant}.api.businesscentral.dynamics.com/v2.0/{environment}/api/v2.0/items
GET https://{tenant}.api.businesscentral.dynamics.com/v2.0/{environment}/api/v2.0/salesOrders
GET https://{tenant}.api.businesscentral.dynamics.com/v2.0/{environment}/api/v2.0/customers
Kimlik Doğrulama: Azure AD üzerinden OAuth 2.0. Azure Portal’da bir uygulama kaydedin, Financials.ReadWrite.All izinlerini verin.
Özel API’ler (AL Uzantıları)
Karmaşık entegrasyonlar için, AL dili kullanarak Business Central’da özel API endpoint’leri oluşturun:
page 50100 "WooCommerce Items API"
{
PageType = API;
APIPublisher = 'wpclan';
APIGroup = 'woocommerce';
APIVersion = 'v1.0';
EntityName = 'item';
EntitySetName = 'items';
SourceTable = Item;
// ... alan tanımları
}
Dataverse (Gelişmiş)
Değişiklik takibi ile çift yönlü senkronizasyon için, Business Central verileri Dataverse’e (eski adıyla Common Data Service) senkronize edebilir. Bu, webhook benzeri değişiklik bildirimleri sağlar.
Entegrasyon Kalıpları
Kalıp 1: Power Automate (Düşük Kodlu)
En uygun: Basit entegrasyonlar, günde < 100 sipariş
Microsoft Power Automate, HTTP bağlayıcıları aracılığıyla D365’i WooCommerce’e bağlayabilir:
Tetikleyici: WooCommerce siparişi oluşturulduğunda (HTTP webhook)
→ JSON Ayrıştır (sipariş verisi)
→ D365: Müşteri bul veya oluştur
→ D365: Satış siparişi oluştur
→ D365: Satır öğeleri ekle
→ WooCommerce: Sipariş meta'sını D365 referansıyla güncelle
Artıları: Kod yok, görsel iş akışı, yerleşik hata işleme
Eksileri: API çağrı sınırları (Performance planı gerekli), daha yavaş yürütme, sınırlı dönüşüm mantığı
Kalıp 2: Azure Functions + Service Bus (Bulut-Yerel)
En uygun: Orta-yüksek hacim, Microsoft-yığın ekipleri
WooCommerce Webhook → Azure Function → Service Bus Queue → Azure Function → D365 API
D365 Change Feed → Azure Function → Service Bus Queue → Azure Function → WooCommerce API
Azure Functions, API çağrılarını ve veri dönüşümünü işler. Service Bus, dead-letter desteği ile güvenilir mesaj kuyruğu sağlar.
Kalıp 3: Özel Node.js Middleware (Tam Kontrol)
En uygun: Karmaşık gereksinimler, özel iş mantığı
// D365 Business Central istemcisi
class D365Client {
constructor(tenantId, clientId, clientSecret, environment) {
this.baseUrl = https://api.businesscentral.dynamics.com/v2.0/${environment}/api/v2.0;
this.tokenUrl = https://login.microsoftonline.com/${tenantId}/oauth2/v2.0/token;
this.clientId = clientId;
this.clientSecret = clientSecret;
}
async getToken() {
const response = await fetch(this.tokenUrl, {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body: new URLSearchParams({
grant_type: 'client_credentials',
client_id: this.clientId,
client_secret: this.clientSecret,
scope: 'https://api.businesscentral.dynamics.com/.default'
})
});
const data = await response.json();
return data.access_token;
}
async getItems() {
const token = await this.getToken();
const response = await fetch(${this.baseUrl}/items, {
headers: { 'Authorization': Bearer ${token} }
});
return response.json();
}
async createSalesOrder(orderData) {
const token = await this.getToken();
return fetch(${this.baseUrl}/salesOrders, {
method: 'POST',
headers: {
'Authorization': Bearer ${token},
'Content-Type': 'application/json'
},
body: JSON.stringify(orderData)
});
}
}
Veri Eşleme: D365 → WooCommerce
Öğeler’den Ürünlere
| D365 Alanı | WooCommerce | Notlar |
|---|---|---|
| number | sku | Eşleme için birincil anahtar |
| displayName | name | |
| unitPrice | regular_price | Fiyat listesinden |
| inventory | stock_quantity | Gerçek zamanlı kritik |
| itemCategoryCode | categories | Kodları WC kategori ID’lerine eşle |
| blocked | status | blocked=true → draft |
| gtin | meta: _gtin | Schema markup için |
Satış Siparişleri
| WooCommerce | D365 Satış Siparişi | Notlar |
|---|---|---|
| order.id | externalDocumentNumber | Çapraz referans |
| billing.email | customerNumber | E-posta ile eşleştir |
| line_items[].sku | salesOrderLines[].itemId | Öğe numarasıyla eşleştir |
| line_items[].quantity | salesOrderLines[].quantity | |
| line_items[].total | salesOrderLines[].unitPrice | İndirimler için yeniden hesapla |
| shipping_total | — | Ayrı satır veya navlun ücreti olarak ekle |
D365’in Sayfalandırmasını İşleme
Business Central API’leri maksimum 20.000 kayıt döner ve sayfalandırma için @odata.nextLink kullanır:
async function getAllItems(client) {
let items = [];
let url = ${client.baseUrl}/items?$top=1000;
while (url) {
const response = await client.authenticatedFetch(url);
const data = await response.json();
items = items.concat(data.value);
url = data['@odata.nextLink'] || null;
}
return items;
}
Envanter Senkronizasyon Stratejisi
D365 Business Central, envanteri lokasyon (depo) seviyesinde takip eder. Senkronizasyonunuz şunları karar vermelidir:
- Tek bir WooCommerce stok sayısı için tüm lokasyonları toplamak?
- Belirli lokasyonları senkronize etmek (örn., sadece e-ticaret deposu)?
- Tampon stok rezerve etmek (aşırı satışı önlemek için gerçek stokun %90’ını göstermek)?
async function syncInventory() {
const d365Items = await d365.getItems();
const updates = d365Items.value
.filter(item => !item.blocked)
.map(item => ({
sku: item.number,
stock_quantity: Math.floor(item.inventory * 0.95), // %5 tampon
stock_status: item.inventory > 0 ? 'instock' : 'outofstock'
}));
// WooCommerce toplu güncelleme
for (let i = 0; i < updates.length; i += 100) {
await wooApi.post('products/batch', {
update: updates.slice(i, i + 100).map(u => ({
sku: u.sku, // ürün ID'si almak için SKU araması gerektirir
stock_quantity: u.stock_quantity,
stock_status: u.stock_status
}))
});
}
}
Yaygın D365 Entegrasyon Tuzakları
- OAuth token süre dolumu: Token’ler 1 saat sonra süresi dolar. API çağrılarından önce her zaman yenileyin.
- Hız sınırlaması: Business Central, tenant başına dakikada 600 çağrı sınırına sahiptir. İsteklerinizi toplu halde gönderin.
- Numara dizileri: D365 belge numaralarını otomatik oluşturur. Bunları manuel olarak ayarlamaya çalışmayın.
- Boyutlar: D365’in finansal boyutları (maliyet merkezi, departman) WooCommerce eşdeğeri yoktur. Bunları nasıl işleyeceğinizi planlayın.
- Çoklu para birimi: D365 çoklu para birimini doğal olarak işler. WooCommerce çoklu para birimi için bir eklentiye ihtiyaç duyar. Döviz kurlarını dikkatli eşleyin.
Sonuç
D365 Business Central + WooCommerce güçlü bir kombinasyondur. Power Automate basit, düşük hacimli entegrasyonlar için çalışır. Azure Functions güvenilirliğe ihtiyaç duyan Microsoft-yığın ekipleri için uygundur. Özel middleware karmaşık senaryolar için size tam kontrol verir. Kalıp ne olursa olsun, temel şeyler aynıdır: verilerinizi dikkatli eşleyin, envanteri en yüksek öncelikli senkronizasyon olarak işleyin ve ilk günden itibaren sağlam hata işleme oluşturun.
Last modified: Mart 4, 2026
United States / English
Slovensko / Slovenčina
Canada / Français
Türkiye / Türkçe