附录
Lemonsqueezy 计费场景支持和常见问题

Lemonsqueezy 是国内独立开发出海比较常用的收款产品。相比 Stripe 来说,Lemonsqueezy 的开通门槛可谓是非常的低,风控也没那么严格,所以被很多国内独立开发者选择。当然如果你有条件的话,我建议还是使用 Stripe ,因为 Lemonsqueezy 在产品能力和稳定性上确实做的不太好。

这篇分享会列举一下较常见的收款、支付、计费、营销方式是否被 Lemonsqueezy 支持,特别是哪些地方和我们看文档所设想的不同。此外也会分享一些我们在使用 Lemonsqueezy 的过程中遇到的问题和解决方法。

⚠️ 需要注意的是目前 Lemonsqueezy 不支持国内用户的支付。用户反馈无法使用支付宝、微信付款,或者在使用信用卡支付时地址如果填写 China 也无法付款。如果你的主要客群是国内用户,需要考虑 Lemonsqueezy 是否适合。

收款

Lemonsqueezy 支持多种收款方式和支付方式。

  • 订阅制收款,即每个周期自动扣款。Lemonsqueezy 支持日、周、月、年粒度的扣费周期。我们常用的一般就是月度订阅和年度订阅。Lemonsqueezy 支持在一个订阅制产品下创建多个不同的变体(可以理解为不同 Plan),赋予不同的价格。用户可以在这些变体间快速切换,Lemonsqueezy 会负责计算价差并在下个扣费时间点抹平价差
  • 一次性收款。Lemonsqueezy 也支持非订阅制的交易,只会按当前交易扣款一次。我们在两个场景使用了一次性收款:出售额外转录次数;通过支付宝/微信支付出售一次性会员权益。

支付方式:

  • 信用卡 - 最常用的支付方式,常见的发卡方例如 Visa 、Mastercard 、AE 、Discover 、DC 、JCB 等都支持,也支持 UnionPay(银联)。但实际尝试发现国内发行的单币信用卡很多都不能完成支付
  • Google Pay / Apple Pay - 仅在对应浏览器中打开支付界面时会出现。Google Pay 仅在 Chrome 中支持,Apple Pay 仅在 Safari 中支持。支持订阅制。
  • PayPal - 支付订阅制。
  • 支付宝 / 微信支付 - 仅在一次性收款的情况下支持,订阅制不支持。之前 Lemonsqueezy 曾短暂在订阅制付款界面下透出了支付宝 / 微信支付的支付方式但实际不可用,后重新被隐藏。截止成文为止目前还不支持支付宝 / 微信支付的订阅制收款。
  • Bank debits - 不太了解这种支付方式,但在马来西亚等地区比较流行。
  • 其它一些支付 App 或数字钱包 - 视付款者所在地区不同,可能出现不同的选项。

Lemonsqueezy 会尽可能展示所有可用的支付方式给用户。这些支付方式中,目前仅信用卡、Apple Pay 、Google Pay 和 PayPal 支持订阅制收款。

计费

  • 固定价格 - 这是最基础的方式,不论一次性收款还是订阅制收款都支持这种定价。
  • 初始化费用 - 在订阅制收款下,除了每个订阅周期的订阅费之外,Lemonsqueezy 允许你设置一个初始化费用(setup fee)。这是一笔一次性的费用,会在首次订阅时收取。假如你的服务在用户首次开通时有额外成本(例如你需要指派一位培训专员为用户进行培训)而你想要向用户透出这部分成本,你就可以考虑启用 setup fee 。
  • 用户自选价格 - 类似 sponsor 的模式,由用户在下单时自己选择价格。不过你可以设置最低价格和建议价格。我们非常建议设置一个合理的最低价格,因为 Lemonsqueezy 会为每一笔交易扣除固定的手续费。
  • 按量计费 - 仅订阅制收款支持按量计费的模式。我们将用户的使用量通过 API 发送给 Lemonsqueezy ,然后 Lemonsqueezy 提供了好几种方式将用户实际用量映射到最终要支付的价格上。
    • 标准价(Standard pricing):就是普通的单价。消耗多少用量就以用量乘以单价计算得到最终用户会被收取的费用。
    • 打包价(Package pricing):价格不以单个用量决定,而是按需要消耗多少个 Package 来决定。换个说法就是不单卖,你要买就得整件的(山姆会员店?)。比如你定价 $10 per 10 units ,虽然看起来每 1 unit 价格是 $1 ,但用户最终只会被按 $10 的整数倍 charge 。用户用量是 1-10 ,被收取 $10 。用户用量为 11-20 ,则被收取 $20 。
    • 批量定价(Volume pricing):这是一种分层定价策略,根据总用量所处的区间来决定最终单价,从而决定最终价格。例如我们可以设置 1-100 用量时单价为 $2 ,101-∞ 用量时单价为 $1 。则当用户最终使用 90 用量时会被收取 90 * $2 = $180 ,而如果用户最终用量为 200 ,则会被收取 200 * $1 = $200 。很多场景都可以适用这个定价模式,例如你提供按坐席收费的 SaaS 服务。
    • 分级定价(Graduated pricing):这是一种阶梯式的定价策略。和批量定价类似的地方是分级定价也为不同用量区间设置不同的单价。而和批量定价不同的地方则是分级定价采用累进的方式计算。我们沿用批量定价中的例子,当用户最终用量为 200 时,分级定价最终的计算方式是 100 * $2 + (200 - 100) * $1 = $300 。拿我们生活中的例子来讲的话,就类似个税的计算方式。可以看到分级定价比批量定价会更加合理,不会出现在临界点上用量更多反而收费更少的情况。

注:一次性付款模式下也支持 Standard pricing 和 Package pricing ,但一次性付款属于事前支付,与订阅制收款需要发送用量给 Lemonsqueezy 并事后收款的逻辑不同。

营销

  • 试用期:Lemonsqueezy 支持为订阅制收款设置免费试用时长。用户在下单订阅时仍然需要输入有效的支付方式但不会马上被扣款,而是在免费时长用完后才会被扣款。在 Lemonsqueezy 发送给我们平台的回调中会指明该订阅当前状态为试用,你可以以此为依据来控制用户的权限范围。
  • 联盟佣金(Affiliate):联盟佣金就是一种推广购买返佣的营销方式。Lemonsqueezy 支持整个联盟佣金流程。推广者可以直接通过 Lemonsqueezy 申请参与 Affiliate 计划,并在你批准后获得一个链接。经由该链接达成的成交会从你的收入中分润一定比例给推广者。
  • 折扣码:可设置比例折扣或固定金额折扣,还有起止时间和适用产品范围。此外还可以设置可供兑换的次数,以及对订阅制收款是否连续生效,生效多少次。当折扣设置为 100% 时,也可以用做发放免费试用资格。
  • 线索收集:Lemonsqueezy 支持一种免费的订单形式,称为 Lead magnet 。用户仍然需要正常走完订购流程,你的平台也会收到订单回调。但用户无需付费,仅需提供邮箱地址。这种方式和提供免费试用期不同,并不收集支付信息,所以无法产生后续付款。
  • 邮件营销:由于 Lemonsqueezy 在收款时会收集用户的邮件地址,因此可以做一些邮件营销的动作。除了基础的账单、订单通知邮件,Lemonsqueezy 还会自动帮你发送召回邮件。例如当用户付款失败、续费时支付方式失效、进入支付界面后却放弃了支付时。此外你也可以手动创建邮件广播,向所有你的付费用户发送邮件。

在营销上玩法上,这些海外产品都相对比较”朴素“,没有国内那么多花样。

我们的使用场景

  • 连续订阅 我们将月付和年付做成了两个不同的 Products ,分别在里面设置了 Standard 和 Pro 两个 Variants 。这样的做法用户可以分别在月付和年付的情况下在 Standard Plan 和 Pro Plan 间切换,但是无法在月付和年付之间切换。 虽然把月付和年付做成一个 Product 中的不同 Variants 是可以让用户直接进行切换的,但这会带来一些比较复杂的情况,而且也不是我们所期望的所以没有做。主要原因在于年付本身就是一种预付打折模式,如果用户可以在享受更加优惠的年付价格一段时间后就切换成月付,然后取消订阅并不是我们希望发生的情况。同时对于有月付切换年付需求的用户,仅需取消月付订阅,等待当前月付到期后重新订阅年付即可。 当然从更好体验的角度出发,最好是能支持月付向年付的切换同时禁用年付向月付的切换。但 Lemonsqueezy 不支持这样的配置,你需要自己编写额外的逻辑来进行处理。

  • 一次性会员资格 为了获取国内没有双币信用卡的客户,我们希望支持支付宝 / 微信支付的付款方式。由于 Lemonsqueezy 订阅制收款的时候并不支持支付宝 / 微信支付,因此我们做了一个一次性会员资格的 Product ,购买后一次性开通一定时间的会员资格。这里需要注意的是,订阅制的订单是有生命周期的,Lemonsqueezy 会通过回调向我们的平台更新状态,我们就可以依赖这个回调来更新用户的会员资格是否有效。但一次性购买的订单是没有过期这样的生命周期的,就需要我们自己来监控用户会员资格的失效。

  • 额外额度包 这也是一个一次性购买的 Product ,在用户成功购买后我们会为用户增加对应数量的永不过期的转录配额,但仅能在会员订阅有效期内使用,会员失效后会被冻结。值得一提的是在 Lemonsqueezy 的官方文档中,order_create 的回调中并不包含购买数量的字段,但实际是包含的,所以是支持一次性购买多份的。

不支持或不完全支持的场景

我们在做 Podwise 的过程中设想过一些场景,最后发现 Lemonsqueezy 的现有能力并不能支持。甚至有部分在我们邮件询问 Lemonsqueezy 官方得到可以支持的答复,并写完实现代码后,才发现和我们想的并不一样。在这里分享出来也能避免大家踩到一样的坑。

  • 赠送订阅时长 - 不完全支持 我们最初设想了一个邀请新用户送订阅时长的机制,希望促进用户的自发传播。在我们的设计中,当被邀请用户注册并订阅后,将会赠送被邀请用户和邀请者每人各半个月的订阅时长。尽管 Lemonsqueezy 没有赠送订阅时长的 API ,但有一个暂停订阅的 API(非取消订阅)。我们在向 Lemonsqueezy 官方邮件询问后也得到了这个暂停订阅的 API 可以暂停订阅计费的答复,于是开始着手实现这个功能。可最后我们发现它和我们想的并不一样。 简单来说就是暂停功能并不会按暂停的时间对应的推迟下个账单日,或者计算差价后在下个账单日减少收款金额。暂停功能的真实工作方式是:如果这个订阅到达账单日时处于暂停状态,则这次账单就直接跳过不收钱。也就是说它可以一定程度上起到赠送订阅时长的作用,但仅能赠送当前订阅周期的整数倍。这和我们最初的设想完全不同,例如我们无法做到仅赠送半个月时长,或者我们无法为年订用户赠送不足一年的订阅时长。也许你可以通过自己存储赠送时长,并在用户当前订阅周期快结束时,组合暂停、改变账单日、恢复等 API 做到这件事情,但它无疑会非常复杂且容易出现问题。我们最后放弃了这个机制并下线了这部分代码。

  • 每月固定订阅费用 + 按量计费 - 支持但和设想不同 有机构用户反馈即便 Pro Plan 提供的转录配额也不够他们使用,因此我们就考虑能否在现在每月固定订阅费用的基础上叠加一个对超出配额部分按量计费的方式。在仔细研究了 Lemonsqueezy 提供的计费模型后,发现与我们设想的并不相同。 Lemonsqueezy 在订阅制的分级定价(Graduated pricing)模式下是支持这种方式的。这个定价模式支持为每一级用量单独设置单价和保底价格(Flat fee)。假设我们的 Pro Plan 的订阅费为 $19 ,提供的配额为 50 次,超出的次数每次额外收费 $0.3 。那我们只需要按如下方式设置分级定价即可满足我们的需求:第一级范围 0-50 ,单价 $0 ,保底价 $19 ;第二级范围 51-∞ ,单价 $0.3 ,保底价 $0 。 与我们设想并不相同的部分是收款的时间点。一般订阅是前置收款的,也就是当新的订阅周期开始时,就先对用户进行了扣款。而分级定价属于按量计费(usage-based billing)模式,它是后置收款的,是在一个订阅周期结束后按实际用量再对用户扣款。这个方式在月订的情况下不是大问题,但是在年订情况下会是一个非常大的问题。等于你要在整整一年后才能收到包含固定订阅费用和额外用量费用的第一笔钱,账期很长,风险也很大。 理想的方式是基础订阅采用前置收款,然后不论基础订阅是月订还是年订,额外用量都按月计算扣款。如果想做到这种方式,一种可行的办法就是让用户订阅两次。第一次订阅普通的 Pro Plan ,如果不够用,则再订阅一个 Flat fee 为 0 的 Graduated pricing 的月订产品。我们的平台在向 Lemonsqueezy 发送用户用量时,先行扣除包含在 Pro Plan 中的免费额度。 不过我们最终这两个方案都没选,而是选择了出售额外的额度包。

  • 退款同时关闭订阅 - 需部分自行处理 我们可以在 Lemonsqueezy 的控制台为用户进行退款操作。当为用户成功退款后,用户订阅的会员资格应该不再可用。Lemonsqueezy 对此的逻辑是:如果该订阅仅有一次付款,则会失效整个订阅,如果该订阅已经有多次付款,退款其中一次,订阅仍然会继续有效。同时在 Lemonsqueezy 的控制台中仅支持取消订阅(取消订阅的意思是取消连续付款,下个账单日不再续费,并不会即时使订阅失效),不支持关闭/过期订阅。因此我们需要自行接收 subscription_payment_refund 事件的回调并处理会员资格问题。

  • 部分退款 - 不支持 有时候因为一些特殊情况,用户已经不符合退款政策但我们仍然需要为他退款。此时我们会更希望按照用户的实际使用情况仅部分退款。但 Lemonsqueezy 仅能整单退款,无法做到自定义退款金额进行部分退款。没有 workaround ,只能和用户沟通让用户通过另外的方式支付差额。

遇到过的问题和解决

  • 产品突然变成免费 非常离谱的一个问题。有个用户向我们反馈订阅付费时显示免费,我去检查后发现不论你如何修改产品的定价模式,最终呈现给用户的效果都是 Lead magnet 的效果,也就是仅需输入邮箱即可完成购买流程。多方尝试无果后,不得已将出现问题的产品隐藏并创建了新产品,同时修改了平台代码。随后联系了 Lemonsqueezy 的 support 途径,最终在好几天后收到了他们内部数据出现问题的答复。

  • 回调时不携带 custom data 这个问题我们遇到过不止一次。为了将 Lemonsqueezy 那边的购买行为和我们平台自己的用户关联起来,我们一般都会在发起支付的时候把 userId 塞给 Lemonsqueezy 作为 custom data ,以便在回调的时候拿到 userId 。但有好几次 Lemonsqueezy 给到的回调中 custom data 失踪了,同时我们也没有开启独立商店,用户仅能通过我们平台的入口进行购买和支付。这个问题造成的原因未知,我们的解决方法是用订单中用户的邮箱地址再查一次 userId 。但这不是一个足够安全的解决方案,因为用户在支付时使用的邮箱可能和在你平台注册时使用的不相同。更好的解决方案是做一个对账程序,每天将你的数据和 Lemonsqueezy 这边的数据进行对账,找出问题数据。

  • 回调丢失 遇到过两次应该来的回调没触发,结果用户会员状态不正确的问题。除了对账之外没有好的解决办法。

如何联系 Lemonsqueezy 的 support ?

这个入口藏的比较深。首先从 Header 或 Footer 中找到 Help / Help Center ,进入后点击页面中间的 form 右下角的 Get help 按钮,选择 Contact Support 提交表单。或者你也可以选择 Slack 按钮加入 Lemonsqueezy 的 Slack 频道进行沟通。