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

如何在Shopify中创建订单创建Webhook?Node.js开发求助

用Node.js实现Shopify订单创建Webhook

核心步骤概述

要实现订单创建Webhook,你需要完成两个关键部分:搭建可接收Shopify请求的Endpoint,以及通过Shopify API注册Webhook。以下是完整的Node.js示例代码,基于Express框架和官方@shopify/shopify-api包实现。


1. 初始化项目与安装依赖

首先创建项目并安装必要依赖:

npm init -y
npm install express @shopify/shopify-api dotenv

2. 配置环境变量

在项目根目录创建.env文件,填入你的Shopify应用信息:

SHOPIFY_API_KEY=你的应用API密钥
SHOPIFY_API_SECRET=你的应用API密钥密码
SHOPIFY_SHOP_DOMAIN=你的店铺域名.myshopify.com
SHOPIFY_ACCESS_TOKEN=你的店铺访问令牌

访问令牌可通过Shopify OAuth流程获取,或在店铺后台的应用设置中生成测试令牌。

3. 实现Webhook接收Endpoint

创建server.js文件,编写接收并验证Webhook的逻辑:

const express = require('express');
const shopify = require('@shopify/shopify-api');
const dotenv = require('dotenv');

dotenv.config();
const app = express();

// 初始化Shopify API上下文
shopify.Context.initialize({
  API_KEY: process.env.SHOPIFY_API_KEY,
  API_SECRET_KEY: process.env.SHOPIFY_API_SECRET,
  SCOPES: ['read_orders'], // 需包含订单读取权限
  HOST_NAME: process.env.SHOPIFY_SHOP_DOMAIN.replace('https://', ''),
  API_VERSION: shopify.ApiVersion.January24, // 使用最新稳定API版本
  IS_EMBEDDED_APP: false, // 独立应用设为false
});

// 解析请求体并保留原始数据用于签名验证
app.use(express.json({ verify: (req, res, buf) => { req.rawBody = buf; } }));

// 订单创建Webhook的接收端点
app.post('/webhooks/orders/create', async (req, res) => {
  try {
    // 验证Shopify Webhook签名,防止伪造请求
    const isValid = shopify.Webhooks.verify({
      rawBody: req.rawBody,
      authHeader: req.headers['x-shopify-hmac-sha256'],
      domain: req.headers['x-shopify-shop-domain'],
    });

    if (!isValid) {
      return res.status(401).send('Invalid webhook signature');
    }

    // 处理订单数据,这里替换为你的业务逻辑
    const order = req.body;
    console.log(`新订单已创建:订单ID ${order.id},客户邮箱 ${order.email}`);

    // 示例:保存订单到数据库、发送通知等操作

    res.status(200).send('Webhook processed');
  } catch (err) {
    console.error('Webhook处理失败:', err);
    res.status(500).send('Server error');
  }
});

// 启动服务器
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  console.log(`服务器运行在端口 ${PORT}`);
});

4. 注册订单创建Webhook

创建register-webhook.js脚本,用于向Shopify注册Webhook:

const shopify = require('@shopify/shopify-api');
const dotenv = require('dotenv');

dotenv.config();

async function registerOrderWebhook() {
  try {
    // 创建Shopify会话
    const session = new shopify.Session({
      shop: process.env.SHOPIFY_SHOP_DOMAIN,
      accessToken: process.env.SHOPIFY_ACCESS_TOKEN,
    });

    // 注册订单创建Webhook
    const result = await shopify.Webhooks.Registry.register({
      session,
      topic: 'orders/create',
      path: '/webhooks/orders/create',
      webhookHandler: () => console.log('Webhook注册成功,将接收订单创建事件'),
    });

    if (result.success) {
      console.log(`Webhook注册完成,ID:${result.id}`);
    } else {
      console.error('Webhook注册失败:', result.errors);
    }
  } catch (err) {
    console.error('注册过程出错:', err);
  }
}

registerOrderWebhook();

本地开发注意事项

  • 本地服务器无法被Shopify直接访问,需使用ngrok暴露端口:
    ngrok http 3000
    
    把生成的HTTPS地址(如https://abc123.ngrok.io)作为Webhook的基础URL,完整路径为https://abc123.ngrok.io/webhooks/orders/create
  • 确保应用权限包含read_orders或write_orders,否则无法注册订单相关Webhook
  • 签名验证必须实现,否则Shopify会认为端点无效

内容的提问来源于stack exchange,提问作者Tanvir Ahmed Shiddiquee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 19:58:40