Stripe payments 如何从Stripe中检索非活动(已取消)订阅

Stripe payments 如何从Stripe中检索非活动(已取消)订阅,stripe-payments,stripe.net,Stripe Payments,Stripe.net,我想确认客户订阅已被取消。仅指返回“活动”订阅。如何获取所有订阅的列表 列表订阅 您可以看到客户的活动订阅列表 GET https://api.stripe.com/v1/customers/{CUSTOMER_ID}/subscriptions 检索客户的订阅 默认情况下,您可以直接在customer对象上查看存储在客户上的10个最新活动订阅,但也可以检索客户特定活动订阅的详细信息 GET https://api.stripe.com/v1/customers/{CUSTOMER_ID}/s

我想确认客户订阅已被取消。仅指返回“活动”订阅。如何获取所有订阅的列表

列表订阅 您可以看到客户的活动订阅列表

GET https://api.stripe.com/v1/customers/{CUSTOMER_ID}/subscriptions
检索客户的订阅 默认情况下,您可以直接在customer对象上查看存储在客户上的10个最新活动订阅,但也可以检索客户特定活动订阅的详细信息

GET https://api.stripe.com/v1/customers/{CUSTOMER_ID}/subscriptions/{SUBSCRIPTION_ID}

很抱歉这里的混乱!条带仅返回活动订阅;API不会返回已取消的。但是,通过在webhook URL中查看该事件,您将知道订阅已被取消。而且,如果取消请求是由您的站点发出的(而不是由于支付失败而自动取消),如果该请求失败,我们将抛出一个异常

希望有帮助, 拉里


PS我在Stripe从事支持工作

自2016年6月7日API更新起:

现在,您可以在列出订阅时指定status=cancelled或status=all来查看已取消的订阅。此外,您现在可以通过其ID检索已取消的订阅

因此,如果您使用的是ruby API,您应该能够获取取消的订阅,如下所示:

Stripe::Subscription.all(status: 'canceled')
Stripe::Subscription.all(status: 'all')
并按照上面的要求获取所有订阅的列表,如下所示:

Stripe::Subscription.all(status: 'canceled')
Stripe::Subscription.all(status: 'all')
对于PHP:

require_once('stripe/init.php');

\Stripe\Stripe::setApiKey(YOUR_STRIPE_SECRETKEY);

// Retrieve the request's body and parse it as JSON
$input = @file_get_contents("php://input");
$event_json = json_decode($input);

if($event_json->type=='customer.subscription.deleted')
{
    $stripe_customerid = $event_json->data->object->customer; // cus_123456
    $customer = \Stripe\Customer::retrieve($stripe_customerid);
    $usermail = $customer->email;
    // ...
}
取消订阅后,将关闭最近未支付的发票,不再生成其他发票。在之前的charge.failed和invoice.payment\u failed事件之后,将触发customer.subscription.deleted事件。如果customer.subscription.deleted事件的请求属性为null,则可以看到订阅已自动取消,而不是由您的请求取消


这似乎是一个糟糕的设计-如果我们直接通过ID查询取消的订阅,我们至少应该能够通过API检索它们。在Python库中,返回的异常是:
stripe.error.InvalidRequestError
。有一个更明确的异常,比如
stripe.error.canceledsubscription
,会更有帮助。我相信这在2016年不再是事实。请参阅:。当使用“取消”或“全部”作为状态时,仍会获得此“无效状态:必须是试用、活动、过期或未付”状态。我们的大多数代码使用较旧版本的API,因此我们的条带帐户仍设置为该版本,因此要在较新的项目中使用较新版本,我必须使用条带。setApiVersion(versionString)在能够获得取消的订阅之前呼叫。参考: