Php 如何模拟订阅的过期状态

Php 如何模拟订阅的过期状态,php,subscriptions,braintree,Php,Subscriptions,Braintree,我已经在一个cron上设置了一个PHP脚本,它通过API与Braintree联系,以查找文件中每个订阅的状态。然后,我们根据客户的订阅状态更新本地记录。因为我可以从Braintree控制面板手动取消订阅,所以我已经能够测试我的脚本是否可以检测到取消的订阅 然而,我找不到任何方法来测试过期状态,除了等待计费周期循环。因为Braintree中计费周期的最小长度是一个月,这使得调试我的脚本非常困难 我知道理论上我应该看到订阅状态的不同字符串,但我正在寻找一种可复制的方法来模拟过期状态,以及daysPa

我已经在一个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) {
        // ...

关于这个问题,我从Braintree支持部门得到了以下回复:

因为我们的沙盒环境是为了复制我们的生产环境,所以没有办法强制订阅过期。但是,这里有一些工作可以让测试更容易:

要将订阅置于沙箱中的过期状态,可以创建试用期为一天、价格为2000美元的订阅。然后,当为期一天的试用期到期时,它将触发一个事务创建,该事务创建将由于美元金额而失败


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

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

来自支持:

感谢您伸出援手,并感谢您的耐心。使用沙箱 帐户,您可以模拟结果的最短时间将为 一天。使用以下示例创建过期状态:

创建一个为期一天的试用计划和2000美元的价格创建一个客户 使用信用卡,使用计划和 客户第一次尝试充电将在1天后进行(试用时 过期)并将失败。自动重试将在+10和+20 订阅过期天数请参见下页 用于沙盒测试值。我建议你创造很多 在同一时间,你可以使用多个;否则 你必须等一天,等待他们创建的每一个新项目进入 过期的

@泰勒五世

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

    • 一个小时后,我找到了一种方法:

    • 附加一个收费失败的已接受付款方式:
      4000000000000341
    • 创建启用试用版的付费订阅
    • 从控制台或订阅将属性
      trial\u设置为
      now
      的任何位置进行更新

    • 我真的很喜欢Braintree,但不得不这么做真的很糟糕,坦率地说,相当令人惊讶@agf自最初的post?以来有没有新的工具?因此braintree希望他们的开发人员编写一些代码来处理取消事件,运行它,然后等一天看看它是否有效?这是一种令人悲哀的集成方式。@agf这是Braintree支持部门提供的用于测试此功能的建议。更不用说,这不允许我以实际价格测试我的实际计划,而且没有试用期。仅仅测试订阅生命周期和他们的Webhook,这是一段很长的时间。也许提供更改订阅试用期的功能是不可行的,但是即使您记录了webhook请求以查看测试环境中的其他测试订阅,或者提供了模拟API来传递合法的webhook请求(而不是伪造的裸体请求),也会有很大的帮助。我知道大多数限制来自PayPal API本身,但对于开发人员来说,确实有办法加快/解决这个问题吗?