跳至主要内容

处理计划变更

升级或降级 GitHub Marketplace 应用会触发 marketplace_purchase 事件 Webhook,其中包含 changed 操作,这将启动升级或降级流程。

注意: 本文仅适用于在 GitHub Marketplace 上发布应用。有关在 GitHub Marketplace 上发布 GitHub Actions 的更多信息,请参阅“在 GitHub Marketplace 上发布操作”。

有关与计费相关的升级和降级更多信息,请参阅“在您的应用中使用 GitHub Marketplace API”。

步骤 1. 定价计划变更事件

当客户对其 GitHub Marketplace 订单进行以下任何更改时,GitHub 会向您的应用发送带有 changed 操作的 marketplace_purchase webhook

  • 升级到更昂贵的定价计划或降级到更低价格的计划。
  • 在现有计划中添加或删除席位。
  • 更改计费周期。

更改生效时,GitHub 会发送 webhook。例如,当客户降级计划时,GitHub 会在客户计费周期结束时发送 webhook。当客户升级其计划时,GitHub 会立即向您的应用发送 webhook,以便他们立即获得新服务的访问权限。如果客户从每月计费周期切换到每年计费周期,则会被视为升级。请参阅“向客户计费”以了解有关哪些操作被视为升级或降级的更多信息。

marketplace_purchase webhook 中读取 effective_datemarketplace_purchaseprevious_marketplace_purchase,以更新计划的开始日期并更改客户的计费周期和定价计划。请参阅“GitHub Marketplace API 的 webhook 事件”以获取 marketplace_purchase 事件有效负载的示例。

如果您的应用提供免费试用,当免费试用期到期时,您将收到带有 changed 操作的 marketplace_purchase webhook。如果客户的免费试用期到期,请将客户升级到免费试用计划的付费版本。

步骤 2. 更新客户帐户

您需要更新客户的帐户信息,以反映客户对其 GitHub Marketplace 订单所做的计费周期和定价计划更改。当您收到 changed 操作 Webhook 时,在您的 Marketplace 应用网站或应用 UI 上显示定价计划升级、seat_count(对于按单位定价计划)和计费周期。

当客户降级计划时,建议您查看客户是否已超出其计划限制,并在您的 UI 中直接与他们互动,或通过电话或电子邮件与他们联系。

为了鼓励人们升级,您可以在应用的 UI 中显示升级 URL。有关更多详细信息,请参阅“关于升级 URL”。

注意:我们建议使用 GET /marketplace_listing/plans/:id/accounts 定期进行同步,以确保您的应用拥有每个帐户的正确计划、计费周期信息和单位数量(对于按单位定价)。

升级付款失败

如果客户升级其计划但付款失败,GitHub 会将其 GitHub Marketplace 订阅恢复到之前的状态。GitHub 还会向客户发送电子邮件,告知他们失败并允许他们重新尝试购买。您将收到带有 changed 操作的 Webhook,要求您恢复到之前的计划。

关于升级 URL

您可以使用升级 URL 将用户从应用的 UI 重定向到 GitHub 上进行升级。

https://www.github.com/marketplace/<LISTING_NAME>/upgrade/<LISTING_PLAN_NUMBER>/<CUSTOMER_ACCOUNT_ID>

例如,如果您注意到客户使用的是 5 人计划,需要升级到 10 人计划,您可以在应用的 UI 中显示一个按钮,上面写着“如何升级”,或者显示一个带有升级 URL 链接的横幅。升级 URL 会将客户带到您的清单计划的升级确认页面。

使用 LISTING_PLAN_NUMBER 表示客户想要购买的计划。当您创建新的定价计划时,它们会收到一个 LISTING_PLAN_NUMBER,该号码在您的清单中对每个计划都是唯一的,以及一个 LISTING_PLAN_ID,该号码在 GitHub Marketplace 中对每个计划都是唯一的。您可以在 列出计划 时找到这些号码,这些号码标识了您的清单的定价计划。使用 LISTING_PLAN_ID 和 "GET /marketplace_listing/plans/{plan_id}/accounts" 端点获取 CUSTOMER_ACCOUNT_ID

注意:如果您的客户升级到更多单位(例如席位),您仍然可以将他们发送到适合其购买的计划,但我们目前无法支持 unit_count 参数。