Estou iniciando um teste com SDK PHP e logo de na primeira tentativa um erro:
Exception when calling CepApi->consultarCep: [401] Client error: GET https://api.nuvemfiscal.com.br/cep/86040370` resulted in a 401 Unauthorized response: Malformed Compact Serialization`
Criei as credenciais para Sandbox e Produção, testei com ambas e sempre recebo o mesmo erro.
Estou usando o exemplo disponível em: https://github.com/nuvem-fiscal/nuvemfiscal-sdk-php#installation--usage.
Aparentemente o problema não é na autenticação pois a mesma retorna o access-token :
após a linha: NuvemFiscal\Configuration::getDefaultConfiguration()->setAccessToken('...apFgcflfCNQMj...');
Olá @andre.corneta, seja bem-vindo à Nuvem Fiscal! Obrigado pelo tópico com informações detalhadas.
A mensagem de erro indica que o seu access token está incorreto. Não é um access token válido. Se esses dados são reais, está errado mesmo, visto que geralmente o access token começa com eyJ, e não com akJ.
Será que você não está colocando o client secret no lugar do access token. Observe com detalhes a documentação, principalmente nessa parte:
// Obter token a partir das credenciais
$token = get_oauth2_token(
'https://auth.nuvemfiscal.com.br/oauth/token',
$_ENV['NUVEMFISCAL_CLIENTID'],
$_ENV['NUVEMFISCAL_CLIENTSECRET'],
'cep cnpj' // defina o scope a ser usado
);
Note que com o client id e o cliente secret você precisa fazer uma chamada para obter o access token (get_oauth2_token), e só então usá-lo no client.
Bom, o erro agora mudou. Ele está reclamando do claim aud (audience).
Isso porque você está tentando acessar a API de produção usando um access token gerado para a API de sandbox. São duas APIs completamente independentes, cada uma tem seu client id/client secret específico e cada uma vai gerar um access token válido somente para aquela API.
Temos o setHost() em Configuration que por padrão está apontando para produção.
Caso alguém tenha a mesma dúvida iniciante que tive é só fazer o apontamento conforme a necessidade:
Fica a sugestão para um complemento na documentação do SDK… uma linha que teria evitado tantas perguntas! rsss
<?php
require_once(__DIR__ . '/vendor/autoload.php');
// Obter token a partir das credenciais
$_ENV = [];
$_ENV['NUVEMFISCAL_CLIENTID'] = 'SEU_CLIENTID_SANDBOX';
$_ENV['NUVEMFISCAL_CLIENTSECRET'] = 'SEU_CLIENT_SECRET_SANDBOX';
$token = get_oauth2_token(
'https://auth.nuvemfiscal.com.br/oauth/token',
$_ENV['NUVEMFISCAL_CLIENTID'],
$_ENV['NUVEMFISCAL_CLIENTSECRET'],
'cep cnpj' // defina o scope a ser usado
);
// Configurar access token OAuth2 para autorização: oauth2
$config = NuvemFiscal\Configuration::getDefaultConfiguration()->setAccessToken($token->access_token);
$config->setHost('https://api.sandbox.nuvemfiscal.com.br'); //Defina a api a ser usada de acordo com as credenciais informadas
$apiInstance = new NuvemFiscal\Api\CepApi(
// Se quiser usar um client http customizado, passe um client que implemente `GuzzleHttp\ClientInterface`.
// Isso é opcional, `GuzzleHttp\Client` será usado por padrão.
new GuzzleHttp\Client(),
$config
);
$cep = '80030030'; // string | CEP sem máscara.
try {
$result = $apiInstance->consultarCep($cep);
print_r($result);
} catch (Exception $e) {
echo 'Exception when calling CepApi->consultarCep: ', $e->getMessage(), PHP_EOL;
}