Shopify Admin GraphQL 为什么查不到客户订阅合同?
结论
如果这些订阅合同是由 Shopify Subscriptions APP 创建的,自定义 APP 通常无法通过 Admin GraphQL 查询到它们。subscriptionContracts 的查询范围取决于合同归属和 APP 的访问权限。客户信息可以查到,但 nodes 为空,可能是因为这些合同不属于当前 APP。
Shopify Admin GraphQL API 要求具备 read_own_subscription_contracts 或 write_own_subscription_contracts 权限。这里的 own 指由当前 APP 管理的合同。Shopify 开发者社区也说明,订阅合同归创建它的 APP 所有,其他 APP 即使拥有订阅相关权限,也无法读取这些合同或接收其合同 Webhook。Shopify 订阅合同文档;Shopify 开发者社区说明
先检查 API 权限
如果合同确实由当前自定义 APP 创建,请检查安装授权是否包含以下 Admin API 权限:
- 查询客户:
read_customers - 查询本 APP 创建的订阅合同:
read_own_subscription_contracts
修改权限配置后,确保店铺重新授权了 APP,再用同一客户 ID 查询。权限不足时通常会出现 GraphQL 错误。若请求成功但连接为空,也请确认合同是否由其他订阅 APP 创建。Shopify 只允许 APP 读取其自身的 SubscriptionContract 记录。API access scopes
Shopify Subscriptions 创建的合同怎么办?
如果合同由 Shopify Subscriptions 或其他第三方订阅 APP 创建,为自定义 APP 增加 read_own_subscription_contracts 权限仍无法读取这些合同。可以考虑以下方案:
- 使用创建合同的订阅 APP 提供的 API 或集成能力。 确认它是否支持查询订阅状态,或能否将状态同步到你的系统。
- 检查该 APP 是否提供状态变更通知。 让订阅 APP 将续订、暂停、取消等事件同步到你的服务端,再根据客户身份维护状态。Shopify 的合同 Webhook 也受合同归属限制,自定义 APP 无法直接接收另一个 APP 创建的合同事件。
- 若由你自己的 APP 创建并管理合同, 使用该 APP 获得授权的 Admin GraphQL API 查询合同,并根据
status判断是否符合业务规则。
Customer Account API 同样受合同归属限制。customer_read_own_subscription_contracts 权限只允许读取属于当前 APP 的合同,因此切换到 Customer Account API 也无法读取 Shopify Subscriptions 创建的合同。Customer API access scopes
为什么订单记录不能直接替代合同状态
订单中包含订阅商品,只能说明客户曾有相关购买记录,无法证明订阅目前仍处于 active 状态。若要据此决定是否允许客户使用服务,应从创建或管理订阅合同的 APP 获取当前状态,或通过该 APP 支持的同步机制维护状态。
备注:内容仅供参考。
