• 0
Davi Generoso

Como fazer a paginação das vendas (orders/search)?

Question

Bom dia pessoal,

peço desculpas desde já, pois imagino que seja algo simples, mas já fiz muitos testes e busquei na documentação e fórum e não consegui resolver este problema, então gostaria da ajuda de vocês!

Preciso buscar todos os pedidos com determinado status e listar os mesmos!

Como o limite é de 50 pedidos por página no máximo, entendo que precisaria usar o offset ou scan, mas já tentei com os dois e não sei se estou fazendo algo errado mas não consigo pegar mais de 50 itens!

Segue exemplo de URL: 

/orders/search?seller=xxxxx&access_token=yyyyyyy&offset=0&limit=50&sort=date_desc&shipping.status=pending

Nesta consulta me traz corretamente os primeiros 50 registros e me diz que tenho 135 registros no total.

Em seguida, se chamo pela mesma URL mudando o offset, não traz resultados e mostra a mensagem a seguir:

 [message] => Oops! Something went wrong...
            [error] => bad_request
            [status] => 400
            [cause] => Array

Alguém poderia me auxiliar com alguma informação ou exemplo que busque os pedidos com paginação?

Desde já agradeço a todos!

 

 

Share this post


Link to post
Share on other sites

2 answers to this question

Recommended Posts

  • 0
1 hour ago, Davi Generoso said:

Bom dia pessoal,

peço desculpas desde já, pois imagino que seja algo simples, mas já fiz muitos testes e busquei na documentação e fórum e não consegui resolver este problema, então gostaria da ajuda de vocês!

Preciso buscar todos os pedidos com determinado status e listar os mesmos!

Como o limite é de 50 pedidos por página no máximo, entendo que precisaria usar o offset ou scan, mas já tentei com os dois e não sei se estou fazendo algo errado mas não consigo pegar mais de 50 itens!

Segue exemplo de URL: 

/orders/search?seller=xxxxx&access_token=yyyyyyy&offset=0&limit=50&sort=date_desc&shipping.status=pending

 Nesta consulta me traz corretamente os primeiros 50 registros e me diz que tenho 135 registros no total.

 Em seguida, se chamo pela mesma URL mudando o offset, não traz resultados e mostra a mensagem a seguir:


 [message] => Oops! Something went wrong...
            [error] => bad_request
            [status] => 400
            [cause] => Array

Alguém poderia me auxiliar com alguma informação ou exemplo que busque os pedidos com paginação?

Desde já agradeço a todos!

 

 

pode colocar aquim o request completo?

Share this post


Link to post
Share on other sites
  • 0

Olá SGUINLE!!

Problema RESOLVIDO!

Achei uma rotina aqui no fórum que consegui usar de base para adaptar e fazer a consulta usando offset!

Fiz uma função recursiva que monta as chamadas pra cada pagina e mostra os resultados!

Segue a rotina caso alguém precise:

    public function GetListaPedidos($StatusEnvioInicial = null, $StatusInicial = null, $PaginaAtual = null){
        $debug = True; //$this->debug;
        $seller_id = $this->getSeller_idSeVazio();
        $TotalPaginas = 30;//vendas por pagina

        //filtros e pagina
        //http://developers.mercadolibre.com/pt-br/envio-de-produto/#Status-do-envio
        if(!isset($StatusEnvioInicial))
            $StatusEnvioInicial = !isset($_GET['envio'])?'pending':$_GET['envio'];
        //http://developers.mercadolibre.com/pt-br/gerenciamento-de-vendas/#Status-da-ordem
        if(!isset($StatusInicial))
            $StatusInicial = !isset($_GET['status'])?'paid':$_GET['status'];
        if(!isset($PaginaAtual))
            $PaginaAtual = isset($_GET['pgn'])?$_GET['pgn']:'0';
        
        if($debug){ 
            if($PaginaAtual == 0)
                echo '<br>GetListaPedidos()';
        }
        $meli = new Meli($this->appId, $this->secretKey, $this->S_access_token, $this->S_refresh_token);  
        
        $offset = $PaginaAtual * $TotalPaginas;
        $filtros = array('access_token'=>$this->S_access_token,
                        'seller'=>$seller_id,
                        'sort' =>'date_desc',
                        'limit'=>$TotalPaginas,
                        'offset'=> $offset,
                        'order.status'=>$StatusInicial, 
                        'shipping.status'=>$StatusEnvioInicial            
                        );

        $filtrosTotalVendas = array('access_token'=>$this->S_access_token,
                        'seller'=>$seller_id,
                        'sort' =>'date_desc',
                        'order.status'=>$StatusInicial, 
                        'shipping.status'=>$StatusEnvioInicial            
                        );
        
        //pega a vendas de acordo a paginacao e filtro
       // $anuncios = $meli->get('/orders/search/', array('seller'=>$seller_id,'access_token' => $this->S_access_token, 'sort' =>'date_desc','limit'=>$TotalPaginas,'offset'=>$PaginaAtual, 'order.status'=>$StatusInicial, 'shipping.status'=>$StatusEnvioInicial));
        $anuncios = $meli->get('/orders/search/', $filtros);

        //numero total de vendas
       // $anuncios_total = $meli->get('/orders/search/', array('seller'=>$seller_id,'access_token' => $this->S_access_token, 'sort' =>'date_desc', 'order.status'=>$StatusInicial,'shipping.status'=>$StatusEnvioInicial));
        $anuncios_total = $meli->get('/orders/search/', $filtrosTotalVendas);

        //se retorno as vendas
        if($anuncios['httpCode']==200){
            //pega o total de vendas para pagina
            $TotalRegistros = isset($anuncios_total['body']->total)?$anuncios_total['body']->total:$anuncios_total['body']->paging->total;
            if($debug){ 
                if($PaginaAtual == 0)
                    echo '<br>Total de registros encontrados: '. $TotalRegistros . '<hr>';                 
            }
            $NumPaginas = (int)ceil(($TotalRegistros/$TotalPaginas)); 

            if($debug){ 
                if($PaginaAtual == 0)
                echo    '<table class="table table-striped">
                            <thead>
                            <tr>
                                <th style="width:50px;">Num.</th>
                                <th style="width:80px;">Venda ID</th>
                                <th style="width:130px;">Data</th>
                                <th style="width:300px;">Cliente</th>
                                <th style="width:500px;">Produto</th>
                                <th style="width:25px;">Total</th>        
                                <th style="width:30px;">Status</th>                                        
                                <th style="width:50px;">Status Envio</th>        
                            </tr>
                            </thead>
                        <tbody>';
            };

            if(isset($anuncios['body']->results[0])){
                $contador = 0;
                foreach($anuncios['body']->results AS $k=>$v){
                    $contador = $contador + 1;            
                    //echo '<pre>'; print_r($v); echo '</pre>';
                    if($debug){ 
                        $urlAbrirPedido = '<a href="https://myaccount.mercadolivre.com.br/sales/'.$v->id.'/detail?type=recent" target="_blank">'.$v->id.'</a>';
                        $registroAtual = ($PaginaAtual*$TotalPaginas) + $contador;
                        $HTMLPaginaAtual = $PaginaAtual + 1;
                        echo '<tr> 
                                <td style="width:30px;">'. $HTMLPaginaAtual .  ' - ' . $registroAtual .'</td>
                                <td style="width:60px;">'. $urlAbrirPedido .'</td>
                                <td style="width:240px;">'. $v->date_created .'</td>
                                <td style="width:300px;">'. $v->buyer->nickname .'</td>
                                <td style="width:400px;">'. $v->order_items[0]->item->title .'</td>
                                <td style="width:150px;">'. $v->total_amount .'</td>                     
                                <td style="width:150px;">'. $v->status .'</td>      
                                <td style="width:150px;">'. $v->shipping->status .'</td>                                                        
                             </tr>';
                    }
                }

            }else{
                if($debug){ echo '<tr><td colspan="9">Nenhum registro disponivel...</td></tr>'; }
            }

            //Se for a primeira página, busca pelsa demais chamando a função novamente            
            if($PaginaAtual == 0){
                for($i=1;$i<=($NumPaginas-1);$i++){
                    $this->GetListaPedidos($StatusEnvioInicial, $StatusInicial, $i);
                }
            }

            if($debug){ 
                if($PaginaAtual == $NumPaginas)
                    echo '</tbody> </table>';                 
            }
        }
    }

Obrigado pela ajuda!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now