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
.
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
)
1.6. Sinov buyurtmasini yarating
Ushbu buyurtma uchun buyurtma va to'plam yozuvini yarating.
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.
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
vaOUR_CLIENT_SECRET
ni o'z ma'lumotlaringiz bilan almashtiring.
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.
- function tugmasini ish maydoniga torting va oldingi qadamdagi tugma bilan ulab qo'ying.
- "Function" maydoniga misoldan kodni joylashtiring.
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.
{
"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.
// 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.
- debug tugmasini ish maydoniga torting va oldingi qadamdagi tugma bilan ulab qo'ying.
- function tugmasini ish maydoniga torting va oldingi qadamdagi tugma bilan ulab qo'ying.
- "Function" maydoniga misoldan kodni joylashtiring.
// 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.
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.
{
"orderId": "{{collection.entityId}}",
"storageId": "test_order_storage",
"statusIdentifier": "order_delivery_started"
}
- debug tugmasini ish maydoniga torting va oldingi qadamdagi tugma bilan ulab qo'ying.
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.
- 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.
{
"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.
msg.payload = msg.payload.items;
return msg;
- split tugmasini ish maydoniga torting va oldingi qadamdagi tugma bilan ulab qo'ying.
- Uzunlikni kiriting.
- 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.
{
"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.
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.
- function tugmasini ish maydoniga torting va oldingi qadamdagi tugma bilan ulab qo'ying.
- "Function" maydoniga misoldan kodni joylashtiring.
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
vaOUR_CLIENT_SECRET
ni o'z ma'lumotlaringiz bilan almashtiring.
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.
3.3. Yuborish statusini olish
- function tugmasini ish maydoniga torting va oldingi qadamdagi tugma bilan ulab qo'ying.
- "Function" maydoniga misoldan kodni joylashtiring.
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.
- function tugmasini ish maydoniga torting va oldingi qadamdagi tugma bilan ulab qo'ying.
- "Function" maydoniga misoldan kodni joylashtiring.
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.
- 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.
{
"orderId": "{{collection.entityId}}",
"storageId": "test_order_storage",
"statusIdentifier": "ready_for_pickup"
}
- debug tugmasini ish maydoniga torting va oldingi qadamdagi tugma bilan ulab qo'ying.