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/

Criador Marcos Birro Calixto 14/12/2019
Marcos Birro Calixto

Oi Calos tudo bem?

 

Eu ainda não consegui resolver este problema.

Subi o projeto no github como https://github.com/marcosbirrocalixto/helperhml

O problema é que não estou sabendo como passar os parâmetros como body como é exigido pelo cliente.

Se puder olhar lá? O controller é PreventivaController que está dentro de controllers\oi

O .env tem a URL como abaixo: Primeiro autentico, pego o token e depois tento pegar as preventivas

URL_API_OI_V1=https://autentica.h.portalssp.com/api/solicitatoken

[email protected]

PASSWORD_API_OI_V1=ng0A9ZWaLzxILh6o

USER_API_OI_V1=birro

USER_API_OI_V1_TOKEN=eyJ0eXAiOiJ...

 

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

URL_API_OI_V1_GETPREV_MES=11

Manager Carlos Ferreira 15/12/2019
Carlos Ferreira

Oi Marcos!

Eu uso o Guzzle praticamente todos os dias, e é assim mesmo que envia parâmetros via body em uma requisição (pelo menos nas versões mais novas do Guzzle):
$response = $aae ->request($method, $url, [
    'auth' => [$token, ''],
    'form_params' => $params,
]);

$response = $aae->request('POST', env('URL_API_OI_V1_GETPREV')."?page={$page}", [
    'form_params' => [
        'ano_data_programacao' => 2019,
        'ano_data_programacao' => 11,
    ],
]);

dd($response);

Pode ser um erro nessa API que recebe a requisição, para testar faça uma requisição para uma URL do Requestbin: http://requestbin.net/

Criador Marcos Birro Calixto 02/01/2020
Marcos Birro Calixto

Boa tarde.

Descobri que o problema é no header. Em vez de application/json devo usar o aplication/x-www...

            'headers' => [
                'Authorization' => "Bearer {$this->token}",
               //'Content-Type' =>  'Application/json',
                'Content-Type'  => 'application/x-www-form-urlencoded',
            ],
aí pego o retorno $preventivas = json_decode($result->getBody()); e chamo a view
return view('api.ssp.preventivas.index'compact('preventivas'));
MAs quando chamo o foreach dá erro
    @foreach ( $preventivas as $preventiva )
    <tr>
        <td>{{$preventiva->dados->preventiva_id}}</td>
        <td>{{$preventiva->status}}</td>
        <td>{{$preventiva->predio}}</td>
        <td>{{$preventiva->UF}}</td>
        <td>{{$preventiva->preventiva_tipo}}</td>
        <td>{{$preventiva->checklist_id}}</td>
        <td>{{$preventiva->data_programada}}</td>
        <td>{{$preventiva->ciclo}}</td>
        <td>{{$preventiva->periodicidade}}</td>
    </tr>
    @endforeach
Trying to get property 'preventiva_id' of non-object (View: /var/www/helper/resources/views/api/ssp/preventivas/index.blade.php)
Criador Marcos Birro Calixto 02/01/2020
Marcos Birro Calixto

Link do projeto Github

https://github.com/marcosbirrocalixto/helper/invitations

Criador Marcos Birro Calixto 02/01/2020
Marcos Birro Calixto

Usei o urldecode e peguei as variáveis:

$preventivas = urldecode($result->getBody());
 
Como passo isso para view?
 
Veio assim:
"{"mensagem":"Ok","dados":[{"preventiva_id":155226,"status":"Em an\u00e1lise pelo fornecedor","predio":"ACAA-ACAA","UF":"MG","preventiva_tipo":"L...
Criador Marcos Birro Calixto 02/01/2020
Marcos Birro Calixto

TEnho que gravar estes dados em uma tabela!

Como faço para pegar desta forma e gravar?

Obrigado,

Manager Carlos Ferreira 02/01/2020
Carlos Ferreira

Olá Marcos!

Que bom que conseguiu consultar na API com o Guzzle, está evoluindo. Muito bom!

Sobre o pegar os dados e gravar, preciso de mais detalhes do que precisa.

Essa thread está ficando muito extensa, abre um nova thread (ticket) para discutirmos isso.

No aguardo.

Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!