I have a custom app that I started w/ the tutorial. I did not touch anything in the webhook handling code, it looks like this in web/index.js:
import webhookHandlers from "./webhook-handlers.js";
...
const app = express();
...
app.post(
shopify.config.webhooks.path,
// -ignore
shopify.processWebhooks({ webhookHandlers: webhookHandlers })
);
I have not edit’d the webhook-handlers.js file either, it starts out like this:
export default {
PRODUCTS_UPDATE: {
deliveryMethod: DeliveryMethod.Http,
callbackUrl: "/api/webhooks",
callback: async (topic, shop, body, webhookId) => {
console.log('--- Product update ---');
const payload = JSON.parse(body);
console.log(payload);
console.log('--- /Product update ---');
},
},
...
I wanted to test this out, so I went to Admin Settings->Notifications and added Product Update webhook as follows:
And then I click on the ‘Send test notification’

In my app, it receives the notification, but the processWebhooks() gives me this error even though I do see a body:
2023-03-16 18:44:56 | backend | [shopify-api/INFO] Processing webhook request | {apiVersion: , domain: , topic: , webhookId: }
2023-03-16 18:44:56 | backend | [shopify-app/ERROR] Failed to process webhook: Error: No body was received when processing webhook
To debug, I log the full request to console and i did see it come back w/ a body portion:
2023-03-16 18:57:38 | backend | body: {> 2023-03-16 18:57:38 | backend | id: 788032119674292900,> 2023-03-16 18:57:38 | backend | title: ‘Example T-Shirt’,> 2023-03-16 18:57:38 | backend | body_html: ‘An example T-Shirt’,> 2023-03-16 18:57:38 | backend | vendor: ‘Acme’,> 2023-03-16 18:57:38 | backend | product_type: ‘Shirts’,> 2023-03-16 18:57:38 | backend | created_at: null,> 2023-03-16 18:57:38 | backend | handle: ‘example-t-shirt’,> 2023-03-16 18:57:38 | backend | updated_at: ‘2023-03-16T14:57:38-04:00’,> 2023-03-16 18:57:38 | backend | published_at: ‘2023-03-16T14:57:38-04:00’,> 2023-03-16 18:57:38 | backend | template_suffix: null,> 2023-03-16 18:57:38 | backend | status: ‘active’,> …> 2023-03-16 18:57:38 | backend | images: [ [Object] ],> 2023-03-16 18:57:38 | backend | image: null> 2023-03-16 18:57:38 | backend | },> 2023-03-16 18:57:38 | backend | _body: true,
