PHP code example of pairus / product-data
1. Go to this page and download the library: Download pairus/product-data library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
pairus / product-data example snippets
use Pairus\PairusClient;
$pairus = new PairusClient(apiKey: getenv('PAIRUS_API_KEY'));
$produto = $pairus->products->get('7891000100103');
echo "{$produto->xProd} | NCM: {$produto->ncm} | CEST: {$produto->cest}";
// Forma 1: Argumentos nomeados do PHP 8 (alta legibilidade)
$predicao = $pairus->fiscal->predict(
regimeTributario: 'simples_nacional',
ufOrigem: 'SP',
ufDestino: 'RJ',
xProd: 'Coca-Cola 2L',
gtin: '7894900010015'
);
// Forma 2: Injeção de dependência em frameworks (Laravel, Symfony)
class FiscalController {
public function __construct(private PairusClient $pairus) {}
}
// Consulta simples por GTIN
$produto = $pairus->products->get('7891000100103');
// Consulta cadastral enriquecida (SEO, dimensões logísticas, imagem HD)
$produto = $pairus->products->getEnriched('7891000100103');
// Busca semântica por texto e IA
$busca = $pairus->products->search('leite condensado sem lactose', limite: 5);
foreach ($busca['resultados'] as $item) {
echo "[Score {$item['score']}] {$item['produto']['xProd']} - GTIN: {$item['produto']['GTIN']}" . PHP_EOL;
}
// Identificação por imagem fotográfica (OCR + Visão Computacional)
$scan = $pairus->products->scan('/caminho/foto_embalagem.jpg', tipo: 'gtin');
// Também aceita bytes brutos em memória:
// $scan = $pairus->products->scan($bytesFoto, nomeArquivo: 'rotulo.png');
$predicao = $pairus->fiscal->predict(
regimeTributario: 'simples_nacional', // 'simples_nacional' | 'lucro_presumido' | 'lucro_real'
ufOrigem: 'SP',
ufDestino: 'MG',
finalidade: 'revenda', // 'revenda' | 'consumo_final' | 'industrializacao'
destinatarioContribuinte: true,
gtin: '7894900010015',
xProd: 'REFRIGERANTE COCA COLA 2L'
);
$trib = $predicao->dadosTributarios;
// CFOP interno (mesma UF) e externo (interestadual): use o que corresponde à operação
echo "NCM: {$trib->ncmSugerido} | CFOP: {$trib->cfopInterno} / {$trib->cfopExterno} | CSOSN: {$trib->icmsCstCsosn}" . PHP_EOL;
echo "IBS/CBS CST: {$trib->ibscbs->cst} | ClassTrib: {$trib->ibscbs->cClassTrib}" . PHP_EOL;
echo "CBS Efetiva: {$trib->ibscbs->cbsAliquotaEfetiva}% | IBS Efetivo: {$trib->ibscbs->ibsAliquotaEfetiva}%" . PHP_EOL;
$lote = [
['xProd' => 'CERVEJA HEINEKEN LATA 350ML', 'id' => '7896045506163', 'NCM' => '22030000', 'CEST' => '0302100'],
['xProd' => 'ARROZ BRANCO TIPO 1 5KG', 'NCM' => '10063021'],
];
$resultado = $pairus->fiscal->sanitize($lote);
foreach ($resultado['itens'] as $item) {
$auditoria = $item['auditoria_fiscal'];
$vigente = $auditoria['ncm_vigente'] ? 'vigente' : 'INATIVO';
echo "{$item['xProd']} -> NCM {$item['NCM_informado']} ({$vigente}) | CEST: {$auditoria['cest_sugerido']}" . PHP_EOL;
}
// NF-e com enquadramento fiscal assistido
$nfe = $pairus->emissao->emitirNfe([
'cnpj_emitente' => '11222333000181',
'natureza_operacao' => 'Venda de Mercadoria',
'destinatario' => ['cpf_cnpj' => '12345678000195', 'razao_social' => 'Cliente Exemplo LTDA', 'uf' => 'SP'],
'itens' => [
['descricao' => 'Teclado Mecânico USB', 'ncm' => '84716052', 'cfop' => '5102', 'quantidade' => 1, 'valor_unitario' => 250.0],
],
]);
echo "{$nfe->statusSefaz} [{$nfe->cStat}] {$nfe->xMotivo}" . PHP_EOL;
// NFC-e no PDV: troco gerado pela API e reenvio seguro com Idempotency-Key
$nfce = $pairus->emissao->emitirNfce([
'cnpj_emitente' => '11222333000181',
'tipo_documento' => 'NFCE',
'itens' => [['descricao' => 'Refrigerante 2L', 'ncm' => '22021000', 'valor_unitario' => 9.90, 'quantidade' => 2]],
'pagamentos' => [['forma_pagamento' => '01', 'valor' => 50.0]],
], 'pdv03-cupom-000123');
// Simulação prévia com CUSTO ZERO de créditos
$simulacao = $pairus->emissao->simular([
'cnpj_emitente' => '11222333000181',
'destinatario' => ['cpf_cnpj' => '12345678000195', 'razao_social' => 'Cliente Teste', 'uf' => 'SP'],
'itens' => [['descricao' => 'Item Teste', 'valor_unitario' => 10.0]],
]);
$nota = [
'ambiente' => 'homologacao',
'prestador' => [
'cnpj' => '12345678000199', 'inscricao_municipal' => '87654321', 'razao_social' => 'Minha Empresa Ltda',
'percentual_tributos_simples' => 6.0, // alíquota efetiva do Simples (ME/EPP)
'endereco' => [ // o município do prestador é o emissor da DPS
'logradouro' => 'Av. Paulista', 'numero' => '1578', 'bairro' => 'Bela Vista',
'codigo_municipio_ibge' => '3550308', 'uf' => 'SP', 'cep' => '01310200',
],
],
'tomador' => ['cpf_cnpj' => '98765432000188', 'razao_social' => 'Cliente Ltda'],
'servico' => [
'item_lista_servico' => '1.01',
'discriminacao' => 'Serviços de Programação PHP',
'municipio_prestacao_ibge' => '3550308',
'valor_servicos' => 2500.0,
'aliquota_iss' => 2.0,
// Opcional: IBS/CBS do serviço (LC 214/2025)
'reforma_tributaria' => ['cClassTrib' => '000001', 'aliquota_cbs' => 0.9],
],
];
// 1. Simulação prévia de tributos (sem custo)
$simulacao = $pairus->nfse->simular($nota);
// 2. Emissão pelo Sistema Nacional
$nfse = $pairus->nfse->emitir($nota);
if (!$nfse->sucesso && $nfse->numeroDps !== null) {
// Sem resposta do Sistema Nacional: reenvie com o mesmo número para recuperar a nota sem duplicidade
$nfse = $pairus->nfse->emitir($nota + ['numero_dps' => $nfse->numeroDps]);
}
echo "NFS-e Nº: {$nfse->numeroNfse} | Chave: {$nfse->chaveAcessoNacional}" . PHP_EOL;
// 3. Consulta; sincronizar confere no Sistema Nacional se a nota foi cancelada fora da plataforma
$status = $pairus->nfse->consultar($nfse->chaveAcessoNacional, sincronizar: true);
// 4. Cancelamento (evento e101101 no Sistema Nacional; xmlEvento traz o evento registrado)
$cancel = $pairus->nfse->cancelar([
'numero_nfse' => $nfse->numeroNfse,
'chave_acesso_nacional' => $nfse->chaveAcessoNacional,
'cnpj_prestador' => '12345678000199',
'inscricao_municipal' => '87654321',
'codigo_municipio_ibge' => '3550308',
'motivo_codigo' => '1', // '1' erro de emissão, '2' serviço não prestado, '3' duplicidade (enviada como '1'), '9' outros
'justificativa' => 'Cancelamento solicitado pelo cliente por erro cadastral',
]);
$notas = $pairus->emissao->buscarPorReferencia('12345678000195', 'pedido-8841'); // [] = seguro emitir
$nota = $pairus->emissao->consultar($notas[0]['chave_acesso'], incluirXml: true);
$pdf = $pairus->emissao->baixarDanfe($nota['chave_acesso']);
$csc = $pairus->empresas->configurarCsc('12345678000195', 'producao', '000001', 'SEU_CSC_DA_SEFAZ');
var_dump($csc['producao']['configurado']); // o código nunca é devolvido
$instalado = $pairus->dfe->enviarCertificado('Matriz', base64_encode(file_get_contents('certificado.pfx')), getenv('SENHA_PFX'));
$status = $pairus->dfe->consultarCertificado('12345678000195');
if ($status['status'] === 'ativo') {
echo "Vence em {$status['dias_restantes']} dias";
}
// 1. Sincronizar e consultar novos documentos na SEFAZ Nacional
$sync = $pairus->dfe->sincronizar(cnpj: '12345678000195', ambiente: 'producao');
echo "Status SEFAZ [{$sync['cstat']}]: {$sync['xmotivo']}" . PHP_EOL;
echo "Novos documentos capturados: {$sync['novos_documentos']}" . PHP_EOL;
echo "Avanço de NSU: {$sync['ult_nsu']} -> {$sync['max_nsu']}" . PHP_EOL;
foreach ($sync['documentos'] as $doc) {
echo "NF-e {$doc['numero']}/{$doc['serie']} - R$ {$doc['valor_total']} ({$doc['nome_emitente']})" . PHP_EOL;
}
// 2. Listar notas fiscais de compras capturadas
$compras = $pairus->dfe->listarDocumentos(cnpj: '12345678000195', limite: 50);
// 3. Manifestação do Destinatário perante a SEFAZ
// Eventos: '210210' (Ciência), '210200' (Confirmação), '210220' (Desconhecimento), '210240' (Não Realizada)
$manif = $pairus->dfe->manifestar(
chaveAcesso: '35260912345678000195550010000000451234567890',
cnpj: '12345678000195',
tipoEvento: '210210' // Ciência da Emissão para liberar download do XML completo
);
echo "Manifestação homologada. Protocolo: {$manif['protocolo']}" . PHP_EOL;
// 4. Download do XML autorizado (procNFe) e DANFE em PDF
$chave = '35260912345678000195550010000000451234567890';
$xmlString = $pairus->dfe->baixarXml($chave);
file_put_contents("{$chave}.xml", $xmlString);
$danfePdfBytes = $pairus->dfe->baixarDanfe($chave);
file_put_contents("DANFE_{$chave}.pdf", $danfePdfBytes);
use Pairus\Webhooks;
use Pairus\Exceptions\InvalidSignatureException;
$payload = file_get_contents('php://input');
$signature = $_SERVER['HTTP_X_PAIRUS_SIGNATURE'] ?? '';
try {
$event = Webhooks::constructEvent($payload, $signature, getenv('PAIRUS_WEBHOOK_SECRET'));
if ($event->event === 'nfe.autorizada') {
// Processar faturamento concluído
}
} catch (InvalidSignatureException $e) {
http_response_code(401);
exit('Assinatura inválida');
}
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Pairus\PairusClient;
class FiscalController extends Controller
{
public function consultar(string $gtin, PairusClient $pairus)
{
try {
$produto = $pairus->products->get($gtin);
return response()->json($produto);
} catch (\Pairus\Exceptions\PairusApiException $e) {
return response()->json(['erro' => $e->xMotivo], $e->statusCode);
}
}
}
add_action('woocommerce_process_product_meta', function ($postId) {
$gtin = get_post_meta($postId, '_gtin', true);
if (!empty($gtin)) {
$pairus = new \Pairus\PairusClient(apiKey: defined('PAIRUS_API_KEY') ? PAIRUS_API_KEY : '');
$produto = $pairus->products->get($gtin);
update_post_meta($postId, '_ncm', $produto->ncm);
update_post_meta($postId, '_cest', $produto->cest);
}
});
try {
$pairus->products->get('0000000000000');
} catch (\Pairus\Exceptions\AuthenticationException $e) {
// Chave de API inválida ou expirada (HTTP 401)
echo "Erro de autenticação: {$e->getMessage()}";
} catch (\Pairus\Exceptions\RateLimitException $e) {
// Limite de requisições atingido (HTTP 429)
echo "Aguarde {$e->retryAfter} segundos.";
} catch (\Pairus\Exceptions\PairusApiException $e) {
// Erros de negócio ou rejeição fiscal
echo "SEFAZ cStat: {$e->cStat} | Motivo: {$e->xMotivo}";
} catch (\Pairus\Exceptions\NetworkException $e) {
// Falha de rede após retentativas exponenciais
echo "Falha de conexão: {$e->getMessage()}";
}