Stripe API: Список всех сборов

Я использую https://stripe.com/docs/api?lang=php#list_charges чтобы получить Список всех расходов, но здесь они указывают

count необязательный — по умолчанию 10 Ограничение на количество возвращаемых объектов. Количество может варьироваться от 1 до 100 элементов.

и у меня есть тысячи записей, теперь, как я могу получить все. Хотя, если я установлю count на 100, он вернет 110 записей.


person PHP Ferrari    schedule 25.03.2013    source источник


Ответы (6)


Вы можете использовать аргумент offset.

Как только вы получите 100 транзакций, сделайте еще один вызов, добавив offset=100 в URL.

Это принесет следующие 100 транзакций, затем сделайте offset=200 и так далее.

Обновление: параметр offset частично устарел: Журнал изменений API — 2015– 09–23

person Chirag B    schedule 29.03.2013

$charges = \Stripe\Charge::all();
foreach ($charges->autoPagingIterator() as $charge) {
  // Do something with $charge
}

Справочник.

person sanmai    schedule 24.10.2017

Да, я понял, что с смещением мы можем получить все записи. введите здесь описание изображения

person PHP Ferrari    schedule 05.04.2013
comment
Похоже, вы должны были принять ответ @Chirag - он / она опередил вас на несколько дней! Не могли бы вы отметить их? :) - person halfer; 01.05.2013

Вот пример PHP: \Stripe\Charge::all(array("limit" => 3, "offset" => 10));

Пример Руби: Stripe::Charge.all(limit: 3, offset:3)

Какими бы хорошими ни были документы Stripe API, они могут быть более четкими в отношении того, как фильтровать.

источник: https://stripe.com/docs/api/php#list_charges, https://stripe.com/docs/api/ruby#list_charges

person bigtex777    schedule 27.10.2015

в случае, если смещение устарело

  $result = [];
  $created_at = strtotime($request->end_data);
  //created_at should be today's date epoch. search google for epoch
  $has_more = false;
  $a = 0;
  do{
  print_r($a);
  \Stripe\Stripe::setApiKey(env('STRIPE_SECRET'));
  $temp = \Stripe\BalanceTransaction::all( array(
                'limit'   => 100,
                'created' => array(
                    'lte' => $created_at,
                )
              ));
  $result = array_merge($temp->data,$result);
  $created_at = $temp->data[99]->created_at;
  //api returns a parameter has_more(boolean), which means there is more 
  //data or not so you can also put that in while condition, for ex.
  // $has_more = $temp->has_more;
  $a++;

  }while($a < 5);

  dd($result);

это сработало для меня я смог получить 500 записей одновременно, поскольку $a ‹ 5 API попадает 5 раз, и каждый раз созданный параметр, который является lte (меньше, чем равный), изменяется для каждого запроса API и возврата более ранние записи, чем те, которые предоставляет текущий запрос. также я добавляю результат каждого вызова API в другой массив результатов

person Aditya Tomar    schedule 04.08.2019

К сожалению, вы не можете.

Я вижу, где такая функция была бы удобна для целей бухгалтерского учета или чего-то еще, но, как правило, лучше реализовать какой-либо вид подкачки при отображении пользователю большого количества данных.

Если вам нужен абсолютный контроль над тем, сколько записей должно отображаться одновременно, я бы предложил настроить веб-перехватчик для события charge.succeeded и хранить ваши расходы локально.

person Codasaurus    schedule 25.03.2013