Issue Changing Order Status From Unfulfilled To Fulfilled Via API

93 Views Asked by At

I hope you're all doing well. I'm currently working on an integration and facing challenges changing the order status of Shopify orders from "Unfulfilled" to "Fulfilled" using the Shopify API with node.js. I've referred to the API documentation and am seeking additional guidance as I'm encountering issues with my approach.

Here is my current approach:

I make a POST request to /admin/api/2024-01/orders/{order_id}/fulfillments.json. In the request body, I include:

const fulfillmentData = {
  message: null,
  notify_customer: true,
  tracking_info: {
    number: trackingNumber,
    url: `https://company/EU/en/parcel-tracking?match=${trackingNumber}`,
    company: "company"
  },
  line_items: currentOrder.line_items.map(lineItem => ({
    id: lineItem.id,
    quantity: lineItem.quantity,
  })),
  location_id: locationId
};

However, I'm receiving error responses, specifically:

Request failed with status code 400 { errors: { fulfillment: 'Required parameter missing or invalid' } }

I would greatly appreciate any guidance, code examples, or additional details that can help me resolve this issue.

Thank you in advance!

1

There are 1 best solutions below

0
Raul VT On

The solution that finally worked for me was using the shopify-api-node library. Here is the code that resolved my issue:

const fulfillmentDetails = await shopify.order.fulfillmentOrders(orderId);
const fulfillmentOrderId = fulfillmentDetails[0].id;
const fulfillmentLineitemIds = fulfillmentDetails[0].line_items.map(item => ({
    id: item.id,
    quantity: item.quantity
}));

const updateParams = {
    line_items_by_fulfillment_order: [
        {
            fulfillment_order_id: fulfillmentOrderId,
            fulfillment_order_line_items: fulfillmentLineitemIds
        }
    ],
    tracking_info: {
        number: trackingNumber,
        url: `https://company.eu/EU/en/parcel-tracking?match=${trackingNumber}`,
        company: 'company'
    },
    notify_customer: true,
    origin_address: null,
    message: 'Delivery status: ' + trackingNumber
};

const updateFulfillment = await shopify.fulfillment.createV2(updateParams);