Mostrando postagens com marcador java. Mostrar todas as postagens
Mostrando postagens com marcador java. Mostrar todas as postagens

terça-feira, 27 de março de 2012

Substituindo Sun Base64Encoder com Apache Commons Codec

Nesse post eu ensinei assinar o RPS da prefeitura de São Paulo, na época eu utilizei a API Sun Base64Encoder para codificar a assinatura em Base64, mas como ela é uma API proprietária da Sun pode ser que não esteja disponível em futuras versões do Java, então você pode substituí-la pelo Apache Base64, basta fazer o seguinte:

Primeiro baixe o Apache Commons Codec.
Coloque o jar do commons codec no classpath da sua aplicação, ou se você utiliza o Netbeans, crie uma nova biblioteca e inclua no seu projeto.

Importe o Apache Commons Codec:

Altere o método signASCII:

A biblioteca Apache Commons Codec implementa outros encoders e decoders, vale a pena utilizá-la para outras situações.

segunda-feira, 23 de janeiro de 2012

Assinando o RPS da NFS-e de São Paulo

Há algum tempo atrás eu tive de implementar uma interface para emissão de NFS-e na prefeitura de São Paulo, e na época pesquisando em alguns forums vi que bastante gente tinha problema para gerar a assinatura do RPS que vai dentro da tag assinatura.
Após algumas pesquisas na internet e no manual da prefeitura eu consegui gerar essa assinatura, abaixo vou mostrar como fazer isso em java utilizando um certificado A1. O que veremos nesse post é como gerar o hash de assinatura de RPS (conteúdo da tag assinatura) e não como assinar o XML para envio.
Antes de mais nada você precisa ter a sequencia de caracateres ASCII a ser assinada, se não sabe como gerá-la consulte o manual NFe-Web-Service-v2-2 da prefeitura da página 23 a 25, pois lá explica detalhadamente como montar essa sequencia.

Primeiro importe as classes  Signature e BASE64Encoder


Agora inclua o método que faz a assinatura da sequencia ASCII


Primeiro é obtida uma instância do algorítimo RSA-SHA1, em seguida é informada a chave privada do certificado, a sequencia é convertida para bytes e finalmente o HASH é gerado.
O método getPrivateKey pode ser substituido pelo seu próprio método que obtem a chave privada do certificado, ou se preferir pode utilizar o exemplo abaixo:

Espero que isso ajude vocês em seus projetos de NFS-e para São Paulo. Valeu!!!