FedEx ilə inteqrasiya nümunəsi
Bu təlimatda biz FedEx-i necə inteqrasiya etməyi göstərəcəyik.
1. Əvvəlcədən hazırlıq
1.1. FedEx-də hesab yaradın
İnkişaf etdirici portalında hesab yaradın.
1.2. Layihələr yaradın və tokenlər alın
Layihələrim bölməsində 2 layihə yaradın və client id və client secret-i saxlayın.
Birinci layihə çatdırılmaları idarə etmək üçündür.
İkinci layihə çatdırılmaları izləmək üçündür.
1.3. Çatdırılma statusları yaradın
Sifarişlərin anbar statusları sekmesində statuslar yaradın:
- order_delivery
- order_delivery_started
- ready_for_pickup
1.4. Statusları izləmək üçün hadisə yaradın
Hadisələr modulunda order_delivery
statusunun dəyişməsini izləmək üçün hadisə yaradın.
1.5. Çatdırılma üçün kolleksiya yaradın
İnteqrasiya Kolleksiyaları modulunda aşağıdakı atributlarla çatdırılma üçün kolleksiya yaradın:
- 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 sifarişi yaradın
Bu sifariş üçün kolleksiyada bir qeyd yaradın.
2. Göndərişin yaradılması
2.1. Çatdırılma hadisəsini izləyin
- hadisələr nodunu iş sahəsinə sürükləyin.
- Nodonun adını daxil edin.
- "Set" sahəsindəki dəyəri "orderEvent" olaraq dəyişdirin.
- Hadisə "msg.orderEvent" obyektində saxlanılacaq və digər nodlarda istifadə oluna biləcək.
- Siyahıdan yaradılmış "order delivery" hadisəsini seçin və "submit" düyməsini basın.
2.2. Token alın
- function nodunu iş sahəsinə sürükləyin və əvvəlki addımdakı nodla birləşdirin.
- "Function" sahəsinə nümunədən kodu yapışdırın.
YOUR_CLIENT_ID
vəYOUR_CLIENT_SECRET
dəyərlərini öz dəyərlərinizlə əvəz edin.
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;
Parametrlər haqqında daha ətraflı məlumatı FedEx sənədləşməsində tapa bilərsiniz.
- http request nodunu iş sahəsinə sürükləyin və əvvəlki addımdakı nodla birləşdirin.
- "Method" sahəsində "POST" seçin.
- "Data" sahəsində "Send as request body" seçin.
- "Link" sahəsinə
https://apis-sandbox.fedex.com/oauth/token
linkini yapışdırın. - "Return" sahəsində "Object JSON" seçin.
- function nodunu iş sahəsinə sürükləyin və əvvəlki addımdakı nodla birləşdirin.
- "Function" sahəsinə nümunədən kodu yapışdırın.
msg.access_token = msg.payload.access_token;
return msg;
2.3. Göndəriş yaradın
- api nodunu iş sahəsinə sürükləyin və əvvəlki addımdakı nodla birləşdirin.
- "Find collection rows" metodunu seçin və aşağıdakı təsvirə uyğun kodu "Data" sahəsinə yapışdırın.
{
"collectionIdentifier": "delivery",
"entityId": "{{orderEvent.order.id}}",
"entityType": "orders",
"langCode": "en_US",
"limit": 1,
"offset": 0
}
- function nodunu iş sahəsinə sürükləyin və əvvəlki addımdakı nodla birləşdirin.
- "Function" sahəsinə nümunədən kodu yapışdırın.
// əvvəlcədən saxlanılan tokeni alırıq
const token = msg.access_token;
// başlıqları təyin edirik
msg.headers = {
'Content-Type': 'application/json',
'authorization': `Bearer ${token}`
};
// əvvəlki addımdan kolleksiyaları alırıq
const collection = msg.payload.items[0];
// massivi obyektdə çeviririk
const formData = collection.formData.reduce((acc, item) => {
acc[item.marker] = item.value;
return acc;
}, {});
// formadan alıcı parametrlərini təyin edirik
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
}
}
// msg-də kolleksiya məlumatlarını saxlayırıq ki, gələcəkdə istifadə edək
msg.collection = collection;
// fedex üçün sorğu parametrlərini təyin edirik
msg.payload = {
"labelResponseOptions": "URL_ONLY",
"accountNumber": {
"value": "510087020"
},
"requestedShipment": {
"shipper": {
"contact": {
"personName": "GÖNDƏRƏN ADI",
"phoneNumber": "9018328595"
},
"address": {
"streetLines": [
"GÖNDƏRƏN ÜNVANI 1"
],
"city": "MEMPHIS",
"stateOrProvinceCode": "TN",
"postalCode": "38116",
"countryCode": "US"
}
},
"recipients": [
recipient
],
"serviceType": "STANDARD_OVERNIGHT",
"packagingType": "SİZİN PAKETLƏMƏ",
"pickupType": "DROPOFF_AT_FEDEX_LOCATION",
"shippingChargesPayment": {
"paymentType": "GÖNDƏRƏN",
"payor": {
"responsibleParty": {
"accountNumber": {
"value": "510087020",
"key": ""
}
},
"address": {
"streetLines": [
"GÖNDƏRƏN ÜNVANI 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;
Parametrlər haqqında daha ətraflı məlumatı FedEx sənədləşməsində tapa bilərsiniz.
- http request nodunu iş sahəsinə sürükləyin və əvvəlki addımdakı nodla birləşdirin.
- "Method" sahəsində "POST" seçin.
- "Data" sahəsində "Send as request body" seçin.
- "Link" sahəsinə
https://apis-sandbox.fedex.com/ship/v1/shipments
linkini yapışdırın. - "Return" sahəsində "Object JSON" seçin.
- debug nodunu iş sahəsinə sürükləyin və əvvəlki addımdakı nodla birləşdirin.
- function nodunu iş sahəsinə sürükləyin və əvvəlki addımdakı nodla birləşdirin.
- "Function" sahəsinə nümunədən kodu yapışdırın.
// göndəriş məlumatlarını alırıq
const shipment = msg.payload.output.transactionShipments[0];
// əvvəlcədən saxlanılan kolleksiya məlumatlarını alırıq
const collection = msg.collection;
// formadakı atributlara göndəriş məlumatlarını yazırıq
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'
}
]
// kolleksiyanı yeniləmək üçün parametrləri təyin edirik
msg.payload = {
id: collection.id,
collectionIdentifier: 'delivery',
formData: {
en_US: newFormData
},
formIdentifier: 'delivery_form',
entityId: collection.entityId,
entityType: collection.entityType,
langCode: 'en_US',
}
// gələcəkdə istifadə etmək üçün kolleksiya məlumatlarını saxlayırıq
msg.collection = msg.payload;
return msg;
- api nodunu iş sahəsinə sürükləyin və əvvəlki addımdakı nodla birləşdirin.
- "Update collection row" metodunu seçin.
2.4. Sifariş statusunu yeniləyin
- api nodunu iş sahəsinə sürükləyin və əvvəlki addımdakı nodla birləşdirin.
- "Update order status" metodunu seçin və aşağıdakı təsvirə uyğun kodu "Data" sahəsinə yapışdırın.
{
"orderId": "{{collection.entityId}}",
"storageId": "test_order_storage",
"statusIdentifier": "order_delivery_started"
}
- debug nodunu iş sahəsinə sürükləyin və əvvəlki addımdakı nodla birləşdirin.
3. Göndəriş statusunu izləyin
3.1. İzləmə üçün sifarişləri alın
- interval nodunu iş sahəsinə sürükləyin və əvvəlki addımdakı nodla birləşdirin.
- Dəqiqələri daxil edin.
- api nodunu iş sahəsinə sürükləyin və əvvəlki addımdakı nodla birləşdirin.
- "Find orders by status" metodunu seçin və aşağıdakı təsvirə uyğun kodu "Data" sahəsinə yapışdırın.
{
"storageId": "test_order_storage",
"statusIdentifier": "order_delivery_started"
}
- function nodunu iş sahəsinə sürükləyin və əvvəlki addımdakı nodla birləşdirin.
- "Function" sahəsinə nümunədən kodu yapışdırın.
msg.payload = msg.payload.items;
return msg;
- split nodunu iş sahəsinə sürükləyin və əvvəlki addımdakı nodla birləşdirin.
- Uzunluğu daxil edin.
- api nodunu iş sahəsinə sürükləyin və əvvəlki addımdakı nodla birləşdirin.
- "Find collection row" metodunu seçin və aşağıdakı təsvirə uyğun kodu "Data" sahəsinə yapışdırın.
{
"collectionIdentifier": "delivery",
"entityId": "{{payload.id}}",
"entityType": "orders",
"langCode": "en_US",
"limit": 1,
"offset": 0
}
- function nodunu iş sahəsinə sürükləyin və əvvəlki addımdakı nodla birləşdirin.
- "Function" sahəsinə nümunədən kodu yapışdırın.
msg.payload = msg.payload.items[0]
return msg;
- switch nodunu iş sahəsinə sürükləyin və əvvəlki addımdakı nodla birləşdirin.
- Yoxlama üçün qayda əlavə edin. "not empty" şərtini seçin.
- function nodunu iş sahəsinə sürükləyin və əvvəlki addımdakı nodla birləşdirin.
- "Function" sahəsinə nümunədən kodu yapışdırın.
msg.trackingNumber = msg.payload
.formData
.find(item => item.marker === 'tracking_number')
.value;
msg.collection = msg.payload;
return msg;
3.2. Token alın
- function nodunu iş sahəsinə sürükləyin və əvvəlki addımdakı nodla birləşdirin.
- "Function" sahəsinə nümunədən kodu yapışdırın.
YOUR_CLIENT_ID
vəYOUR_CLIENT_SECRET
dəyərlərini öz dəyərlərinizlə əvəz edin.
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;
Parametrlər haqqında daha ətraflı məlumatı FedEx sənədləşməsində tapa bilərsiniz.
- http request nodunu iş sahəsinə sürükləyin və əvvəlki addımdakı nodla birləşdirin.
- "Method" sahəsində "POST" seçin.
- "Data" sahəsində "Send as request body" seçin.
- "Link" sahəsinə
https://apis-sandbox.fedex.com/oauth/token
linkini yapışdırın. - "Return" sahəsində "Object JSON" seçin.
3.3. Göndərişin statusunu alın
- function nodunu iş sahəsinə sürükləyin və əvvəlki addımdakı nodla birləşdirin.
- "Function" sahəsinə nümunədən kodu yapışdı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;
Parametrlər haqqında daha ətraflı məlumatı FedEx sənədləşməsində tapa bilərsiniz.
- http request nodunu iş sahəsinə sürükləyin və əvvəlki addımdakı nodla birləşdirin.
- "Method" sahəsində "POST" seçin.
- "Data" sahəsində "Send as request body" seçin.
- "Link" sahəsinə
https://apis-sandbox.fedex.com/track/v1/trackingnumbers
linkini yapışdırın. - "Return" sahəsində "Object JSON" seçin.
- function nodunu iş sahəsinə sürükləyin və əvvəlki addımdakı nodla birləşdirin.
- "Function" sahəsinə nümunədən kodu yapışdırın.
msg.payload = msg.payload.output.completeTrackResults[0].trackResults[0].latestStatusDetail.statusByLocale;
return msg;
3.4. Sifariş statusunu yeniləyin
- switch nodunu iş sahəsinə sürükləyin və əvvəlki addımdakı nodla birləşdirin.
- Yoxlama üçün qayda əlavə edin. "==" şərtini seçin, dəyəri "Ready for pickup" olaraq daxil edin.
- api nodunu iş sahəsinə sürükləyin və əvvəlki addımdakı nodla birləşdirin.
- "Update order status" metodunu seçin və aşağıdakı təsvirə uyğun kodu "Data" sahəsinə yapışdırın.
{
"orderId": "{{collection.entityId}}",
"storageId": "test_order_storage",
"statusIdentifier": "ready_for_pickup"
}
- debug nodunu iş sahəsinə sürükləyin və əvvəlki addımdakı nodla birləşdirin.