检索订阅条带node.js的状态

2022-02-25 00:00:00 node.js javascript stripe-payments

我有这个:

 const customers = await stripe.customers.list({
    email: 'contact@Inderatech.com',
  });

  var customerID = customers.data[0].id;


  const subscriptions = await stripe.subscriptions.list({
    customer: customerID
  });

console.log(subscriptions)
  console.log(subscriptions.data[0].status)
它应该做的是检索订户的customerid,然后尝试转到下一个函数,根据customerid检索订阅的status。这不管用。它说了两件事。

  1. 它只输出:

    {object:‘list’,data:[],has_more:false,url:‘/v1/SUBSCRIPTIONS’}

  2. (node:30746) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'status' of undefined

我知道这是假的,因为当我这样记录它时:

console.log(subscriptions)
它返回超过30行的Subsribers数据,包括活动状态。如下所示:

{
      id: 'sub_id',
      object: 'subscription',
      application_fee_percent: null,
      automatic_tax: [Object],
      billing_cycle_anchor: 1617410065,
      billing_thresholds: null,
      cancel_at: null,
      cancel_at_period_end: false,
      canceled_at: null,
      collection_method: 'charge_automatically',
      created: 1617410065,
      current_period_end: 1635899665,
      current_period_start: 1633221265,
      customer: 'cus_JEQIfxhiRu7qJh',
      days_until_due: null,
      default_payment_method: 'pm_1IbxRUIPT89VeZtCxyEA8SMu',
      default_source: null,
      default_tax_rates: [],
      discount: null,
      ended_at: null,
      items: [Object],
      latest_invoice: 'in_1JgIfuIPT89VeZtC2jsKCHRp',
      livemode: false,
      metadata: {},
      next_pending_invoice_item_invoice: null,
      pause_collection: null,
      payment_settings: [Object],
      pending_invoice_item_interval: null,
      pending_setup_intent: null,
      pending_update: null,
      plan: [Object],
      quantity: 1,
      schedule: null,
      start_date: 1617410065,
      status: 'active',
      tax_percent: null,
      transfer_data: null,
      trial_end: null,
      trial_start: null
    },

如何从此访问状态或任何其他参数?

编辑 为更清楚起见,我将显示以下内容:

执行此操作时:

    const subscriptions = await stripe.subscriptions.list({
  });

  console.log(subscriptions)

它返回整个大输出(如上所示)。

当我执行此操作时:

    const subscriptions = await stripe.subscriptions.list({
    customer: customerID
  });

  console.log(subscriptions)

它只显示以下内容:

{ object: 'list', data: [], has_more: false, url: '/v1/subscriptions' }

当我尝试记录customerid比较的订阅状态时,我发现状态不是返回数据的一部分。


解决方案

该错误消息与您所说得到的输出一致。如果列表调用没有返回任何订阅,subscriptions.data[0]将是未定义的,因此没有要获取status的对象。因为您没有使用customer过滤的呼叫会正确返回订阅,所以只要您传入的客户有未取消的订阅(subscriptions.list默认情况下只返回未取消的订阅[1]),与过滤的呼叫就会正常工作。

听起来这可能是因为您正在筛选的特定客户ID造成的。如果您尝试在没有过滤的情况下列出订阅时看到的客户ID之一(如cus_JEQIfxhiRu7qJh),您的代码可以工作吗?对于您在第一个示例中列出的客户,我会在仪表板中仔细检查该客户的页面,看看他们是否有应该由该列表调用返回的未取消订阅。

[1]https://stripe.com/docs/api/subscriptions/list

相关文章