[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)
Marcos Birro Calixto
Criador Marcos Birro Calixto 18/11/2019

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

É via POST mesmo ok?

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

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',

            ],

        ]);

Marcos Birro Calixto
Manager Carlos Ferreira 18/11/2019

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)

Carlos Ferreira
Criador Marcos Birro Calixto 18/11/2019

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.

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

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 ▶}
}
Marcos Birro Calixto
Manager Carlos Ferreira 18/11/2019

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

Carlos Ferreira
Criador Marcos Birro Calixto 18/11/2019

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}
}
Marcos Birro Calixto
Criador Marcos Birro Calixto 18/11/2019

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

Marcos Birro Calixto
Manager Carlos Ferreira 18/11/2019

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());

Carlos Ferreira
Criador Marcos Birro Calixto 18/11/2019

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."
Marcos Birro Calixto
Manager Carlos Ferreira 18/11/2019

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/

Carlos Ferreira
Criador Marcos Birro Calixto 18/11/2019

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

Marcos Birro Calixto
Manager Carlos Ferreira 18/11/2019

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/

Carlos Ferreira
Criador Marcos Birro Calixto 18/11/2019

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)
Marcos Birro Calixto
Criador Marcos Birro Calixto 18/11/2019

Link do projeto Github

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

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

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...
Marcos Birro Calixto
Criador Marcos Birro Calixto 18/11/2019

TEnho que gravar estes dados em uma tabela!

Como faço para pegar desta forma e gravar?

Obrigado,

Marcos Birro Calixto
Manager Carlos Ferreira 18/11/2019

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.

Carlos Ferreira
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!