求助:通过Shopify应用创建在线商店自定义页面失败问题
Shopify应用安装时创建页面问题解决方案
核心问题说明
- Shopify不存在
APP_INSTALLATION主题的Webhook,应用安装完成的触发点应使用授权回调路由(/auth/callback),这是安装流程的最后一步,此时已获取有效店铺会话。 - 用
APP_UNINSTALLEDWebhook测试会失败,因为卸载后应用已失去店铺访问权限,无法调用Admin API创建页面。 - 创建页面的代码中,
save({update: true})参数错误,该参数用于更新已有页面,创建新页面时不需要设置。
修复步骤
1. 调整安装触发逻辑(使用授权回调)
在index.js的授权回调路由中添加页面创建逻辑(Shopify CLI生成的模板默认包含该路由):
// index.js 中找到授权回调路由,添加页面创建代码 app.get("/auth/callback", async (req, res) => { try { const callbackResponse = await shopify.auth.callback({ rawRequest: req, rawResponse: res, }); const { session } = callbackResponse; await shopify.sessionStorage.storeSession(session); // 调用创建页面的函数 await createNewPageUponInstall(session); res.redirect(`/`); } catch (error) { console.error("Auth callback error:", error); res.sendStatus(500); } });
2. 修复页面创建函数的save参数
修改createNewPageUponInstall函数,移除update: true参数:
async function createNewPageUponInstall(session) { const newPage = new shopify.api.rest.Page({session: session}); newPage.title = "Dynamic App Page"; newPage.body_html = "<p>This is a new page</p>"; // 创建新页面不需要update参数,直接调用save await newPage.save(); }
3. 清理无效的测试配置(可选)
如果不需要卸载相关逻辑,删除gdpr.js中APP_UNINSTALLED的页面创建关联,仅保留日志记录即可:
// gdpr.js 中修改APP_UNINSTALLED配置 APP_UNINSTALLED: { deliveryMethod: DeliveryMethod.Http, callbackUrl: "/api/webhooks/app-uninstalled", callback: async (topic, shop, body, webhookId) => { const payload = JSON.parse(body); console.log("App uninstalled for shop:", shop, payload); }, }
同时在index.js中对应路由仅处理响应:
app.post("/api/webhooks/app-uninstalled", async (_req, res) => { console.log("Received app uninstall webhook"); res.sendStatus(200); });
测试验证
- 重启应用后,重新安装到测试店铺。
- 安装完成后,进入店铺后台的在线商店->页面,检查是否存在标题为
Dynamic App Page的新页面。
内容的提问来源于stack exchange,提问作者user9793623
相关产品推荐
相关产品推荐

