Skip to content

Instantly share code, notes, and snippets.

@murilohns
Last active October 22, 2019 18:14
Show Gist options
  • Save murilohns/39b0cd6fb1c03b771651df92fbc2e6d8 to your computer and use it in GitHub Desktop.
Save murilohns/39b0cd6fb1c03b771651df92fbc2e6d8 to your computer and use it in GitHub Desktop.
instructions use count and page params in GET requests

Introdução

O Pagar.me passará a limitar o valor máximo que pode ser enviado no parâmetro count para buscas na API. Para que o impacto seja o menor possível, essa documentação descreverá como fazer essa migração em diversas linguagens de programação.

O parâmetro count representa a quantidade de registros que será retornado em uma consulta, enquanto o parâmetro page diz qual página da consulta está sendo retornada.

Por exemplo, se o parâmetro count=10 for utilizado em conjunto com o parâmetro page=2, os registros retornados serão respectivos à 11º posição até a 20º posição. Já, se os parâmetros forem utilizados como: count=20 e page=2, os registros retornados serão respectivos à 21º posição até a 40º posição.

Atualmente, não há limite para utilizar parâmetro count, mas a partir de 22/11/2019, o limite será 1000.

Migrando para paginação

Para que não ser afetado, você deverá fazer algumas alterações em seu sistema, para passar à utilizar o parâmetro count em conjunto com o parâmetro page. Existem várias soluções para isso, mas a mais simples de ser feita é um loop buscando por essas informações, assim sua integração terá o menor impacto possível.

Cada uma das bibliotecas terá um exemplo de como fazer essa nova busca. Os exemplos usam a rota /transactions, mas a busca por qualquer objeto pode ser realizada dessa forma

C# / .Net

Antes:

using System;
using PagarMe;
namespace TesteQuery
{
    class MainClass
    {
        public static void Main(string[] args)
        {
            PagarMeService.DefaultApiKey = "SUA_API_KEY";

            var pagarmeRequest = PagarMeService.GetDefaultService().Transactions.BuildFindQuery(new Transaction());

            pagarmeRequest.Query.Add(count);

            var transactions = PagarMeService.GetDefaultService().Transactions.FinishFindQuery(pagarmeRequest.Execute();
            Console.WriteLine(transactions);
        }
    }
}

Depois:

using System;
using PagarMe;
using System.Collections;
namespace TesteQuery
{
    class MainClass
    {
        public static void Main(string[] args) {
            PagarMeService.DefaultApiKey = "SUA_API_KEY";
            var transactionsTotal = new ArrayList();
            var countTotal = 10000;

            var pagarmeRequest = PagarMeService.GetDefaultService().Transactions.BuildFindQuery(new Transaction());

            var count = Tuple.Create("count", "1000");
            var page = 1;

            pagarmeRequest.Query.Add(count);

            do
            {
                pagarmeRequest.Query.Add(Tuple.Create("page", page.ToString()));
                var transactions = PagarMeService.GetDefaultService() .Transactions.FinishFindQuery(pagarmeRequest.Execute());
                transactionsTotal.Add(transactions);
                page++;
            } while (1000 * page <= countTotal);
        }
    }
}

Java

Antes:

public static void main(String[] args) {
    PagarMe.init("SUA_API_KEY");
    try {
        ArrayList<Transaction> trxs = (ArrayList<Transaction>) new Transaction().findCollection(1000, 1);
        System.out.println(trxs);
    } catch (PagarMeException ex) {
        Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
    }
}

Depois:

public static void main(String[] args) {
    PagarMe.init("SUA_API_KEY");
    int page = 1;
    int countTotal = 10000;
    ArrayList<ArrayList<Transaction>> trxs = new ArrayList();
    try {
        do {
                trxs.add((ArrayList<Transaction>) new Transaction().findCollection(1000, page));
                page++;
        } while(page * 1000 <= countTotal);
        System.out.println(trxs);
    } catch (PagarMeException ex) {
        Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
    }
}

NodeJS / Javascript

Antes:

const pagarme = require('pagarme')

const getTransactions = async () => {
  const client = await pagarme.client.connect({
    api_key: 'SUA_API_KEY'
  })

  const transactions = await client.transactions.find({
    count: 9999
  })

  console.log(transactions.length)
}

getTransactions()

Depois:

const pagarme = require('pagarme')

const getTransactions = async () => {
  let count = 1000
  let page = 1
  let transactions
  let transactionsRequest

  const client = await pagarme.client.connect({
    api_key: 'SUA_API_KEY'
  })

  do {
    transactionsRequest = await client.transactions.find({
      page,
      count
    })

    Array.prototype.push.apply(transactions, transactionsRequest)
    page++
  } while (transactionsRequest.length === count)

  console.log(transactions.length)
}

getTransactions()

PHPv3

Antes:

<?php
require __DIR__.'/vendor/autoload.php';

$apiKey = 'SUA_API_KEY';
$pagarMe =  new \PagarMe\Sdk\PagarMe($apiKey);

$page = 1;
$count = 9999;

$transactionList = $pagarMe->transaction()->getList($page, $count);

echo count($transactionList);
?>

Depois:

<?php
require __DIR__.'/vendor/autoload.php';

$apiKey = 'SUA_API_KEY';
$pagarMe =  new \PagarMe\Sdk\PagarMe($apiKey);
$transactions = [];
$transactionsRequest = [];

$page = 1;
$count = 1000;

do {
  $transactionsRequest = $pagarMe->transaction()->getList($page, $count);

  $transactions = array_merge($transactions, $transactionsRequest);

  $page++;
} while ($transactionsRequest === $count);

echo count($transactions);

PHPv4

Antes

require __DIR__.'/vendor/autoload.php';

$pagarme = new PagarMe\Client('SUA_API_KEY');

$page = 1;
$count = 9999;

$transactions = $pagarme->transactions()->getList([
  "page" => $page,
  "count" => $count
]);

echo count($transactions);

Depois

<?php
require __DIR__.'/vendor/autoload.php';

$pagarme = new PagarMe\Client('SUA_API_KEY');

$transactions = [];
$transactionsRequest = [];

$page = 1;
$count = 1000;

do {
  $transactionsRequest = $pagarme->transactions()->getList([
    "page" => $page,
    "count" => $count
  ]);

  $transactions = array_merge($transactions, $transactionsRequest);

  $page++;
} while ($transactionsRequest === $count);

echo count($transactions);

Python

Antes:

import pagarme

pagarme.authentication_key("SUA_API_KEY")

count = 9999
page = 1

transactions = pagarme.transaction.find_by({
  "count": count,
  "page": page
})

print(len(transactions))

Depois:

import pagarme

pagarme.authentication_key("SUA_API_KEY")

count = 1000
page = 1
transactions = []

while True:
  transactionsRequest = pagarme.transaction.find_by({
    "count": count,
    "page": page
  })

  transactions = transactions + transactionsRequest

  page += 1

  if (len(transactionsRequest) < count):
    break


print(len(transactions))

Ruby

Antes:

require 'pagarme'

PagarMe.api_key = "SUA_API_KEY"

page = 1
count = 9999

transactions = PagarMe::Transaction.all(page, count)
puts transactions.length

Depois:

require 'pagarme'

PagarMe.api_key = "SUA_API_KEY"

page = 1
count = 1000
transactions = []

loop do
  transactionsRequest = PagarMe::Transaction.all(page, count)
  transactions += transactionsRequest
  page += 1

  break if transactionsRequest.length < count
end

puts transactions.length
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment