求助:如何使用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
相关产品推荐
相关产品推荐

