如何通过GraphiQL按referralCode或utmParameters过滤Shopify订单?
我正在开发一款Shopify应用,需从后端查询Shopify店铺的订单,以检测由我方站点引流产生的订单。我在引导用户进入的初始页面使用了utm参数,该参数已正确传递至订单完成环节,可在订单的customerJourney中获取这些utm参数。
目前的难题是,我仅希望获取与我方相关的订单,因为获取店铺全部订单会引发数据泄露问题。请问能否通过GraphiQL的过滤功能实现这一需求?若不能,有哪些替代方案可以实现该目标?
我尝试了如下查询,但似乎无法正常过滤。除utm参数外,我也可使用referralCode,但过滤问题仍存在……
{ orders( first: 100 query: "created_at:>='2024-02-21' AND customerJourney.moments.utmParameters.source:test_keyword" reverse: true ) { edges { node { name id createdAt channelInformation { id } currentTotalPriceSet { presentmentMoney { amount } } customer { id } customerJourneySummary { firstVisit { landingPage } lastVisit { landingPage } } customerJourney { moments { ... on CustomerVisit { utmParameters { source campaign content medium term } } } } } } } }
解决方案
1. 当前查询无效的原因
Shopify Orders API的查询语法不支持对customerJourney.moments.utmParameters这类深层嵌套字段直接过滤,你写的查询条件不符合API规则,所以无法生效。
2. 可行的替代方案
方案一:用referral_code直接过滤(优先选择)
如果你的引流链路能设置referral_code,直接用这个字段过滤是最高效的方式,因为Shopify支持对订单的referral_code做索引查询:
{ orders( first: 100 query: "created_at:>='2024-02-21' AND referral_code:'YOUR_UNIQUE_REFERRAL_CODE'" reverse: true ) { name id createdAt # 保留你需要的其他字段 } }
这种方式只会返回匹配的订单,不会泄露无关数据,性能最优。
方案二:批量拉取后本地过滤
如果无法使用referral_code,只能先拉取指定时间范围内的订单(尽量缩小时间窗口,比如按天拉取),然后在你的应用后端对订单的customerJourney.moments.utmParameters进行本地校验:
- 每次拉取控制在100条以内,避免触发API限流
- 只留存包含目标utm参数的订单,直接丢弃其他数据
方案三:用Webhooks实时捕获目标订单
配置Shopify的订单创建/更新Webhook,当有新订单生成时,Shopify会主动把订单数据推送到你的应用接口。你可以在接收逻辑里直接检查utm参数或referral_code,只保留符合条件的订单:
- 这是最安全高效的方案,完全避免了主动查询所有订单的需求
- 注意配置Webhook时要开启签名验证,确保数据来源可靠,防止伪造请求
内容的提问来源于stack exchange,提问作者Doug

