新手求助:Node.js环境下配置Shopify上架所需GDPR强制Webhooks
Shopify GDPR 强制Webhooks Node.js 实现方案
1. customers/data-request Webhook
该事件触发于用户申请导出个人数据,你需要返回应用中存储的该用户所有个人信息,必须返回200状态码,否则Shopify会重试请求。
实现代码(Express为例)
const express = require('express'); const crypto = require('crypto'); const app = express(); app.use(express.json()); // Webhook签名验证中间件(必加,防止恶意请求) const verifyShopifyWebhook = (req, res, next) => { const hmac = req.headers['x-shopify-hmac-sha256']; const secret = process.env.SHOPIFY_APP_SECRET; const hash = crypto.createHmac('sha256', secret) .update(JSON.stringify(req.body), 'utf8') .digest('base64'); hash === hmac ? next() : res.sendStatus(403); }; // 处理用户数据请求 app.post('/webhooks/customers/data-request', verifyShopifyWebhook, async (req, res) => { const customerId = req.body.customer.id; // 替换为你的实际数据库查询逻辑,获取用户在应用中的所有数据 const userData = await yourDB.query('SELECT * FROM user_data WHERE customer_id = ?', [customerId]); // 返回结构化的用户数据,格式不限但需包含所有个人信息 res.status(200).json(userData); }); app.listen(3000, () => console.log('Webhook server running on port 3000'));
注意事项
- 必须返回完整的用户个人数据,包括任何存储的偏好、交易记录、联系方式等
- 签名验证不可省略,否则Shopify会拒绝你的Webhook配置
2. customers/redact Webhook
该事件触发于用户申请删除个人数据,你需要彻底清除应用中存储的该用户所有个人信息,返回200状态码即可,无需返回数据。
实现代码
// 处理用户数据删除请求 app.post('/webhooks/customers/redact', verifyShopifyWebhook, async (req, res) => { const customerId = req.body.customer.id; // 替换为你的实际数据删除逻辑,包括数据库、缓存、日志中的相关数据 await yourDB.query('DELETE FROM user_data WHERE customer_id = ?', [customerId]); await yourCache.del(`user:${customerId}`); // 返回200确认删除完成 res.sendStatus(200); });
注意事项
- 确保删除所有关联数据,包括第三方服务中存储的用户信息(如邮件营销工具)
- 操作需保证幂等性,重复触发不会导致异常
3. shop/redact Webhook
该事件触发于商店关闭或移除你的应用,你需要清除该商店下所有用户的相关数据,返回200状态码即可。
实现代码
// 处理商店数据删除请求 app.post('/webhooks/shop/redact', verifyShopifyWebhook, async (req, res) => { const shopDomain = req.body.shop.domain; // 替换为你的实际数据删除逻辑,根据商店域名清除所有关联数据 await yourDB.query('DELETE FROM user_data WHERE shop_domain = ?', [shopDomain]); await yourCache.del(`shop:${shopDomain}:*`); res.sendStatus(200); });
注意事项
- 用商店域名作为唯一标识,确保不会误删其他商店的数据
- 如果有定时任务或异步处理,需同步停止该商店的相关任务
配置与验证步骤
- 在Shopify Partner后台进入你的应用,到「应用设置」->「Webhooks」
- 分别创建三个GDPR事件的Webhook,填写你的公网可访问的端点URL(本地开发可用ngrok暴露端口)
- 选择请求格式为JSON,保存后Shopify会发送测试请求,确保你的服务器返回200
- 应用密钥从Partner后台获取,存到环境变量中,不要硬编码
内容的提问来源于stack exchange,提问作者Prathamesh Rawool
相关产品推荐
相关产品推荐

