You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:如何使用Shopify Cli 3新模板实现APP_UNINSTALLED webhook?

解决Shopify CLI 3 Node模板创建APP_UNINSTALLED Webhook的问题

核心问题说明

APP_UNINSTALLED 不属于GDPR类webhook,放在gdpr.js里不会被正确注册,需要单独处理注册逻辑,通常在应用授权完成后触发注册。

具体实现步骤

1. 编写Webhook处理路由

在项目的routes目录下新建webhooks.js,添加APP_UNINSTALLED的处理逻辑:

import { Shopify } from "@shopify/shopify-api";

export default function applyWebhookRoutes(app) {
  // 处理APP_UNINSTALLED事件
  app.post("/api/webhooks/app_uninstalled", async (req, res) => {
    try {
      const session = await Shopify.Utils.loadCurrentSession(req, res, true);
      const shop = session.shop;

      // 这里添加你的业务逻辑:比如删除店铺相关数据、清理资源等
      console.log(`店铺 ${shop} 已卸载应用`);

      res.status(200).send("OK");
    } catch (error) {
      console.error("处理APP_UNINSTALLED webhook失败:", error);
      res.status(500).send("Error");
    }
  });
}

2. 在主文件中注册路由

修改项目根目录的server.js(或index.js),引入并应用上述路由:

import express from "express";
import applyWebhookRoutes from "./routes/webhooks.js";
// 其他必要的导入...

const app = express();

// 先初始化Shopify相关配置(模板自带的代码)
// ...

// 应用webhook路由
applyWebhookRoutes(app);

// 其他路由启动逻辑...
app.listen(PORT, () => {
  console.log(`Server running on port ${PORT}`);
});

3. 授权完成后注册Webhook

在授权流程的回调中(通常在auth/callback路由里),添加注册APP_UNINSTALLED webhook的代码:

// 找到处理auth callback的路由(比如在routes/auth.js里)
app.get("/auth/callback", async (req, res) => {
  try {
    const callbackResponse = await Shopify.Auth.validateAuthCallback(
      req,
      res,
      req.query
    );

    const { session } = callbackResponse;

    // 注册APP_UNINSTALLED webhook
    await Shopify.Webhooks.Registry.register({
      shop: session.shop,
      accessToken: session.accessToken,
      topic: "APP_UNINSTALLED",
      path: "/api/webhooks/app_uninstalled",
    });

    console.log("APP_UNINSTALLED webhook注册成功");

    // 模板自带的后续逻辑,比如跳转到首页
    res.redirect(`/`);
  } catch (error) {
    console.error("授权或webhook注册失败:", error);
    res.status(500).send(error.message);
  }
});

4. 验证与测试

  • 本地开发时必须用ngrok暴露HTTPS端口,Shopify不允许HTTP的webhook地址
  • 完成授权后,登录Shopify后台,进入设置->通知->应用通知,查看是否存在APP_UNINSTALLED的webhook
  • 测试卸载应用,查看服务器日志是否收到事件

注意事项

  • Webhook的path必须和注册时的path完全一致
  • 处理webhook时必须返回200状态码,否则Shopify会重复发送事件

内容的提问来源于stack exchange,提问作者Shahamar Rahman Himel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 20:35:28