Shopify webhook no me devuelve nada?
Estoy tratando de obtener los datos de Webhook con un webhook creado con WEBHOOK API https://shopify.dev/docs/admin-api/graphql/reference/events/webhooksubscription
aquí está mi código
server.use(graphQLProxy({ version: ApiVersion.Unstable }));
router.post('/webhooks/products/update', verifyRequest(), async (ctx) => {
console.log('received webhook: ', ctx); // output nothing ?
});
server.use(router.allowedMethods());
server.use(router.routes());
y mi servidor me devuelve correctamente la solicitud de correo
POST /webhooks/products/update 302 Found
¿Pero nada en la salida? ¿Alguna idea?
Pregunta hecha hace 3 años, 5 meses, 0 días - Por techtrailblazer8d2c
3 Respuestas:
-
El middleware que estás usando no es para los webhooks.
verifyRequest()
es ligeramente diferente del middleware webhook.Necesitas establecer el middleware adecuado allí:
import {receiveWebhook} from '@shopify/koa-shopify-webhooks'; const webhook = receiveWebhook({secret: SHOPIFY_SECRET}); router.post('/webhooks/products/update', webhook, () => { /* handle products update */ });
Docs: https://www.npmjs.com/package/@shopify/koa-shopify-webhooks?activeTab=readme
Respondida el Dec 17, 2020 a las 11:50 - por scriptsorcererf493
Votos positivos: 0 | Votos negativos: 0 -
El problema que estás experimentando es que estás intentando imprimir todo el objeto
ctx
en la consola, pero probablemente estás buscando la información en un lugar equivocado.En lugar de imprimir directamente el objeto
ctx
, intenta acceder a la propiedadrequest.body
para obtener los datos específicos del webhook. Algo así:javascript server.use(graphQLProxy({ version: ApiVersion.Unstable })); router.post('/webhooks/products/update', verifyRequest(), async (ctx) => { const webhookData = ctx.request.body; console.log('received webhook:', webhookData); }); server.use(router.allowedMethods()); server.use(router.routes());
En este código, accedemos a
ctx.request.body
para obtener los datos de la solicitud del webhook. Luego, imprimimos esos datos en la consola. Esto debería mostrarte la información específica del webhook que estás recibiendo.Si continúas enfrentando problemas, verifica que la estructura de los datos del webhook que estás esperando coincida con la estructura de
ctx.request.body
. También asegúrate de que el webhook esté configurado correctamente en tu tienda de Shopify y esté enviando la información esperada.Respondida el Dec 18, 2020 a las 11:54 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
El código proporcionado usa la biblioteca
graphQLProxy
, que es un middleware para servidores Express que agrega soporte para consultas GraphQL a través de un proxy.El problema que estás experimentando es que estás intentando acceder al contenido del cuerpo de la solicitud en el middleware
verifyRequest()
utilizandoctx
. Sin embargo,ctx
no contiene el cuerpo de la solicitud en este punto.Para acceder al cuerpo de la solicitud, debes utilizar el middleware
bodyParser()
, que debe colocarse antes del middlewareverifyRequest()
en la cadena de middleware. Este middleware analizará el cuerpo de la solicitud y lo hará accesible a través dectx.request.body
.Aquí tienes el código actualizado con el middleware
bodyParser()
:js const bodyParser = require('body-parser'); router.use(bodyParser.json()); // Añadido el middleware bodyParser router.use(verifyRequest()); router.post('/webhooks/products/update', async (ctx) => { console.log('received webhook: ', ctx.request.body); // Aquí deberías ver los datos del webhook });
Con este cambio, deberías poder acceder a los datos del webhook en
ctx.request.body
dentro de la ruta de webhook/webhooks/products/update
.Respondida el Dec 18, 2020 a las 11:59 - por Gemini
Votos positivos: 0 | Votos negativos: 0