Enviar parâmetros Viz guzzle para clliente

Marcos Birro Calixto Criador 18/11/2019
Marcos Birro Calixto

Carlos, boa tarde. Eu não estou sabendo como enviar parâmetros no Guzzle. 

         $aae = new Guzzle;

        $params['form_params'] = array('ano_data_programda' => 2019, 'mes_data_programada' => 11);

        //dd($params);

        $result = $aae->request('POST', env('URL_API_OI_V1', $params), [

       'headers' => [ ...

Criador Marcos Birro Calixto 18/11/2019
Marcos Birro Calixto

É via POST mesmo ok?

Criador Marcos Birro Calixto 18/11/2019
Marcos Birro Calixto

Na verdade preciso passar o header e os parâmetros.

        $body = [

            'body' =>

                [

                    'ano_data_programacao' => '2019',

                    'ano_data_programacao' => '11',

                ]

        ];

        

        $result = $aae->request('POST', env('URL_API_OI_V1_GETPREV', $body), 

          [

            'headers' => [

                'Authorization' => "Bearer {$this->token}",

                'Content-Type' =>  'Application/json',

            ],

        ]);

Manager Carlos Ferreira 18/11/2019
Carlos Ferreira

Olá, Marcos!
Tudo bem?

Se deseja enviar parâmetros no body da requisição a request deve ser via POST, porque se enviar via GET a request os dados serão enviados como "query string".

Essa requisição seria:
$aae->request('POST', 'url-aqui', [
    'body' => [
        'parametros' => 'aqui',
    ]
]);

(http://docs.guzzlephp.org/en/stable/request-options.html#body)

Criador Marcos Birro Calixto 19/11/2019
Marcos Birro Calixto

Bom dia Carlos. Ainda não deu. 

 

        $result = $aae->request('POST', env('URL_API_OI_V1_GETPREV'), [

            'form_params' => [

                'ano_data_programacao' => '2019',

                'ano_data_programacao' => '11'

            ],

            'headers' => [

                'Authorization' => "Bearer {$this->token}",

                'Content-Type' =>  'Application/json',

            ],

        ]);

 

Estou tendo que passar na URL para funcionar

URL_API_OI_V1_GETPREV=https://preventivaspredial.h.portalssp.com/api/getpreventivas?ano_data_programada=2019&mes_data_programada=11

Parece que ignora os params.

Criador Marcos Birro Calixto 19/11/2019
Marcos Birro Calixto

Se eu tiro oa parâmetros do .env

URL_API_OI_V1_GETPREV=https://preventivaspredial.h.portalssp.com/api/getpreventivas

retorna assim:

{#600 ▼
  +"mensagem": "Todos os campos são de preenchimento obrigatórios."
  +"dados": {#587 ▶}
}
Manager Carlos Ferreira 19/11/2019
Carlos Ferreira

Quando você envia os parâmetros assim está enviando como query params (eles estão chegando na API, por isso não está gerando erro): https://preventivaspredial.h.portalssp.com/api/getpreventivas?ano_data_programada=2019&mes_data_programada=11

Sempre que alterar alguma configuração é importante limpar os caches, comandos:
php artisan cache:clear
php artisan route:cache 
php artisan config:clear
php artisan view:clear

------------

Enviando os parâmetros no body da requisição não deu certo?
Igual aqui: http://docs.guzzlephp.org/en/stable/request-options.html#body

Criador Marcos Birro Calixto 20/11/2019
Marcos Birro Calixto

Carlos, não estou entendo isso. LImpei o cache e deixei o código somente como params coforme abaixo:

        $aae = new Guzzle;

 

        $result = $aae->request('POST', env('URL_API_OI_V1_GETPREV'), [

            'form_params' => [

                'ano_data_programacao' => 2019,

                'ano_data_programacao' => 11,

            ],

            'headers' => [

                'Authorization' => "Bearer {$this->token}",

                'Content-Type' =>  'Application/json',

            ],

        ]);

                

        $preventivas = json_decode($result->getBody())->dados;

        

        dd($preventivas);

 

Retorno

{#911 ▼
  +"attributes": {#919}
  +"request": {#921}
  +"query": {#914}
  +"server": {#912}
  +"files": {#910}
  +"cookies": {#923}
  +"headers": {#918}
}
Criador Marcos Birro Calixto 20/11/2019
Marcos Birro Calixto

Será que pode ser por estar rodando em máquina local? Se eu colocar no server pode responder melhor?

Manager Carlos Ferreira 20/11/2019
Carlos Ferreira

Olá Marcos!

Nessa API gere logs nela para validar o que chega nas requisições: https://laravel.com/docs/6.x/logging

E qual é o status code retornado da API?
dd($result->getStatusCode());

Criador Marcos Birro Calixto 25/11/2019
Marcos Birro Calixto

OI. Não processa. Dá eero: Veja:

        $result = $aae->request('POST', env('URL_API_OI_V1_GETPREV'), [

            'body' => [

                'form_params' => [

                    'ano_data_programacao' => 2019,

                    'ano_data_programacao' => 11,

                ]

            ],

            'headers' => [

                'Authorization' => "Bearer {$this->token}",

                'Content-Type' =>  'Application/json',

            ],

        ]);

Retorno:

"Passing in the "body" request option as an array to send a POST request has been deprecated. Please use the "form_params" request option to send a application/x-www-form-urlencoded request, or the "multipart" request option to send a multipart/form-data request."
Manager Carlos Ferreira 25/11/2019
Carlos Ferreira

Olá, Marcos!

Você tem esse código no GitHub? Porque fica mais fácil para mim analisar onde você está errando.

Faça essa requisição para algum serviço como este, porque assim você consegue validar o que está enviando, os parâmetros e etc: https://requestbin.com/

Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!