Servis Seçimi
YS Mahalle entegrasyonunda Market ve Su kategorileri altında farklı depo tanımlamaları
ve webhook tanımlamaları mevcuttur. Aynı depo için iki adet depo tanımlaması olduğundan
Yemeksepeti servislerine çıkılırken bu depo numaralarına göre auth bilgileri değişmek
zorundadır. Bu sebeple hangi storeId'nin hangi servise (market/su) ait olduğunu tespit
edebilmek için Yemeksepeti_Service_Map (kısaca YSM) tablosu oluşturulmuştur.
YS'deki storeId ile YS'deki servis eşleştirilmiştir ve bu kayıtlara göre YS
API'lerine istek çıkılmaktadır. Bu tabloya girilen bilgiler Redis'te de saklanmaktadır.
Redis'te yemeksepetiServiceMap hash'inin bir hata durumunda kontrol edilmesi gerekir.
Yeni bir depo tanımlanırken mutlaka YSM tablosuna servis bilgisi girilmelidir.
Aksi halde istek yanlış API'e atılacağından 403 hatası alınacaktır.
Kod tarafında hangi servise çıkılacağının tespiti axios adapter'ine bağlı request
interceptor'inin içinde isteği atarken kullandığımız extraInfo objesindeki orderId
veya vendorId'deki değere göre belirlenip Authorization header'i manipüle edilmektedir.
Sipariş üzerinde işlem yapılması gerekiyorsa extraInfo objesinin içinde orderId,
ürün üzerinde işlem yapılması gerekiyorsa vendorId değerinin verilmesi gerekmektedir.
Örnek olarak order_id parametresine göre sipariş gövdesini çektiğimiz servisin kodu şu şekildedir:
async getOrderByOrderId(orderId) {
return this.axiosInstance({
url: `${this.ORDER_BASEURL}/v1/orders/${orderId}`,
method: 'GET',
metadata: new AxiosIntegrationMetadata({
useLogging: false,
vendor: integrationConstants.vendors.YEMEKSEPETI,
operationName: 'getOrderByOrderId',
reason: 'getOrderByOrderId',
extraInfo: { orderId } // This is the way
})
});
}
Burada extraInfo objesindeki orderId'e göre Authorization değeri değiştirilmektedir.