$body */ function chamarApi(string $method, string $path, ?array $body = null, ?string $idempotencyKey = null): array { $headers = ['Authorization: Bearer ' . API_KEY, 'Content-Type: application/json']; if ($idempotencyKey !== null) { $headers[] = 'Idempotency-Key: ' . $idempotencyKey; } $ch = curl_init(BASE_URL . $path); curl_setopt_array($ch, [ CURLOPT_CUSTOMREQUEST => $method, CURLOPT_HTTPHEADER => $headers, CURLOPT_RETURNTRANSFER => true, CURLOPT_POSTFIELDS => $body !== null ? json_encode($body) : null, ]); $response = curl_exec($ch); $status = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); return ['status' => $status, 'body' => json_decode($response, true)]; } echo "== Emitindo NFS-e ==\n"; $emissao = chamarApi('POST', '/v1/nfse', [ 'company_id' => COMPANY_ID, 'tomador' => [ 'documento' => '11122233396', 'nome' => 'Cliente Exemplo', 'email' => null, 'endereco' => [ 'cep' => '65775000', 'logradouro' => 'Rua Exemplo', 'numero' => '100', 'complemento' => null, 'bairro' => 'Centro', 'codigo_municipio' => '2104404', ], ], 'servico' => [ 'codigo_tributacao_nacional' => '140201', 'codigo_tributacao_municipal' => null, // NBS (opcional, 9 dígitos) e o grupo IBS/CBS (Reforma Tributária, opcional) só // entram no XML quando c_ind_op + cst_ibs_cbs + cclass_trib vêm juntos. 'codigo_nbs' => null, 'descricao' => 'Serviço de exemplo', 'valor_cents' => 10000, 'iss_retido' => false, 'aliquota_iss' => 2.01, 'c_ind_op' => null, 'cst_ibs_cbs' => null, 'cclass_trib' => null, 'ind_final' => false, ], // competencia (opcional, AAAA-MM-DD): período em que o serviço foi de fato prestado — // se omitido, assume hoje. Não confunda com a data de emissão. 'competencia' => date('Y-m-d'), ], 'exemplo-nfse-' . time()); echo "HTTP {$emissao['status']}\n"; print_r($emissao['body']); if ($emissao['status'] >= 400) { exit(1); } $documentoId = $emissao['body']['id']; echo "\n== Consultando status de {$documentoId} (aguardando alguns segundos) ==\n"; sleep(5); $consulta = chamarApi('GET', "/v1/notas/{$documentoId}"); echo "HTTP {$consulta['status']}\n"; print_r($consulta['body']);