定制 betocampoy/champs-fiscal 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

betocampoy/champs-fiscal

Composer 安装命令:

composer require betocampoy/champs-fiscal

包简介

Componente fiscal reutilizável para DC-e (DACE) e NFS-e Nacional — emissão, consulta, cancelamento.

README 文档

README

Componente PHP reutilizável para rotinas fiscais brasileiras. Suporta:

Documento Operações
DC-e (Declaração de Conteúdo Eletrônica) Emissão, consulta, cancelamento, DACE
NFS-e Nacional (Nota Fiscal de Serviço Eletrônica) Emissão, consulta

Instalação

composer require betocampoy/champs-fiscal

Requisitos

  • PHP >= 8.1
  • Extensões: ext-dom, ext-libxml, ext-openssl, ext-soap, ext-mbstring

Dependências

  • betocampoy/champs-certificate — abertura e leitura de certificados A1/A3
  • symfony/http-client — transporte HTTP/REST para NFS-e Nacional
  • endroid/qr-code — geração de QR Code para DACE
  • picqer/php-barcode-generator — geração de código de barras para DACE

DC-e

Variáveis de ambiente

# .env
CHAMPS_FISCAL_DCE_EMISSION_TYPE='1'
CHAMPS_FISCAL_DCE_AUTHORIZER_SITE_NUMBER='0'
CHAMPS_FISCAL_DCE_APPLICATION_VERSION='MINHA APP'
CHAMPS_DCE_QRCODE_BASE_URL='https://dfe-portal.svrs.rs.gov.br/dce/QRCode'

# .env.local  (não versionar)
CHAMPS_FISCAL_DCE_ENVIRONMENT='2'   # 1=produção, 2=homologação
use BetoCampoy\Champs\Fiscal\Config\DceEnvironmentDefaults;

$defaults = DceEnvironmentDefaults::fromEnv();

Autorização

use BetoCampoy\Champs\Fiscal\Dce\Authorization\DceAuthorizationService;

$service = new DceAuthorizationService(environment: 'homolog');

$response = $service->authorize($payload, $openedCertificateData);

if ($response->isSuccess()) {
    $chave = $response->getParsedValue('access_key');
}

Consulta

use BetoCampoy\Champs\Fiscal\Facade\FiscalDocumentQueryFacade;

$facade = new FiscalDocumentQueryFacade();
$response = $facade->queryByAccessKey($accessKey, $openedCertificate);

Cancelamento

use BetoCampoy\Champs\Fiscal\Dce\Event\Cancel\DceCancelService;

$service = new DceCancelService(environment: 'homolog');
$response = $service->cancel($payload, $openedCertificateData);

Normalização de request

use BetoCampoy\Champs\Fiscal\Config\DceEnvironmentDefaults;
use BetoCampoy\Champs\Fiscal\Dce\Request\Authorization\Normalizer\DceAuthorizationRequestNormalizer;

$normalizer = new DceAuthorizationRequestNormalizer();
$request = $normalizer->normalize($request, DceEnvironmentDefaults::fromEnv());

NFS-e Nacional

Suporte à NFS-e Nacional (sistema federal obrigatório para municípios aderentes desde 2026). Comunicação via REST + JSON com autenticação mTLS por certificado ICP-Brasil.

  • Produção: https://adn.nfse.gov.br
  • Homologação: https://adn.producaorestrita.nfse.gov.br

Emissão

use BetoCampoy\Champs\Fiscal\Nfse\Facade\NfseFacade;
use BetoCampoy\Champs\Fiscal\Nfse\Request\Input\NfseEmitRequest;
use BetoCampoy\Champs\Fiscal\Nfse\Request\Input\NfseProviderRequest;
use BetoCampoy\Champs\Fiscal\Nfse\Request\Input\NfseTakerRequest;
use BetoCampoy\Champs\Fiscal\Nfse\Request\Input\NfseTakerAddressRequest;
use BetoCampoy\Champs\Fiscal\Nfse\Request\Input\NfseServiceRequest;
use BetoCampoy\Champs\Fiscal\Nfse\Request\Input\NfseValuesRequest;

$facade = new NfseFacade(environment: 'homolog'); // ou 'prod'

$response = $facade->emit(
    request: new NfseEmitRequest(
        provider: new NfseProviderRequest(
            cnpj: '12345678000195',
            municipalRegistration: '12345',    // inscrição municipal
            emitterIbgeCode: '3515152',         // código IBGE do município do prestador
            simplesNacional: false,
        ),
        taker: new NfseTakerRequest(
            name: 'Empresa Cliente Ltda',
            cnpj: '98765432000111',             // ou cpf: '...'
            address: new NfseTakerAddressRequest(
                ibgeCode: '3550308',
                zipCode: '01310100',
                street: 'Av. Paulista',
                number: '1000',
                neighborhood: 'Bela Vista',
            ),
            email: 'financeiro@cliente.com.br',
        ),
        service: new NfseServiceRequest(
            nationalServiceCode: '16.01',        // código de tributação nacional
            municipalServiceCode: '1601',        // código do município
            description: 'Serviço de coleta e entrega de encomendas',
            serviceMunicipalityIbge: '3515152',  // IBGE do local de prestação
            cnae: '5320201',
        ),
        values: new NfseValuesRequest(
            serviceValue: 150.00,
            issAliquot: 0.02,    // 2% — verificar alíquota do município
            issRetained: false,
        ),
        rpsNumber: 1,
        rpsSeries: 'E',
    ),
    certificate: $openedCertificate,
);

if ($response->isSuccess()) {
    $chaveNfse = $response->getParsedValue('access_key');
    $numero    = $response->getParsedValue('number');
}

Consulta

$response = $facade->query($chaveNfse, $openedCertificate);

Abertura do certificado

O parâmetro $openedCertificate é um OpenedCertificateData do pacote betocampoy/champs-certificate:

use BetoCampoy\Champs\Certificate\Service\CertificateReaderService;

$reader = new CertificateReaderService();
$openedCertificate = $reader->readFromFile('/path/to/cert.pfx', 'senha');

Estrutura do pacote

src/
├── Config/              Leitura de variáveis de ambiente (DC-e)
├── Dce/
│   ├── Authorization/   Emissão DC-e
│   ├── Query/           Consulta DC-e
│   ├── Event/Cancel/    Cancelamento DC-e
│   ├── Dace/            Impressão e mapeamento DACE
│   ├── Request/         Input, Builder, Mapper, Normalizer, Validator
│   ├── Response/        Parsers de resposta SOAP
│   ├── Transmission/    Transmissão SOAP + configuração
│   └── Signer/          Configuração de assinatura XML
├── Nfse/
│   ├── Authorization/   Emissão NFS-e (DPS → NFS-e)
│   ├── Query/           Consulta NFS-e
│   ├── Common/          DTOs compartilhados (Provider, Taker, Service, Values)
│   ├── Request/         Input e Payload builder
│   ├── Transmission/    Transmissão REST + configuração
│   └── Facade/          NfseFacade (entry point)
├── Facade/              FiscalDocumentQueryFacade (consulta DC-e)
├── Transmission/
│   ├── Contract/        DocumentTransmitterInterface
│   ├── Dto/             DocumentRequest, DocumentResponse, DocumentOperation
│   └── Transport/       SoapTransport, HttpTransport, credenciais TLS
├── Xml/                 XmlSigner, XmlSignatureConfig
├── ValueObject/         DfeAccessKey, DfeAccessKeyType
└── resources/           XSDs e WSDLs locais

Uso em desenvolvimento (path local)

Para apontar para o pacote local sem publicar no Packagist, adicione ao composer.json do projeto consumidor:

{
    "repositories": [
        {
            "type": "path",
            "url": "../champs-fiscal",
            "options": {
                "symlink": true
            }
        }
    ],
    "require": {
        "betocampoy/champs-fiscal": "@dev"
    }
}

Após rodar composer update betocampoy/champs-fiscal, o Composer criará um symlink para o diretório local — qualquer alteração no pacote é imediatamente refletida no projeto consumidor sem necessidade de reinstalar.

Ajuste o url para o caminho relativo correto entre os dois projetos.

Publicação de nova versão

git add .
git commit -m "feat: adiciona suporte a NFS-e Nacional"
git tag v2.0.0
git push origin main --tags

Licença

MIT

betocampoy/champs-fiscal 适用场景与选型建议

betocampoy/champs-fiscal 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 26 次下载、GitHub Stars 达 0, 最近一次更新时间为 2026 年 04 月 23 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「php」 「soap」 「certificate」 「nfse」 「nfs-e」 「fiscal」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 betocampoy/champs-fiscal 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 betocampoy/champs-fiscal 我们能提供哪些服务?
定制开发 / 二次开发

基于 betocampoy/champs-fiscal 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 26
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 39
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-04-23