Comunidade
Erro de autenticação
about 1 month ago by Allan Henrique
Já tentei de várias formas, com vários metodos, alguns postados aqui na guia de dúvidas. Porém sem sucesso. A documentação não tá clara.
request('POST', $auth_url_v1, \[ 'form_params' => [ 'auth_type' => 'DEV', 'grant_type' => 'password', 'username' => $username, 'password' => $password ], 'headers' => [ 'Content-Type' => 'application/x-www-form-urlencoded', ] ]); $authData = json_decode($authResponse->getBody(), true); // Verifique se o token de acesso foi obtido if (!isset($authData['access_token'])) { echo json_encode(['error' => 'Falha na autenticação com a Rodonaves']); exit; } $accessToken = $authData['access_token']; // Log do token para depuração error_log("Token de acesso obtido: " . $accessToken); $data = json_decode(file_get_contents("php://input"), true); if (!isset($data['OriginZipCode']) || !isset($data['DestinationZipCode'])) { echo json_encode(['error' => 'Parâmetros OriginZipCode e DestinationZipCode são obrigatórios.']); exit; } $cepOrigem = $data['OriginZipCode']; $cepDestino = $data['DestinationZipCode']; // Função para remover acentos dos nomes das cidades function removerAcentos($string) { return preg_replace( array('/[áàâãä]/u', '/[éèêë]/u', '/[íìîï]/u', '/[óòôõö]/u', '/[úùûü]/u', '/[ç]/u'), array('a', 'e', 'i', 'o', 'u', 'c'), $string ); } // Função para obter o ID da cidade usando o nome da cidade, já sem acentos function obterCityIdPorNome($client, $url, $accessToken, $cityName) { try { // Remover acentos do nome da cidade $cityName = removerAcentos($cityName); $response = $client->request('GET', $url, \[ 'query' => ['name' => $cityName], 'headers' => [ 'Authorization' => 'Bearer ' . $accessToken, 'Accept' => 'application/json' ] ]); $data = json_decode($response->getBody(), true); return $data[0]['cityId'] ?? null; // Assumindo que cityId é retornado na primeira entrada } catch (\\Exception $e) { error_log("Erro ao obter CityId para cidade $cityName: " . $e->getMessage()); return null; } } // Obter IDs das cidades de origem e destino usando o nome da cidade $originCityId = obterCityIdPorNome($client, $get_city_url_v1, $accessToken, $data['OriginCityId']); $destinationCityId = obterCityIdPorNome($client, $get_city_url_v1, $accessToken, $data['DestinationCityId']); if (!$originCityId || !$destinationCityId) { echo json_encode([ 'error' => 'Não foi possível obter o ID da cidade para um ou ambos os CEPs.', 'origemCityId' => $originCityId, 'destinoCityId' => $destinationCityId ]); exit; } // Construir o corpo da requisição de cotação com as chaves corretas $requestBody = \[ 'OriginZipCode' => $cepOrigem, 'OriginCityId' => $originCityId, 'DestinationZipCode' => $cepDestino, 'DestinationCityId' => $destinationCityId, 'TotalWeight' => $data['TotalWeight'], 'EletronicInvoiceValue' => $data['EletronicInvoiceValue'], 'CustomerTaxIdRegistration' => $data['CustomerTaxIdRegistration'], 'ReceiverCpfcnp' => $data['ReceiverCpfcnp'], 'PayerSelected' => $data['PayerSelected'], 'TotalPackages' => $data['TotalPackages'], 'Packs' => array_map(function ($pack) { return \[ 'AmountPackages' => $pack['AmountPackages'], 'Weight' => max($pack['Weight'], 1), 'Length' => $pack['Length'], 'Height' => $pack['Height'], 'Width' => $pack['Width'] ]; }, $data['Packs']) ]; // Fazer a requisição de cotação $cotacaoResponse = $client->request('POST', $cotacao_url, \[ 'json' => $requestBody, 'headers' => [ 'Accept' => 'application/json', 'Content-Type' => 'application/*+json', 'Authorization' => 'Bearer ' . $accessToken ] ]); $cotacaoData = json_decode($cotacaoResponse->getBody(), true); if ($cotacaoResponse->getStatusCode() !== 200) { echo json_encode(['error' => 'Erro na cotação Rodonaves', 'response' => $cotacaoData]); exit; } echo json_encode(\[ 'valorFrete' => $cotacaoData['valorFrete'] ?? 'N/A', 'prazoEntrega' => $cotacaoData['prazoEntrega'] ?? 'N/A', 'dataEntrega' => $cotacaoData['dataEntrega'] ?? 'N/A' ]); } catch (\\Exception $e) { echo json_encode(['error' => 'Erro ao realizar a requisição: ' . $e->getMessage()]); exit; }