Как исправить ошибку 403 «запрещено», когда shopify webhook отправляет почтовый запрос на мой серверный узел nodejs? - PullRequest
0 голосов
/ 23 сентября 2019

Я беру последний урок официального руководства по созданию приложения Shopify с NodeJs и ReactJS.Последний урок о Webhooks и как настроить.Я настроил конечную точку отдыха на своем внутреннем сервере для webhook, как описано, но остальная конечная точка не срабатывает.NgRok выдает ошибку 403 «Запрещено» каждый раз, когда я отправляю запрос на конечную точку отдыха.

Это приложение будет использоваться в качестве примера.Я проверил ссылки на стороне Shopify, которые отправляют запросы на сервер.Я также пытался использовать коа-корс, но также тот же результат.

app.prepare().then(() => {
    const server = new Koa();
    server.use(session(server));
    server.keys = [SHOPIFY_API_SECRET_KEY];

    server.use(
        createShopifyAuth({
            apiKey: SHOPIFY_API_KEY,
            secret: SHOPIFY_API_SECRET_KEY,
            scopes: ['read_products', 'write_products'],
            async afterAuth(ctx) {
                const { shop, accessToken } = ctx.session;
                ctx.cookies.set('shopOrigin', shop, {httpOnly: false});

                const pcreate = await registerWebhook({
                    address: `${HOST}/webhooks/products/create`,
                    topic: 'PRODUCTS_CREATE',
                    accessToken,
                    shop
                });

                console.log(pcreate.success);

                ctx.redirect('/');
            }
        })
    )

    const webhook = receiveWebhook({secret: SHOPIFY_API_SECRET_KEY});

    router.post('/webhooks/products/create', webhook, (ctx) => {
        console.log('a product has been created', ctx.state.webhook);
    })

    server.use(graphqlProxy({version: ApiVersion.July19}));
    router.get('*', verifyRequest(), async (ctx) => {
        await handle(ctx.req, ctx.res);
        ctx.respond = false;
        ctx.res.statusCode = 200;
    })
    server
        .use(router.routes())
        .use(router.allowedMethods());

    server.listen(port, () => {
        console.log(`> Ready on https://localhost:${port}`);
    })
})

Здесь весь сценарий: https://pastebin.com/ZTqKM9bM

Я ожидаю получить сообщение, когда webhook отправляетзапрос до конечной точки, но это ничего не делает.NgRok возвращает ошибку 403 «запрещено».

...