PuppyIP 资源中心
跨境电商开发 6 分钟 发布于 2026-10-13

Shopify用量上限不是充值:预付点数包怎样与按量计费共存?

设置cappedAmount不会给商家充值,也不会生成点数余额。Shopify官方人员在10月13日说明:预付包可由Manual Pricing的一次性购买承接,点数由应用自己管理,包外用量再单独计费。动手前先确认应用使用哪一种定价方式。

Shopify Billing API Manual Pricing 预付点数 用量上限

服务对象与地域限制

PuppyIP 仅面向海外合规企业及其授权人员提供服务,不面向中国大陆地区开放或提供代理服务。本服务仅限用于中国大陆境外的合法业务活动,严禁在中国大陆境内使用本服务。

代理 IP 或服务器位于境外,不改变上述限制。不得通过中转、转接、共享或转售向中国大陆境内的最终使用者提供本服务。使用前请阅读用户服务协议。

本文要点

  • Manual Pricing的cappedAmount限制30天账单周期内的用量收费;达到上限会阻止继续创建用量费用,不代表商家已经预付。
  • 点数包与按量收费可以共存:一次性购买获批准并由服务端核实后发点数,先消耗点数,只记录未被包覆盖的用量费用。
  • Shopify App Pricing当前不支持一次性购买和用量上限,也不能套用Manual Pricing的Billing API写入与订阅Webhook流程。
  • EUR不必改成USD,但用量记录币种应与父订阅上限一致;提高现有上限需要商家批准,Webhook和退款仍须对账。

上限限制的是费用,不是可用点数

10月13日,Shopify开发者社区的Shopify Staff Donal-Shopify回应了预付商品优化包与按量计费的问题。官方说明与用量订阅文档一致:cappedAmount是30天账单周期内可收取的最高用量费用,不会提前收款或创建余额。

例如,假设应用设定20欧元用量上限。这表示该周期用量费用最多计到20欧元,不表示商家已经买到100次操作。20欧元和100次只是社区提问者的假设套餐,不是Shopify统一价格。

达到上限后,继续创建用量费用会被阻止,直至下一周期或完成合适的上限调整。应用应清楚提示商家当前费用与可执行操作;不能把收费受阻解释为已经产生新的预付点数。

先确认应用使用哪一种定价方式

Manual Pricing由应用通过Billing API管理收费。官方人员给出的组合是:用appPurchaseOneTimeCreate销售一次性点数包,用用量订阅承接包外操作;点数余额和消耗由应用维护,Shopify没有为这个组合创建原生点数钱包。

Shopify App Pricing则由Shopify托管套餐选择页,应用通过App Events API报告适用用量。当前文档明确不支持一次性购买和用量上限;加入该方式后,Billing API计费写入会被阻止。不要把下文Manual Pricing的cap或Webhook流程直接搬过去。

新公开应用在定价模型受支持时默认使用Shopify App Pricing。社区尚未回答未上线应用能否从该方式切回Manual Pricing,以及是否影响提交或审核;需要点数包的团队应向Shopify核实自己的切换条件,不能把这篇说明当成审核批准。

一次性购买和包外用量分开记账

第一步,在Manual Pricing下为一次性点数包创建购买请求,并让商家完成批准。商家回到应用后,在服务端查询并核实购买状态,再按已经说明的套餐规则发放点数;仅看到返回页面不足以发放。

第二步,另建用量订阅,写清terms、用量价格与cappedAmount,让商家批准。随后创建费用时,使用该订阅返回的AppSubscriptionLineItem.id,不要混用一次性购买的ID。

第三步,每次操作先检查并消耗应用自己的点数;只有未被点数包覆盖的部分,才通过appUsageRecordCreate记录用量费用。应用账本应把购买、点数变化和收费记录关联起来,避免同一次操作既扣点又全额收费。

假设商家购买100次优化,后来完成105次:前100次消耗包内点数,剩余5次按已批准的用量规则计费。这是流程示例,点数是否过期、失败操作是否扣点和包外单价仍由应用明确说明,不由cappedAmount替你决定。

EUR可以使用,但别拿店面币种代替应用账单币种

在针对Admin GraphQL API 2026-07的后续回复中,Donal-Shopify表示一次性购买price和用量cappedAmount支持EUR,appUsageRecordCreate的currencyCode须与父订阅上限币种一致,一个订阅使用一种币种。

这条回复还建议用shopBillingPreferences查看商家的应用计费币种,而不是店面展示币种。先核实应用账单偏好与已批准订阅,再提交相同币种的用量记录;店面标价为欧元并不自动证明当前应用订阅也用欧元。

提高现有上限,要等商家批准后再收费

2026-07的appSubscriptionLineItemUpdate参考说明,可以用现有用量订阅行ID和新的cappedAmount请求调整上限,无需仅为此创建新订阅。mutation会返回confirmationUrl,供商家批准或拒绝。

先检查userErrors,再把商家引导到confirmationUrl。更高上限在批准前不会生效;批准后从服务端重读对应订阅行,确认新上限已生效,才继续记录原来受限的费用。接口返回成功不能替代商家批准。

Webhook用于同步,不能当作保证到账的凭证

Manual Pricing可以关注APP_SUBSCRIPTIONS_UPDATE、APP_PURCHASES_ONE_TIME_UPDATE和APP_SUBSCRIPTIONS_APPROACHING_CAPPED_AMOUNT。最后一个在用量达到或超过上限90%时通知,适合提前提醒,而不是直到收费失败才告诉商家。

接收HTTPS通知时,先用原始请求体验证HMAC,再按X-Shopify-Webhook-Id处理重复投递。官方文档说明,失败HTTPS投递会在之后4小时内重试8次,但不保证通知一定送达,也不保证同一主题或不同主题的顺序。应用应通过API定期对账。

以上属于Billing API流程。Shopify App Pricing当前不通过这些Webhook通知订阅变化,应结合跳转参数与Partner API查询状态;历史事件用于追踪变化,当前是否有有效订阅则应查询activeSubscription。

退款先核金额和购买,再调整点数

官方人员建议通过Partner API核对一次性包的退款。2026-07 Historical Events文档列出EARNING_REFUND,并在Earning事件中提供chargeId、grossAmount和netAmount等字段,可用于对应原购买与退款金额。

该历史事件功能须为组织启用,API客户端需要Manage apps权限。记录查询区间并翻完游标分页;历史回填事件还可能要用metadata.legacyChargeId关联原账单。先确认实际退款及对应购买,再按应用点数规则调整,不假定每笔退款都应自动扣回整包点数。

这里没有给退款到账时限、点数有效期或应用审核结果作保证。开发团队可先在授权的开发店验证购买批准、点数耗尽、达到上限、拒绝加额、重复通知与退款对账;本文未创建收费、修改商家套餐或执行退款。

资料来源

常见问题

同一商家能同时有点数包和用量订阅吗?

Shopify官方人员明确说明,Manual Pricing下可以同时使用一次性购买和用量订阅。应用先消耗自己的点数余额,再记录包外费用;这个组合不适用于已加入Shopify App Pricing的一次性购买。

给Webhook回复200,是否代表点数已经处理完成?

200响应只是接收确认。点数发放和收费状态仍要由应用核实、持久化并对账;通知可能重复、乱序或缺失,不应把接收响应当作购买状态。

历史事件查询没带日期,会返回全部退款吗?

不会。2026-07文档说明,未给起止日期时默认返回最近30天;最大查询区间为365天,每页最多250条。查旧购买时应明确区间并完成分页,空结果或权限错误不能证明没有退款。

这些规则只适用于美国商家吗?

本文是Shopify应用计费模式及指定API文档的说明,来源没有将它限定为美国站规则。币种、商家批准、应用定价方式和Partner API权限应逐项核实;英文或EUR示例不能代替账户资格判断。