如何模拟订阅的过期状态

Posted

技术标签:

【中文标题】如何模拟订阅的过期状态【英文标题】:How to simulate Past-Due status on Subscription 【发布时间】:2013-07-14 01:21:29 【问题描述】:

我在 cron 上设置了一个 php 脚本,该脚本通过 API 联系 Braintree 以查找我们存档的每个订阅的状态。然后,我们会根据客户的订阅状态更新我们的本地记录。因为我可以从 Braintree 控制面板手动取消订阅,所以我能够测试我的脚本是否可以检测到取消的订阅。

但是,除了等待结算周期结束之外,我找不到任何方法来测试逾期状态。因为 Braintree 中一个计费周期的最小长度是一个月,这使得调试我的脚本变得非常困难。

我知道理论上我应该只看到订阅状态的不同字符串,但我正在寻找一种可重现的方法来模拟逾期状态,以及 daysPastDue 的正余额和值。

谁能帮忙?

$BT_subscription = Braintree_Subscription::find($BT_subscription_id);
if ($BT_subscription && $BT_subscription instanceof Braintree_Subscription) 
    if ($BT_subscription->status == 'Past Due' && $BT_subscription->balance > 0) 
        // ...

【问题讨论】:

【参考方案1】:

我从 Braintree 支持部门收到了以下关于此问题的回复:

因为我们的沙盒环境旨在复制我们的生产环境,所以无法强制订阅过期。然而,这里有一些解决方法可能会使这个测试更容易:

要在沙盒中将订阅置于过期状态,您可以创建一个试用期为 1 天且价格为 2000 美元的订阅。然后,当一天的试用期到期时,它会触发一个由于美元金额而失败的交易创建。

Test Amounts for Unsuccessful Transactions 的 2000 美元价格标签可能会触发信用卡支付失败。我已经设置了一个测试,如果测试不成功,我会编辑它。

【讨论】:

我真的很喜欢布伦特里,但不得不这样做真是太可惜了,坦率地说,相当令人惊讶。 @agf 自原始帖子以来有任何新工具吗? 所以 Braintree 希望他们的开发人员编写一些代码来处理取消事件,运行它,然后等待一天看看它是否有效?这是一种构建集成的可悲方式。 @agf 这是 Braintree 支持提供的测试建议。 更不用说这不允许我测试我的实际计划、实际价格和没有试用期。 这只是为了测试订阅生命周期和他们的 webhook 的大量时间。也许提供更改订阅的试用到期的能力是不可行的,但即使您记录了 webhook 请求以查看测试环境中的其他测试订阅,或者提供模拟 API 来传递合法的 webhook 请求(不是假的准系统请求) 将是一个巨大的帮助。我知道大多数限制来自 PayPal API 本身,但肯定有办法为开发人员加快/解决这个问题?【参考方案2】:

添加 Tyler V 的响应,不幸的是,这仍然是测试它的唯一方法。

来自支持:

感谢您与我们联系,感谢您的耐心等待。使用沙盒 帐户,您可以模拟结果的最短时间将是 1天。使用以下示例创建逾期状态:

创建一个试用期为 1 天且价格为 2000 美元的计划 创建一个客户 使用信用卡 使用该计划创建新订阅,然后 客户第一次充电尝试将在 1 天后(当试用 expires) 并且将失败自动重试将在 +10 和 +20 订阅到期的天数请参阅以下页面 用于沙盒测试值。我建议您创建很多 一次使用这些,因此您可以使用多个;否则 您必须等待一天才能让他们创建的每个新产品进入 逾期。

【讨论】:

【参考方案3】:

@Tyler V.

创建新订阅时,您可以将 first_billing_date 设置为提前一天 您应该启用 Webhook、存储消息并使用 postman 重播它。

【讨论】:

以上是关于如何模拟订阅的过期状态的主要内容,如果未能解决你的问题,请参考以下文章

已退款的应用内购买订阅是不是显示为已过期? [关闭]

SQLServer 订阅过期解决方法

如何查看 PayPal 过期订阅

如果设备订阅过期,如何停止发送通知 - GCM PushSharp

检查自动更新订阅是不是过期

如何在 React 和 Flask 中检测过期的 PayPal 订阅?