Lewati ke konten utama

Contoh Integrasi dengan FedEx

Dalam tutorial ini, kami akan menunjukkan cara mengintegrasikan FedEx.

1. Persiapan

1.1. Buat akun FedEx

Buat akun di portal pengembang.

1.2. Buat proyek dan dapatkan token

Buat 2 proyek di bagian proyek saya dan simpan client id dan client secret.

Proyek pertama adalah untuk mengelola pengiriman.

Proyek kedua adalah untuk melacak pengiriman.

1.3. Buat status untuk pengiriman

Di tab status penyimpanan pesanan buat status:

  • order_delivery
  • order_delivery_started
  • ready_for_pickup

1.4. Buat acara untuk melacak status

Di modul Acara, buat acara untuk melacak perubahan status pesanan order_delivery.

IMG2

1.5. Buat koleksi untuk pengiriman

Di modul Koleksi Integrasi, buat koleksi untuk pengiriman dengan atribut berikut:

  • 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. Buat pesanan uji

Buat pesanan dan catatan dalam koleksi untuk pesanan ini.

IMG2

IMG2

2. Membuat Pengiriman

2.1. Melacak acara pengiriman

  • Seret node acara ke ruang kerja.
  • Masukkan nama node.
  • Ubah nilai di kolom "Set" menjadi "orderEvent".
  • Acara akan disimpan dalam objek "msg.orderEvent" dan dapat digunakan di node lain.
  • Pilih acara yang dibuat "order delivery" dari daftar dan klik "submit".

IMG2


2.2. Mendapatkan token

  • Seret node fungsi ke ruang kerja dan hubungkan ke node dari langkah sebelumnya.
  • Tempelkan kode dari contoh ke dalam kolom "Fungsi".
  • Ganti YOUR_CLIENT_ID dan YOUR_CLIENT_SECRET dengan milik Anda.

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;

Anda dapat menemukan lebih banyak tentang parameter di dokumentasi FedEx.


  • Seret node permintaan http ke ruang kerja dan hubungkan ke node dari langkah sebelumnya.
  • Pilih "POST" di kolom Metode.
  • Pilih "Kirim sebagai body permintaan" di kolom Data.
  • Tempelkan tautan https://apis-sandbox.fedex.com/oauth/token ke dalam kolom Tautan.
  • Pilih "Objek JSON" di kolom Kembali.

IMG2


  • Seret node fungsi ke ruang kerja dan hubungkan ke node dari langkah sebelumnya.
  • Tempelkan kode dari contoh ke dalam kolom "Fungsi".

IMG2

msg.access_token = msg.payload.access_token;

return msg;

2.3. Membuat pengiriman

  • Seret node admin-api ke ruang kerja dan hubungkan ke node dari langkah sebelumnya.
  • Pilih "Menerima semua catatan yang menjadi milik koleksi" dan tempelkan kode di bawah ini ke dalam kolom "Data".
{
"entityType": "orders",
"entityId": "{{orderEvent.order.id}}",
"langCode": "en_US",
"offset": 0,
"limit": 1,
"marker": "delivery"
}

IMG2


  • Seret node fungsi ke ruang kerja dan hubungkan ke node dari langkah sebelumnya.
  • Tempelkan kode dari contoh ke dalam kolom "Fungsi".

IMG2

// ambil token yang disimpan sebelumnya
const token = msg.access_token;

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

// ambil koleksi dari langkah sebelumnya
const collection = msg.payload.items[0];
// ubah array menjadi objek
const formData = collection.formData.reduce((acc, item) => {
acc[item.marker] = item.value;
return acc;
}, {});
// atur parameter penerima dari formulir
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
}
}
// atur data koleksi di msg untuk penggunaan di masa mendatang
msg.collection = collection;
// atur parameter permintaan untuk FedEx
msg.payload = {
"labelResponseOptions": "URL_ONLY",
"accountNumber": {
"value": "510087020"
},
"requestedShipment": {
"shipper": {
"contact": {
"personName": "NAMA PENGIRIM",
"phoneNumber": "9018328595"
},
"address": {
"streetLines": [
"ALAMAT PENGIRIM 1"
],
"city": "MEMPHIS",
"stateOrProvinceCode": "TN",
"postalCode": "38116",
"countryCode": "US"
}
},
"recipients": [
recipient
],
"serviceType": "STANDARD_OVERNIGHT",
"packagingType": "KEMASAN_ANDA",
"pickupType": "DROPOFF_AT_FEDEX_LOCATION",
"shippingChargesPayment": {
"paymentType": "SENDER",
"payor": {
"responsibleParty": {
"accountNumber": {
"value": "510087020",
"key": ""
}
},
"address": {
"streetLines": [
"ALAMAT PENGIRIM 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;

Anda dapat menemukan lebih banyak tentang parameter di dokumentasi FedEx.


  • Seret node permintaan http ke ruang kerja dan hubungkan ke node dari langkah sebelumnya.
  • Pilih "POST" di kolom Metode.
  • Pilih "Kirim sebagai body permintaan" di kolom Data.
  • Tempelkan tautan https://apis-sandbox.fedex.com/ship/v1/shipments ke dalam kolom Tautan.
  • Pilih "Objek JSON" di kolom Kembali.

IMG2


  • Seret node debug ke ruang kerja dan hubungkan ke node dari langkah sebelumnya.

IMG2


  • Seret node fungsi ke ruang kerja dan hubungkan ke node dari langkah sebelumnya.
  • Tempelkan kode dari contoh ke dalam kolom "Fungsi".

IMG2

// ambil data pengiriman
const shipment = msg.payload.output.transactionShipments[0];
// ambil data koleksi yang disimpan sebelumnya
const collection = msg.collection;

// tulis data pengiriman ke dalam atribut formulir
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'
}
]

// atur parameter untuk memperbarui koleksi
msg.params = {
langCode: 'en_US',
id: collection.id,
marker: 'delivery'
}

msg.data = {
formIdentifier: 'delivery_form',
formData: {
en_US: newFormData
},
entityId: collection.entityId,
entityType: collection.entityType
}

// simpan data koleksi untuk penggunaan di masa mendatang
msg.collection = collection;

return msg;

  • Seret node admin-api ke ruang kerja dan hubungkan ke node dari langkah sebelumnya.
  • Pilih "Mengubah catatan dalam koleksi".

IMG2


2.4. Memperbarui status pesanan

  • Seret node admin-api ke ruang kerja dan hubungkan ke node dari langkah sebelumnya.
  • Pilih "Memperbarui status pesanan yang menjadi milik objek penyimpanan pesanan".
  • Tempelkan kode di bawah ini ke dalam kolom "Parameter kueri".
{
"id": 1,
"orderId": "{{collection.entityId}}"
}
  • Tempelkan kode di bawah ini ke dalam kolom "Body permintaan".
{
"statusIdentifier": "order_delivery_started"
}

IMG2


  • Seret node debug ke ruang kerja dan hubungkan ke node dari langkah sebelumnya.

IMG2


3. Melacak Status Pengiriman

3.1. Mengambil pesanan untuk pelacakan

  • Seret node interval ke ruang kerja dan hubungkan ke node dari langkah sebelumnya.
  • Masukkan interval dalam menit.

IMG2


  • Seret node admin-api ke ruang kerja dan hubungkan ke node dari langkah sebelumnya.
  • Pilih "Menerima semua pesanan yang menjadi milik objek penyimpanan pesanan".
  • Tempelkan kode di bawah ini ke dalam kolom "Parameter kueri".
{
"statusIdentifier": "order_delivery_started",
"langCode": "en_US",
"offset": 0,
"limit": 100,
"id": 1
}

IMG2


  • Seret node fungsi ke ruang kerja dan hubungkan ke node dari langkah sebelumnya.
  • Tempelkan kode dari contoh ke dalam kolom "Fungsi".

IMG2

msg.payload = msg.payload.items;

return msg;

  • Seret node split ke ruang kerja dan hubungkan ke node dari langkah sebelumnya.
  • Masukkan panjangnya.

IMG2


  • Seret node admin-api ke ruang kerja dan hubungkan ke node dari langkah sebelumnya.
  • Pilih "Menerima semua catatan yang menjadi milik koleksi".
  • Tempelkan kode di bawah ini ke dalam kolom "Parameter kueri".
{
"marker": "delivery",
"entityId": "{{payload.id}}",
"entityType": "orders",
"langCode": "en_US",
"limit": 1,
"offset": 0
}

IMG2


  • Seret node fungsi ke ruang kerja dan hubungkan ke node dari langkah sebelumnya.
  • Tempelkan kode dari contoh ke dalam kolom "Fungsi".

IMG2

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

return msg;

  • Seret node switch ke ruang kerja dan hubungkan ke node dari langkah sebelumnya.
  • Tambahkan aturan untuk memeriksa. Pilih kondisi "tidak kosong".

IMG2


  • Seret node fungsi ke ruang kerja dan hubungkan ke node dari langkah sebelumnya.
  • Tempelkan kode dari contoh ke dalam kolom "Fungsi".

IMG2

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

msg.collection = msg.payload;

return msg;

3.2. Mendapatkan token

  • Seret node fungsi ke ruang kerja dan hubungkan ke node dari langkah sebelumnya.
  • Tempelkan kode dari contoh ke dalam kolom "Fungsi".
  • Ganti YOUR_CLIENT_ID dan YOUR_CLIENT_SECRET dengan milik Anda.

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;

Anda dapat menemukan lebih banyak tentang parameter di dokumentasi FedEx.


  • Seret node permintaan http ke ruang kerja dan hubungkan ke node dari langkah sebelumnya.
  • Pilih "POST" di kolom Metode.
  • Pilih "Kirim sebagai body permintaan" di kolom Data.
  • Tempelkan tautan https://apis-sandbox.fedex.com/oauth/token ke dalam kolom Tautan.
  • Pilih "Objek JSON" di kolom Kembali.

IMG2


3.3. Mengambil status pengiriman

  • Seret node fungsi ke ruang kerja dan hubungkan ke node dari langkah sebelumnya.
  • Tempelkan kode dari contoh ke dalam kolom "Fungsi".

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;

Anda dapat menemukan lebih banyak tentang parameter di dokumentasi FedEx.


  • Seret node permintaan http ke ruang kerja dan hubungkan ke node dari langkah sebelumnya.
  • Pilih "POST" di kolom Metode.
  • Pilih "Kirim sebagai body permintaan" di kolom Data.
  • Tempelkan tautan https://apis-sandbox.fedex.com/track/v1/trackingnumbers ke dalam kolom Tautan.
  • Pilih "Objek JSON" di kolom Kembali.

IMG2


  • Seret node fungsi ke ruang kerja dan hubungkan ke node dari langkah sebelumnya.
  • Tempelkan kode dari contoh ke dalam kolom "Fungsi".

IMG2

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

return msg;

3.4. Memperbarui status pesanan

  • Seret node switch ke ruang kerja dan hubungkan ke node dari langkah sebelumnya.
  • Tambahkan aturan untuk memeriksa. Pilih kondisi "==", dan masukkan "Siap untuk diambil" sebagai nilai.

IMG2


  • Seret node admin-api ke ruang kerja dan hubungkan ke node dari langkah sebelumnya.
  • Pilih "Memperbarui status pesanan yang menjadi milik objek penyimpanan pesanan".
  • Tempelkan kode di bawah ini ke dalam kolom "Parameter kueri".
{
"id": 1,
"orderId": "{{collection.entityId}}"
}
  • Tempelkan kode di bawah ini ke dalam kolom "Body permintaan".
{
"statusIdentifier": "ready_for_pickup"
}

IMG2


  • Seret node debug ke ruang kerja dan hubungkan ke node dari langkah sebelumnya.

IMG2