получение статуса полосы подписки node.js

#javascript #node.js #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 данные подписчика, затем я пытаюсь перейти к следующей функции и извлекать status из subscription на основе customerid. Это не работает. это говорит о 2 вещах.

  1. он просто выводит:

    { объект: ‘список’, данные: [], has_more: false, url: ‘/v1/подписки’ }

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

который, я знаю, является ложным, потому что, когда я просто регистрирую его вот так:

 console.log(subscriptions)
 

он возвращает более 30 строк данных подписчиков, включая активный статус. вот так:

 {
      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 , я понимаю, что статус не является частью возвращаемых данных.

Комментарии:

1. Какова структура объекта подписки?

2. @damnedOperator только что добавил это выше

3. вторая ошибка из console.log(subscriptions.data[0].status) -за отсутствия поля данных

4. @cmgchess проблема в том, что есть поле состояния, но не тогда, когда я указываю идентификатор пользователя. но мне это нужно, потому что нет другого способа получить определенную запись для подписчика без использования идентификатора подписки, которого у меня нет. поэтому мне нужно использовать идентификатор клиента, чтобы найти определенную запись, а затем найти статус этой записи.

5. является ли ваш customerID cus_JEQIfxhiRu7qJh

Ответ №1:

Итак, если опубликованный вами результат — это все, что вы получили от stripe API, тогда правильным способом доступа к полю статуса было бы просто использовать

 console.log(subscriptions[0].status);
 

Комментарии:

1. должно быть (subscriptions.status)

2. Остерегайтесь запятой в конце его примера схемы. Это указывает на то, что выдержка была извлечена из массива…. Мои ставки на массив

3. @damnedOperator спасибо за ваш ответ. Я только что внес правку в свой пост внизу, пожалуйста, посмотрите его. Это более подробно объясняет, в чем проблема и что происходит. Не уверен, почему это происходит, но это так.

Ответ №2:

Это сообщение об ошибке совпадает с выводом, который, по вашим словам, вы получаете. Если вызов списка не возвращает никаких подписок, subscriptions.data[0] будет неопределенным, поэтому нет объекта для получения status . Поскольку ваш вызов без customer фильтра правильно возвращает подписки, вызов с фильтром должен работать до тех пор, пока у переданного вами клиента есть подписки, которые не были отменены ( subscriptions.list по умолчанию возвращаются только не отмененные подписки [1]).

Похоже, это может происходить из-за конкретного идентификатора клиента, по которому вы фильтруете. Если вы попробуете использовать один из идентификаторов клиентов, которые вы видите при составлении списка подписок без фильтра (например cus_JEQIfxhiRu7qJh ), работает ли ваш код? Для клиента, которого вы указали в своем первом примере, я бы дважды проверил страницу этого клиента на вашей панели мониторинга, чтобы узнать, есть ли у него не отмененные подписки, которые должны быть возвращены этим вызовом списка.

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