FedEx ile Entegrasyon Örneği
Bu eğitimde FedEx entegrasyonunu nasıl gerçekleştireceğimizi göstereceğiz.
1. Ön Hazırlık
1.1. FedEx'te bir hesap oluşturun
Developer portalında bir hesap oluşturun.
1.2. Projeler oluşturun ve token alın
Projelerim bölümünde 2 proje oluşturun ve client id ve client secret'ı kaydedin.
İlk proje teslimatları yönetmek için.
İkinci proje teslimatları takip etmek için.
1.3. Teslimat durumları oluşturun
Sipariş deposu durumları sekmesinde durumları oluşturun:
- order_delivery
- order_delivery_started
- ready_for_pickup
1.4. Durumları takip etmek için bir olay oluşturun
Olaylar modülünde order_delivery
sipariş durumunu takip etmek için bir olay oluşturun.
1.5. Teslimat için bir koleksiyon oluşturun
Entegrasyon Koleksiyonları modülünde aşağıdaki niteliklerle teslimat için bir koleksiyon oluşturun:
- name (
string
) - address (
string
) - phone_number (
string
) - city (
string
) - state_code (
string
) - postal_code (
string
) - country_code (
string
) - tracking_number (
string
) - transaction_id (
string
) - ship_datestamp (
string
) - delivery_datestamp (
string
)
1.6. Test siparişi oluşturun
Bu sipariş için bir sipariş ve koleksiyon kaydı oluşturun.
2. Gönderi Oluşturma
2.1. Teslimat olayını takip etme
- events düğümünü çalışma alanına sürükleyin.
- Düğümün adını girin.
- "Set" alanındaki değeri "orderEvent" olarak değiştirin.
- Olay "msg.orderEvent" nesnesinde saklanacak ve diğer düğümlerde kullanılabilecektir.
- Oluşturduğunuz "order delivery" olayını listeden seçin ve "submit" butonuna tıklayın.
2.2. Token alma
- function düğümünü çalışma alanına sürükleyin ve önceki adımda oluşturduğunuz düğümle bağlayın.
- "Function" alanına örnek kodu yapıştırın.
YOUR_CLIENT_ID
veOUR_CLIENT_SECRET
değerlerini kendi değerlerinizle değiştirin.
msg.payload = {
'grant_type': 'client_credentials',
'client_id': 'YOUR_CLIENT_ID',
'client_secret': 'YOUR_CLIENT_SECRET'
}
msg.headers = {
'Content-Type': 'application/x-www-form-urlencoded'
}
return msg;
Parametreler hakkında daha fazla bilgi için FedEx belgelerine göz atabilirsiniz.
- http request düğümünü çalışma alanına sürükleyin ve önceki adımda oluşturduğunuz düğümle bağlayın.
- "Method" alanında "POST" seçeneğini seçin.
- "Data" alanında "Send as request body" seçeneğini seçin.
- "Link" alanına
https://apis-sandbox.fedex.com/oauth/token
bağlantısını yapıştırın. - "Return" alanında "Object JSON" seçeneğini seçin.
- function düğümünü çalışma alanına sürükleyin ve önceki adımda oluşturduğunuz düğümle bağlayın.
- "Function" alanına örnek kodu yapıştırın.
msg.access_token = msg.payload.access_token;
return msg;
2.3. Gönderi oluşturma
- api düğümünü çalışma alanına sürükleyin ve önceki adımda oluşturduğunuz düğümle bağlayın.
- "Find collection rows" yöntemini seçin ve aşağıdaki açıklamada verilen kodu "Data" alanına yapıştırın.
{
"collectionIdentifier": "delivery",
"entityId": "{{orderEvent.order.id}}",
"entityType": "orders",
"langCode": "en_US",
"limit": 1,
"offset": 0
}
- function düğümünü çalışma alanına sürükleyin ve önceki adımda oluşturduğunuz düğümle bağlayın.
- "Function" alanına örnek kodu yapıştırın.
// daha önce kaydedilen token'ı alıyoruz
const token = msg.access_token;
// başlıkları ayarlıyoruz
msg.headers = {
'Content-Type': 'application/json',
'authorization': `Bearer ${token}`
};
// önceki adımdan koleksiyonları alıyoruz
const collection = msg.payload.items[0];
// diziyi nesneye dönüştürüyoruz
const formData = collection.formData.reduce((acc, item) => {
acc[item.marker] = item.value;
return acc;
}, {});
// formdan alıcı bilgilerini ayarlıyoruz
const recipient = {
"address": {
"streetLines": [
formData.address
],
"city": formData.city,
"stateOrProvinceCode": formData.state_code,
"postalCode": formData.postal_code,
"countryCode": formData.country_code
},
"contact": {
"personName": formData.name,
"phoneNumber": formData.phone_number
}
}
// gelecekte kullanmak için msg'de koleksiyon verilerini ayarlıyoruz
msg.collection = collection;
// fedex için istek parametrelerini ayarlıyoruz
msg.payload = {
"labelResponseOptions": "URL_ONLY",
"accountNumber": {
"value": "510087020"
},
"requestedShipment": {
"shipper": {
"contact": {
"personName": "GÖNDERİCİ ADI",
"phoneNumber": "9018328595"
},
"address": {
"streetLines": [
"GÖNDERİCİ ADRESİ 1"
],
"city": "MEMPHIS",
"stateOrProvinceCode": "TN",
"postalCode": "38116",
"countryCode": "US"
}
},
"recipients": [
recipient
],
"serviceType": "STANDARD_OVERNIGHT",
"packagingType": "YOUR_PACKAGING",
"pickupType": "DROPOFF_AT_FEDEX_LOCATION",
"shippingChargesPayment": {
"paymentType": "SENDER",
"payor": {
"responsibleParty": {
"accountNumber": {
"value": "510087020",
"key": ""
}
},
"address": {
"streetLines": [
"GÖNDERİCİ ADRESİ 1"
],
"city": "MEMPHIS",
"stateOrProvinceCode": "TN",
"postalCode": "38116",
"countryCode": "US"
}
}
},
"labelSpecification": {},
"requestedPackageLineItems": [
{
"customerReferences": [
{
"customerReferenceType": "CUSTOMER_REFERENCE",
"value": `Collection${collection.id}`
}
],
"weight": {
"units": "LB",
"value": "20"
}
}
]
}
};
return msg;
Parametreler hakkında daha fazla bilgi için FedEx belgelerine göz atabilirsiniz.
- http request düğümünü çalışma alanına sürükleyin ve önceki adımda oluşturduğunuz düğümle bağlayın.
- "Method" alanında "POST" seçeneğini seçin.
- "Data" alanında "Send as request body" seçeneğini seçin.
- "Link" alanına
https://apis-sandbox.fedex.com/ship/v1/shipments
bağlantısını yapıştırın. - "Return" alanında "Object JSON" seçeneğini seçin.
- debug düğümünü çalışma alanına sürükleyin ve önceki adımda oluşturduğunuz düğümle bağlayın.
- function düğümünü çalışma alanına sürükleyin ve önceki adımda oluşturduğunuz düğümle bağlayın.
- "Function" alanına örnek kodu yapıştırın.
// gönderi verilerini alıyoruz
const shipment = msg.payload.output.transactionShipments[0];
// daha önce kaydedilen koleksiyon verilerini alıyoruz
const collection = msg.collection;
// form verilerine gönderi verilerini yazıyoruz
const newFormData = [
...collection.formData
.filter(item => !['transaction_id', 'ship_datestamp', 'delivery_datestamp', 'tracking_number'].includes(item.marker)),
{
marker: 'transaction_id',
value: msg.payload.transactionId,
type: 'string'
},
{
marker: 'ship_datestamp',
value: shipment.shipDatestamp,
type: 'string'
},
{
marker: 'delivery_datestamp',
value: shipment.pieceResponses[0].deliveryDatestamp,
type: 'string'
},
{
marker: 'tracking_number',
value: shipment.masterTrackingNumber,
type: 'string'
}
]
// koleksiyonu güncellemek için parametreleri ayarlıyoruz
msg.payload = {
id: collection.id,
collectionIdentifier: 'delivery',
formData: {
en_US: newFormData
},
formIdentifier: 'delivery_form',
entityId: collection.entityId,
entityType: collection.entityType,
langCode: 'en_US',
}
// gelecekte kullanmak için koleksiyon verilerini kaydediyoruz
msg.collection = msg.payload;
return msg;
- api düğümünü çalışma alanına sürükleyin ve önceki adımda oluşturduğunuz düğümle bağlayın.
- "Update collection row" yöntemini seçin.
2.4. Sipariş durumunu güncelleme
- api düğümünü çalışma alanına sürükleyin ve önceki adımda oluşturduğunuz düğümle bağlayın.
- "Update order status" yöntemini seçin ve aşağıdaki açıklamada verilen kodu "Data" alanına yapıştırın.
{
"orderId": "{{collection.entityId}}",
"storageId": "test_order_storage",
"statusIdentifier": "order_delivery_started"
}
- debug düğümünü çalışma alanına sürükleyin ve önceki adımda oluşturduğunuz düğümle bağlayın.
3. Gönderi durumunu takip etme
3.1. Takip için siparişleri alma
- interval düğümünü çalışma alanına sürükleyin ve önceki adımda oluşturduğunuz düğümle bağlayın.
- Dakika cinsinden bir aralık girin.
- api düğümünü çalışma alanına sürükleyin ve önceki adımda oluşturduğunuz düğümle bağlayın.
- "Find orders by status" yöntemini seçin ve aşağıdaki açıklamada verilen kodu "Data" alanına yapıştırın.
{
"storageId": "test_order_storage",
"statusIdentifier": "order_delivery_started"
}
- function düğümünü çalışma alanına sürükleyin ve önceki adımda oluşturduğunuz düğümle bağlayın.
- "Function" alanına örnek kodu yapıştırın.
msg.payload = msg.payload.items;
return msg;
- split düğümünü çalışma alanına sürükleyin ve önceki adımda oluşturduğunuz düğümle bağlayın.
- Uzunluğu girin.
- api düğümünü çalışma alanına sürükleyin ve önceki adımda oluşturduğunuz düğümle bağlayın.
- "Find collection row" yöntemini seçin ve aşağıdaki açıklamada verilen kodu "Data" alanına yapıştırın.
{
"collectionIdentifier": "delivery",
"entityId": "{{payload.id}}",
"entityType": "orders",
"langCode": "en_US",
"limit": 1,
"offset": 0
}
- function düğümünü çalışma alanına sürükleyin ve önceki adımda oluşturduğunuz düğümle bağlayın.
- "Function" alanına örnek kodu yapıştırın.
msg.payload = msg.payload.items[0]
return msg;
- switch düğümünü çalışma alanına sürükleyin ve önceki adımda oluşturduğunuz düğümle bağlayın.
- Kontrol için bir kural ekleyin. "not empty" koşulunu seçin.
- function düğümünü çalışma alanına sürükleyin ve önceki adımda oluşturduğunuz düğümle bağlayın.
- "Function" alanına örnek kodu yapıştırın.
msg.trackingNumber = msg.payload
.formData
.find(item => item.marker === 'tracking_number')
.value;
msg.collection = msg.payload;
return msg;
3.2. Token alma
- function düğümünü çalışma alanına sürükleyin ve önceki adımda oluşturduğunuz düğümle bağlayın.
- "Function" alanına örnek kodu yapıştırın.
YOUR_CLIENT_ID
veOUR_CLIENT_SECRET
değerlerini kendi değerlerinizle değiştirin.
msg.payload = {
'grant_type': 'client_credentials',
'client_id': 'YOUR_CLIENT_ID',
'client_secret': 'YOUR_CLIENT_SECRET'
}
msg.headers = {
'Content-Type': 'application/x-www-form-urlencoded'
}
return msg;
Parametreler hakkında daha fazla bilgi için FedEx belgelerine göz atabilirsiniz.
- http request düğümünü çalışma alanına sürükleyin ve önceki adımda oluşturduğunuz düğümle bağlayın.
- "Method" alanında "POST" seçeneğini seçin.
- "Data" alanında "Send as request body" seçeneğini seçin.
- "Link" alanına
https://apis-sandbox.fedex.com/oauth/token
bağlantısını yapıştırın. - "Return" alanında "Object JSON" seçeneğini seçin.
3.3. Gönderi durumunu alma
- function düğümünü çalışma alanına sürükleyin ve önceki adımda oluşturduğunuz düğümle bağlayın.
- "Function" alanına örnek kodu yapıştırın.
const token = msg.payload.access_token;
msg.headers = {
'content-type': 'application/json',
'authorization': `Bearer ${token}`
};
msg.payload = {
"trackingInfo": [
{
"trackingNumberInfo": {
"trackingNumber": msg.trackingNumber
}
}
],
"includeDetailedScans": true
}
return msg;
Parametreler hakkında daha fazla bilgi için FedEx belgelerine göz atabilirsiniz.
- http request düğümünü çalışma alanına sürükleyin ve önceki adımda oluşturduğunuz düğümle bağlayın.
- "Method" alanında "POST" seçeneğini seçin.
- "Data" alanında "Send as request body" seçeneğini seçin.
- "Link" alanına
https://apis-sandbox.fedex.com/track/v1/trackingnumbers
bağlantısını yapıştırın. - "Return" alanında "Object JSON" seçeneğini seçin.
- function düğümünü çalışma alanına sürükleyin ve önceki adımda oluşturduğunuz düğümle bağlayın.
- "Function" alanına örnek kodu yapıştırın.
msg.payload = msg.payload.output.completeTrackResults[0].trackResults[0].latestStatusDetail.statusByLocale;
return msg;
3.4. Sipariş durumunu güncelleme
- switch düğümünü çalışma alanına sürükleyin ve önceki adımda oluşturduğunuz düğümle bağlayın.
- Kontrol için bir kural ekleyin. "==" koşulunu seçin ve değeri "Ready for pickup" olarak girin.
- api düğümünü çalışma alanına sürükleyin ve önceki adımda oluşturduğunuz düğümle bağlayın.
- "Update order status" yöntemini seçin ve aşağıdaki açıklamada verilen kodu "Data" alanına yapıştırın.
{
"orderId": "{{collection.entityId}}",
"storageId": "test_order_storage",
"statusIdentifier": "ready_for_pickup"
}
- debug düğümünü çalışma alanına sürükleyin ve önceki adımda oluşturduğunuz düğümle bağlayın.