Asosiy mazmunga o'tish

FedEx bilan integratsiya misoli

Ushbu o'quv darsida biz FedEx bilan qanday integratsiya qilishni ko'rsatamiz.

1. Oldindan tayyorgarlik

1.1. FedEx'da hisob oching

Developer portal da hisob oching.

1.2. Loyihalar yarating va tokenlarni oling

Menim loyihalarim bo'limida 2 ta loyiha yarating va client id va client secret ni saqlang.

Birinchi loyiha yetkazib berishlarni boshqarish uchun.

Ikkinchi loyiha yetkazib berishlarni kuzatish uchun.

1.3. Yetkazib berish uchun statuslar yarating

Buyurtmalar ombori statuslari bo'limida statuslar yarating:

  • order_delivery
  • order_delivery_started
  • ready_for_pickup

1.4. Statuslarni kuzatish uchun voqea yarating

Voqealar modulida buyurtma statusini o'zgartirishni kuzatish uchun voqea yarating order_delivery.

IMG2

1.5. Yetkazib berish uchun to'plam yarating

Integratsiya to'plamlari modulida quyidagi atributlar bilan yetkazib berish uchun to'plam yarating:

  • 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)

IMG2

1.6. Sinov buyurtmasini yarating

Ushbu buyurtma uchun buyurtma va to'plam yozuvini yarating.

IMG2

IMG2

2. Yuborishni yaratish

2.1. Yetkazib berish voqeasini kuzatish

  • events tugmasini ish maydoniga torting.
  • Tugma nomini kiriting.
  • "Set" maydonidagi qiymatini "orderEvent" ga o'zgartiring.
  • Voqea "msg.orderEvent" ob'ektida saqlanadi va boshqa tugmalarda foydalanish mumkin.
  • Ro'yxatdan olingan "order delivery" voqeasini tanlang va "submit" tugmasini bosing.

IMG2


2.2. Tokenni olish

  • function tugmasini ish maydoniga torting va oldingi qadamdagi tugma bilan ulab qo'ying.
  • "Function" maydoniga misoldan kodni joylashtiring.
  • YOUR_CLIENT_ID va OUR_CLIENT_SECRET ni o'z ma'lumotlaringiz bilan almashtiring.

IMG2

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;

Parametrlar haqida batafsil ma'lumotni FedEx hujjatida topishingiz mumkin.


  • http request tugmasini ish maydoniga torting va oldingi qadamdagi tugma bilan ulab qo'ying.
  • "Method" maydonida "POST" variantini tanlang.
  • "Data" maydonida "Send as request body" variantini tanlang.
  • "Link" maydoniga https://apis-sandbox.fedex.com/oauth/token havolasini joylashtiring.
  • "Return" maydonida "Object JSON" variantini tanlang.

IMG2


  • function tugmasini ish maydoniga torting va oldingi qadamdagi tugma bilan ulab qo'ying.
  • "Function" maydoniga misoldan kodni joylashtiring.

IMG2

msg.access_token = msg.payload.access_token;

return msg;

2.3. Yuborishni yaratish

  • api tugmasini ish maydoniga torting va oldingi qadamdagi tugma bilan ulab qo'ying.
  • "Find collection rows" metodini tanlang va quyidagi tavsifdagi kodni "Data" maydoniga joylashtiring.

IMG2

{
"collectionIdentifier": "delivery",
"entityId": "{{orderEvent.order.id}}",
"entityType": "orders",
"langCode": "en_US",
"limit": 1,
"offset": 0
}

  • function tugmasini ish maydoniga torting va oldingi qadamdagi tugma bilan ulab qo'ying.
  • "Function" maydoniga misoldan kodni joylashtiring.

IMG2

// oldin saqlangan tokenni olamiz
const token = msg.access_token;

// sarlavhalarni o'rnatamiz
msg.headers = {
'Content-Type': 'application/json',
'authorization': `Bearer ${token}`
};

// oldingi qadamdan to'plamni olamiz
const collection = msg.payload.items[0];
// massivni ob'ektga aylantiramiz
const formData = collection.formData.reduce((acc, item) => {
acc[item.marker] = item.value;
return acc;
}, {});
// qabul qiluvchi ma'lumotlarni shakldan o'rnatamiz
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
}
}
// kelajakda foydalanish uchun msg ga to'plam ma'lumotlarini o'rnatamiz
msg.collection = collection;
// fedex uchun so'rov parametrlarini o'rnatamiz
msg.payload = {
"labelResponseOptions": "URL_ONLY",
"accountNumber": {
"value": "510087020"
},
"requestedShipment": {
"shipper": {
"contact": {
"personName": "YUBORUVCHI ISMI",
"phoneNumber": "9018328595"
},
"address": {
"streetLines": [
"YUBORUVCHI MANZILI 1"
],
"city": "MEMPHIS",
"stateOrProvinceCode": "TN",
"postalCode": "38116",
"countryCode": "US"
}
},
"recipients": [
recipient
],
"serviceType": "STANDARD_OVERNIGHT",
"packagingType": "SIZNING QADOQLASH",
"pickupType": "DROPOFF_AT_FEDEX_LOCATION",
"shippingChargesPayment": {
"paymentType": "SENDER",
"payor": {
"responsibleParty": {
"accountNumber": {
"value": "510087020",
"key": ""
}
},
"address": {
"streetLines": [
"YUBORUVCHI MANZILI 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;

Parametrlar haqida batafsil ma'lumotni FedEx hujjatida topishingiz mumkin.


  • http request tugmasini ish maydoniga torting va oldingi qadamdagi tugma bilan ulab qo'ying.
  • "Method" maydonida "POST" variantini tanlang.
  • "Data" maydonida "Send as request body" variantini tanlang.
  • "Link" maydoniga https://apis-sandbox.fedex.com/ship/v1/shipments havolasini joylashtiring.
  • "Return" maydonida "Object JSON" variantini tanlang.

IMG2


  • debug tugmasini ish maydoniga torting va oldingi qadamdagi tugma bilan ulab qo'ying.

IMG2


  • function tugmasini ish maydoniga torting va oldingi qadamdagi tugma bilan ulab qo'ying.
  • "Function" maydoniga misoldan kodni joylashtiring.

IMG2

// yuborish ma'lumotlarini olamiz
const shipment = msg.payload.output.transactionShipments[0];
// oldin saqlangan to'plam ma'lumotlarini olamiz
const collection = msg.collection;

// shakldagi ma'lumotlarni yuborishdan olingan ma'lumotlar bilan to'ldiramiz
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'
}
]

// to'plamni yangilash uchun parametrlarni o'rnatamiz
msg.payload = {
id: collection.id,
collectionIdentifier: 'delivery',
formData: {
en_US: newFormData
},
formIdentifier: 'delivery_form',
entityId: collection.entityId,
entityType: collection.entityType,
langCode: 'en_US',
}

// kelajakda foydalanish uchun to'plam ma'lumotlarini saqlaymiz
msg.collection = msg.payload;

return msg;

  • api tugmasini ish maydoniga torting va oldingi qadamdagi tugma bilan ulab qo'ying.
  • "Update collection row" metodini tanlang.

IMG2


2.4. Buyurtma statusini yangilash

  • api tugmasini ish maydoniga torting va oldingi qadamdagi tugma bilan ulab qo'ying.
  • "Update order status" metodini tanlang va quyidagi tavsifdagi kodni "Data" maydoniga joylashtiring.

IMG2

{
"orderId": "{{collection.entityId}}",
"storageId": "test_order_storage",
"statusIdentifier": "order_delivery_started"
}

  • debug tugmasini ish maydoniga torting va oldingi qadamdagi tugma bilan ulab qo'ying.

IMG2


3. Yuborish statusini kuzatish

3.1. Kuzatish uchun buyurtmalarni olish

  • interval tugmasini ish maydoniga torting va oldingi qadamdagi tugma bilan ulab qo'ying.
  • Daqiqalarda intervalni kiriting.

IMG2


  • api tugmasini ish maydoniga torting va oldingi qadamdagi tugma bilan ulab qo'ying.
  • "Find orders by status" metodini tanlang va quyidagi tavsifdagi kodni "Data" maydoniga joylashtiring.

IMG2

{
"storageId": "test_order_storage",
"statusIdentifier": "order_delivery_started"
}

  • function tugmasini ish maydoniga torting va oldingi qadamdagi tugma bilan ulab qo'ying.
  • "Function" maydoniga misoldan kodni joylashtiring.

IMG2

msg.payload = msg.payload.items;

return msg;

  • split tugmasini ish maydoniga torting va oldingi qadamdagi tugma bilan ulab qo'ying.
  • Uzunlikni kiriting.

IMG2


  • api tugmasini ish maydoniga torting va oldingi qadamdagi tugma bilan ulab qo'ying.
  • "Find collection row" metodini tanlang va quyidagi tavsifdagi kodni "Data" maydoniga joylashtiring.

IMG2

{
"collectionIdentifier": "delivery",
"entityId": "{{payload.id}}",
"entityType": "orders",
"langCode": "en_US",
"limit": 1,
"offset": 0
}

  • function tugmasini ish maydoniga torting va oldingi qadamdagi tugma bilan ulab qo'ying.
  • "Function" maydoniga misoldan kodni joylashtiring.

IMG2

msg.payload = msg.payload.items[0]

return msg;

  • switch tugmasini ish maydoniga torting va oldingi qadamdagi tugma bilan ulab qo'ying.
  • Tekshirish uchun qoidani qo'shing. "not empty" shartini tanlang.

IMG2


  • function tugmasini ish maydoniga torting va oldingi qadamdagi tugma bilan ulab qo'ying.
  • "Function" maydoniga misoldan kodni joylashtiring.

IMG2

msg.trackingNumber = msg.payload
.formData
.find(item => item.marker === 'tracking_number')
.value;

msg.collection = msg.payload;

return msg;

3.2. Tokenni olish

  • function tugmasini ish maydoniga torting va oldingi qadamdagi tugma bilan ulab qo'ying.
  • "Function" maydoniga misoldan kodni joylashtiring.
  • YOUR_CLIENT_ID va OUR_CLIENT_SECRET ni o'z ma'lumotlaringiz bilan almashtiring.

IMG2

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;

Parametrlar haqida batafsil ma'lumotni FedEx hujjatida topishingiz mumkin.


  • http request tugmasini ish maydoniga torting va oldingi qadamdagi tugma bilan ulab qo'ying.
  • "Method" maydonida "POST" variantini tanlang.
  • "Data" maydonida "Send as request body" variantini tanlang.
  • "Link" maydoniga https://apis-sandbox.fedex.com/oauth/token havolasini joylashtiring.
  • "Return" maydonida "Object JSON" variantini tanlang.

IMG2


3.3. Yuborish statusini olish

  • function tugmasini ish maydoniga torting va oldingi qadamdagi tugma bilan ulab qo'ying.
  • "Function" maydoniga misoldan kodni joylashtiring.

IMG2

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;

Parametrlar haqida batafsil ma'lumotni FedEx hujjatida topishingiz mumkin.


  • http request tugmasini ish maydoniga torting va oldingi qadamdagi tugma bilan ulab qo'ying.
  • "Method" maydonida "POST" variantini tanlang.
  • "Data" maydonida "Send as request body" variantini tanlang.
  • "Link" maydoniga https://apis-sandbox.fedex.com/track/v1/trackingnumbers havolasini joylashtiring.
  • "Return" maydonida "Object JSON" variantini tanlang.

IMG2


  • function tugmasini ish maydoniga torting va oldingi qadamdagi tugma bilan ulab qo'ying.
  • "Function" maydoniga misoldan kodni joylashtiring.

IMG2

msg.payload = msg.payload.output.completeTrackResults[0].trackResults[0].latestStatusDetail.statusByLocale;

return msg;

3.4. Buyurtma statusini yangilash

  • switch tugmasini ish maydoniga torting va oldingi qadamdagi tugma bilan ulab qo'ying.
  • Tekshirish uchun qoidani qo'shing. "==" shartini tanlang va qiymat sifatida "Ready for pickup" ni kiriting.

IMG2


  • api tugmasini ish maydoniga torting va oldingi qadamdagi tugma bilan ulab qo'ying.
  • "Update order status" metodini tanlang va quyidagi tavsifdagi kodni "Data" maydoniga joylashtiring.

IMG2

{
"orderId": "{{collection.entityId}}",
"storageId": "test_order_storage",
"statusIdentifier": "ready_for_pickup"
}

  • debug tugmasini ish maydoniga torting va oldingi qadamdagi tugma bilan ulab qo'ying.

IMG2