PHP Ferrari
PHP Ferrari

Reputation: 15616

Stripe API: List all Charges

I am using https://stripe.com/docs/api?lang=php#list_charges to get List all Charges but here they specify

count optional — default is 10 A limit on the number of objects to be returned. Count can range between 1 and 100 items.

and I have thousands of entries, now how can I get all. Though if I set count to 100 it returns 110 records.

Upvotes: 0

Views: 9907

Answers (6)

Chirag B
Chirag B

Reputation: 2126

You can use the offset argument.

Once you get the 100 transactions, then make another call by adding offset=100 in URL.

This will bring the next 100 transactions, then make offset=200 and so on.

Update: offset parameter is partly deprecated: API changelog - 2015-09-23

Upvotes: 20

Aditya Tomar
Aditya Tomar

Reputation: 890

in case offset is deprecated

  $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);

this worked for me i was able to get 500 records at once as $a < 5 the api hits 5 times and each time created parameter which is lte (less than equal) changes for each api request and return previous records than current request provide. also i am appending the result of each api call to another result array

Upvotes: 0

sanmai
sanmai

Reputation: 30881

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

Reference.

Upvotes: 4

bigtex777
bigtex777

Reputation: 1240

Here's a PHP example: \Stripe\Charge::all(array("limit" => 3, "offset" => 10));

A Ruby example: Stripe::Charge.all(limit: 3, offset:3)

As good as the Stripe API docs are, they could be clearer on how to filter.

source: https://stripe.com/docs/api/php#list_charges, https://stripe.com/docs/api/ruby#list_charges

Upvotes: 0

PHP Ferrari
PHP Ferrari

Reputation: 15616

Yes I got it with offset we can get all records. enter image description here

Upvotes: -1

Codasaurus
Codasaurus

Reputation: 860

Unfortunately you can't.

I can see where such a feature would be nice for accounting purposes or whatever, but it's generally a better user experience to implement some sort of paging when displaying copious amounts of data to the user.

If you need absolute control over how many records to display at a time, I would suggest setting up a webhook on the charge.succeeded event and store your charges locally.

Upvotes: -5

Related Questions