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

使用Shopify Billing开发应用:如何判断订阅是否已扣费?

解决方案:区分已扣费与未扣费的取消订阅

方法1:利用REST API的RecurringApplicationCharge的activated_on字段

你提到的activated_on字段完全可以作为已扣费的核心标识:

  • 当订阅成功完成首次扣费(试用期结束后),activated_on会被Shopify赋值为具体的日期时间;
  • 若客户在试用期内取消/卸载应用,activated_on会保持null。

调用示例(以Ruby为例):

# 获取目标店铺的所有循环应用收费记录
charges = ShopifyAPI::RecurringApplicationCharge.all
charges.each do |charge|
  if charge.activated_on.present?
    # 该订阅已完成扣费
  else
    # 未扣费(试用期内取消)
  end
end

方法2:使用GraphQL API查询订阅的交易/计费记录

如果偏好GraphQL方案,可以通过查询订阅的交易记录或计费尝试来判断是否有成功扣费:

query getSubscriptionDetails($subscriptionId: ID!) {
  appSubscription(id: $subscriptionId) {
    id
    status
    transactions(first: 10) {
      edges {
        node {
          amount
          status
          processedAt
        }
      }
    }
    billingAttempts(first: 10) {
      edges {
        node {
          status
          processedAt
        }
      }
    }
  }
}
  • 检查transactions中是否存在status: SUCCESSFUL的条目,或billingAttempts中是否有status: SUCCEEDED的记录,这两种情况都说明订阅已完成至少一次扣费。

方法3:结合Webhook与本地状态记录

为了避免API查询延迟,建议在应用数据库中维护订阅的本地状态:

  • 订阅创建时,记录试用期结束时间;
  • 收到Shopify的app_subscription_activated webhook(扣费成功触发)时,标记该订阅为「已扣费」;
  • 收到app_uninstalled webhook时,先查本地记录:若标记为已扣费则不降级账号;若未标记且已过试用期,再通过API验证是否有成功扣费记录。

注意事项

  • REST API的RecurringApplicationCharge仅适配旧版订阅模型,若使用新版AppSubscription GraphQL,优先采用GraphQL交易查询方法;
  • 确保应用拥有read_own_subscriptions、write_own_subscriptions等必要权限;
  • 处理卸载事件时,切勿仅依赖appSubscription的status: CANCELLED,必须结合扣费记录判断是否降级账号。

内容的提问来源于stack exchange,提问作者Viet Nguyen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 04:24:57