Pagination
PayMongo returns lists a page at a time. A list() method returns the first page, and the page fetches the next one for you. You never pass a cursor by hand.
Pages
These return a Luigel\Paymongo\Pagination\CursorPage: payments()->list(), refunds()->list(), links()->list(), paymentLinks()->list(), paymentLinks()->payments(), plans()->list(), subscriptions()->list(), webhooks()->list() and disputes()->list().
use Luigel\Paymongo\Facades\Paymongo;
$page = Paymongo::payments()->list(['limit' => 50]); // CursorPage<Payment>
foreach ($page as $payment) {
$payment->id;
}
count($page); // payments on this page
$page->first(); // ?Payment
$page->items; // list<Payment>
$page->hasMore; // bool: is there another page?
$next = $page->nextPage(); // ?CursorPage: requested with after = the last payment's id
- Iterate the page, or read
items, for what is on it. It also hascount(),first()andtoArray(). hasMoresays whether PayMongo has another page.nextPage()requests the next page, and returnsnullon the last one. It repeats your parameters, withafterset to the id of the last item on this page.limitsets the page size. PayMongo returns 10 items when you leave it out; see its List all Payments reference for this and the other parameters each endpoint takes.
Every item on every page
lazy() walks every page as a Laravel LazyCollection, requesting each page only when you reach it, so you can stop early without fetching the rest:
use Luigel\Paymongo\Data\Payment;
use Luigel\Paymongo\Enums\PaymentStatus;
use Luigel\Paymongo\Facades\Paymongo;
// Every payment on every page, fetching the next page only when you reach it.
$collected = Paymongo::payments()->list(['limit' => 100])
->lazy() // LazyCollection<int, Payment>
->filter(fn (Payment $payment): bool => $payment->status === PaymentStatus::Paid)
->sum(fn (Payment $payment): int => $payment->amount ?? 0); // centavos
Walking a long history takes one request per page. Narrow the list with the endpoint's filters where it has them, such as payment_id on refunds.
Payouts
payouts()->list() and payouts()->transactions() return a Luigel\Paymongo\Pagination\CursorTokenPage, because the Payouts API pages with cursor tokens instead of has_more. It iterates, counts, and has first(), nextPage() and lazy() in the same way, and adds:
use Luigel\Paymongo\Facades\Paymongo;
$page = Paymongo::payouts()->list(['limit' => 20]); // CursorTokenPage<Payout>
$page->nextCursor; // ?string, null on the last page
$page->prevCursor; // ?string
$page->meta['total_records'] ?? null; // totals PayMongo sends with the page
$page = $page->nextPage(); // ?CursorTokenPage
nextPage() is null when nextCursor is. See Payouts.
Lists that are not paged
customers()->paymentMethods() returns every item at once, as a plain array.