提问者:小点点

对Shopify将客户发送到您指定的“应用程序URL”的情况感到困惑


我已经为使用node.js的人开发了几个Shopify定制应用程序,老实说,这是一个反复试验的过程。经过反复试验,我得到了以下代码:

/* GET home page. */
router.get('/', adminMiddleware, function (req, res, next) {
    const shop = req.query.shop;

    if (req.query.session) {
        // if we're here, that means the app was clicked on in the shopify admin panel
        return res.send({hello: 'world'});
    }

    if (shop) {
        // if we're here, that means this is install initialization
        const state = nonce();
        const redirectUri = forwardingAddress + '/shopify/callback';
        const installUrl = 'https://' + shop +
            '/admin/oauth/authorize?client_id=' + apiKey +
            '&scope=' + scopes +
            '&state=' + state +
            '&redirect_uri=' + redirectUri;

        res.cookie('state', state);
        res.redirect(installUrl);
    } else {
        return res.status(400).send('Missing shop parameter. Please add ?shop=your-development-shop.myshopify.com to your request');
    }
});

因此,根据我的尝试和错误(我对此完全没有信心),我将在以下两种情况下最终进入我的Shopify路线的根目录(如Shopify partner dashboard上的应用程序URL设置中所定义):

>

  • 当有人安装应用程序时,在这种情况下,我希望在查询参数中有一个shop,或者

    当有人在Shopify商店的管理面板中点击我的应用程序时,会出现req。查询会话variable set,如果愿意,我可以使用一些html css进行响应(示例仅显示了一个简单的JSON响应)。

    但是是这样吗?这是Shopify将使用我的根路径的两种情况吗?并且正在检查req。查询采购要求。查询会话区分这两种情况的正确方法?我不确定我是否正确处理了这件事。


  • 共1个答案

    匿名用户

    我不是这方面的专家,但我背后有一些应用程序,我也在使用nodejs,所以如果我所知道的可以帮助你,请随意。

    首先,我建议在此处使用shopify cli设置https://shopify.github.io/shopify-app-cli/它提供了一个StutoApp应用StAltKEIT,它写在NeXJS和Node(它使用的是膝关节炎,它包含了一个包含图形的QuQL和一些其他的预处理的东西),这为您提供了所有的AuthTealMead。我使用的是自定义Express,但因为支持了一个重要的AuthExpress包被丢弃,我切换到膝关节炎,然后在他们的设置。所以是的,我的建议是配合他们的设置。

    至于你的问题,这实际上取决于你的路线上配置了什么。

    shopify可以发送一些不同的请求,具体取决于您的应用程序类型(自定义或公共)以及您是否有代理。

    以下是您可能收到的所有请求(或我曾经处理过的请求):

    • 初始安装-此请求包括几个endpoint,一个用于URL生成,一个用于回调验证
    • 输入应用程序-我不确定这个请求是否可以排除会话,当前设置已经配置了会话,所以我假设可能不包括它
    • 代理请求-如果您在应用仪表板中设置了代理,并且这是最终路由
    • 网络钩子请求-如果你注册了一个网络钩子,这是你的终点
    • GDPR网络钩子-这些是从仪表板配置的,是公共应用程序所必需的(但它们的工作方式类似于网络钩子)

    这真的取决于你的应用程序是如何配置的,你可以在同一个路由上拥有所有5个请求(这是一个坏主意),或者如果你甚至不需要应用程序的仪表板,你可以拥有一个请求。

    请记住,如果您不想处理此问题,可以将安装和主页分为不同的路径,只需将应用程序仪表板中的初始“主页”页面设置为不同的页面即可。

    如果您正在与Koa合作,我认为这个包将有助于您更https://www.npmjs.com/package/@shop ify/koa-shop ify-auth,因为它得到了Shopify的支持。

    此外,我没有看到您处理<代码>商店>代码>查询PARAM,这可能会导致XSS攻击在您的身边,请考虑在将其输出到安装URL之前对其进行消毒。

    因此,在最后考虑使用StaskKIT,因为以后更容易为公共应用程序提供支持,因为他们对公共应用程序有严格的审查过程,当有需要修复的问题或需要添加的功能时,更容易引用他们的社区论坛。