DarumaMobileSAT - DARUMA a biblioteca “DarumaMobileSAT.jar” no local em que descompactou, e...

10
1 DarumaMobileSAT Utilizando a biblioteca Daruma em Android para SAT Escovadores de Bits, Vamos ver aqui um passo a passo de como adicionar e usar a biblioteca Android para o SAT Daruma, com alguns exemplos que mostraremos, você poderá realizar o uso de qualquer outro método da biblioteca. Antes de verificarmos o uso dos métodos, saiba que a biblioteca possui os métodos especificados pela SEFAZ e você pode verificar esta especificação que fica no site da SEFAZ, clicando no link a seguir: http://www.fazenda.sp.gov.br/sat/downloads/arquivo.asp desça a página até Especificação de Requisitos do SAT, o primeiro arquivo da lista é o arquivo mais atual. Pré-requisitos: Para seguir este passo a passo, você precisa: - Ter o eclipse instalado em seu computador e também tenha um projeto Android criado para apenas adicionar os comandos; - Baixe a biblioteca DarumaMobileSAT: http://www.desenvolvedoresdaruma.com.br/home/downloads/Site_2011/SAT/DLL_SO/DarumaMobileSAT.zip Descompacte o arquivo numa pasta a sua escolha, para importa-lo logo mais. Parte 1: A primeira coisa que precisamos fazer no projeto é importar a nossa biblioteca para dentro dele, vamos mostrar aqui como se faz isso de um projeto já criado no eclipse, se você esta usando outra IDE, o processo é similar. Para adicionar a nossa biblioteca ao seu projeto é só seguir os seguintes passos: Clique com o botão direito em cima do seu projeto, clique em “Build Path” depois em “Add External Archives”.

Transcript of DarumaMobileSAT - DARUMA a biblioteca “DarumaMobileSAT.jar” no local em que descompactou, e...

1

DarumaMobileSAT Utilizando a biblioteca Daruma em Android para SAT

Escovadores de Bits,

Vamos ver aqui um passo a passo de como adicionar e usar a biblioteca Android para o SAT Daruma, com alguns exemplos que mostraremos, você poderá realizar o uso de qualquer outro método da biblioteca.

Antes de verificarmos o uso dos métodos, saiba que a biblioteca possui os métodos especificados pela SEFAZ e você pode verificar esta especificação que fica no site da SEFAZ, clicando no link a seguir: http://www.fazenda.sp.gov.br/sat/downloads/arquivo.asp desça a página até Especificação de Requisitos do SAT, o primeiro arquivo da lista é o arquivo mais atual.

Pré-requisitos: Para seguir este passo a passo, você precisa: - Ter o eclipse instalado em seu computador e também tenha um projeto Android criado para apenas adicionar os comandos; - Baixe a biblioteca DarumaMobileSAT: http://www.desenvolvedoresdaruma.com.br/home/downloads/Site_2011/SAT/DLL_SO/DarumaMobileSAT.zip

Descompacte o arquivo numa pasta a sua escolha, para importa-lo logo mais.

Parte 1:

A primeira coisa que precisamos fazer no projeto é importar a nossa biblioteca para dentro dele, vamos mostrar aqui como se faz isso de um projeto já criado no eclipse, se você esta usando outra IDE, o processo é similar.

Para adicionar a nossa biblioteca ao seu projeto é só seguir os seguintes passos:

Clique com o botão direito em cima do seu projeto, clique em “Build Path” depois em “Add External Archives”.

2

Selecione a biblioteca “DarumaMobileSAT.jar” no local em que descompactou, e clique em abrir.

Na pasta do seu projeto vá em “Referenced Libraries”, clique na biblioteca com o botão direito e no menu “Build Path”escolha “Configure Build Path...”.

3

Em “Order and Export” selecione a DarumaMobileSAT e depois pressione OK.

Feito isso, vamos adicionar este import, para finalizar a importação da biblioteca. No MainActivity adicione a linha abaixo:

import br.com.daruma.frameworksat.mobile.DarumaMobileSAT;

Parte 2:

Agora vamos criar um objeto do tipo DarumaMobileSAT que deve ser criado dentro da nossa classe principal , incluindo a seguinte linha.

DarumaMobileSAT ds100i;

4

Em seguida vamos instanciar este objeto, dentro do nosso onCreate, usando um “try catch”. Informe como parâmetro de DarumaMobileSAT o “context” utilizado na sua aplicação, no exemplo utilizamos o “this” por ser a própria MainActivity o nosso “context”.

try { ds100i = new DarumaMobileSAT(this); } catch (Exception e) { String msg = e.getMessage(); AlertDialog.Builder Erro = new AlertDialog.Builder(MainActivity.this); Erro.setMessage("Erro: "+ msg); Erro.setNeutralButton("OK", null); Erro.show(); }

A imagem a seguir mostra a implementação no código.

Parte 3:

Depois de instanciar, podemos chamar os métodos do SAT que estão criados através do objeto “ds100i”. Lembrando que os tipos das variáveis, parâmetros e a sequencia dos métodos da DarumaMobileSAT seguem as especificações da SEFAZ, que está no link lá em cima.

Observação: Ao executar a primeira comunicação que o nosso aplicativo faz com o SAT, é necessário que o usuário dê permissão. Sem nenhum tratamento vai aparecer na tela uma solicitação de permissão do aplicativo com o

dispositivo USB, dê permissão para o aplicativo, feche e abra novamente para conseguir usar. Mas se fizer um

tratamento, pode conceder esta permissão sem precisar fechar a aplicação.

5

Veja um exemplo de um método simples do SAT, de Consulta Status do SAT, aqui codificado em um botão:

btnConsultar.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { try { String msg = String.valueOf(ds100i.ConsultarSAT(654321)); AlertDialog.Builder alert = new AlertDialog.Builder(MainActivity.this); alert.setMessage("Retorno: " + msg);

alert.setNeutralButton("OK", null); alert.show(); } catch (Exception ex) { msg = ex.getMessage();

AlertDialog.Builder Erro = new AlertDialog.Builder(MainActivity.this); Erro.setMessage("Erro: " + msg); Erro.setNeutralButton("OK", null); Erro.show(); } }; });

O método ConsultarSAT só tem um parâmetro do tipo int, que é o número da sessão. Esse número é um código aleatório com seis dígitos gerado pelo Aplicativo Comercial - AC. Veja o resultado da execução deste botão na imagem abaixo.

6

Agora vamos ver como usar o método EnviarDadosVenda e entender melhor o retorno que o SAT nos dá. Incluímos em outro botão:

btnVender.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) {

try { String strXmlVenda = "<CFe><infCFe versaoDadosEnt='0.07'><ide><CNPJ>16716114000172</CNPJ><signAC>SGR-SAT SISTEMA DE GESTAO E RETAGUARDA DO SAT</signAC><numeroCaixa>001</numeroCaixa></ide><emit><CNPJ>45170289000125</CNPJ><IE>688023460111</IE> <cRegTribISSQN>3</cRegTribISSQN><indRatISSQN>N</indRatISSQN></emit><dest></dest><det nItem='001'><prod><cProd>001</cProd><xProd>Pao de forma</xProd><CFOP>5102</CFOP><uCom>kg</uCom><qCom>1.0000</qCom><vUnCom>1.000</vUnCom><indRegra>A</indRegra></prod><imposto><ICMS><ICMS00><Orig>0</Orig><CST>00</CST><pICMS>1.00</pICMS></ICMS00></ICMS><PIS><PISAliq><CST>01</CST><vBC>1.00</vBC><pPIS>1.0000</pPIS></PISAliq></PIS><PISST><vBC>1.00</vBC><pPIS>1.0000</pPIS></PISST><COFINS><COFINSAliq><CST>01</CST><vBC>1.00</vBC><pCOFINS>1.0000</pCOFINS></COFINSAliq></COFINS></imposto></det><total><DescAcrEntr><vDescSubtot>0.00</vDescSubtot></DescAcrEntr><vCFeLei12741>12.00</vCFeLei12741></total><pgto><MP><cMP>01</cMP><vMP>1.00</vMP></MP></pgto><infAdic><infCpl>Obrigada e volte sempre!</infCpl></infAdic></infCFe></CFe>";

String msg = String.valueOf(ds100i.EnviarDadosVenda(123456, strCodAtivacao, strXmlVenda));

retVenda = msg.split("\\|"); AlertDialog.Builder alert = new AlertDialog.Builder(MainActivity.this); alert.setMessage("Retorno: " + retVenda[9]);

alert.setNeutralButton("OK", null); alert.show(); } catch (Exception ex) { String msg = ex.getMessage();

AlertDialog.Builder Erro = new AlertDialog.Builder(MainActivity.this);

Erro.setMessage("Erro: " + msg); Erro.setNeutralButton("OK", null); Erro.show(); } }; });

7

Cada método tem um padrão de retorno diferente, que pode ser consultado direto na legislação da SEFAZ, o link desta legislação esta no inicio deste STK. Veja um exemplo de retorno, o do comando de venda que acabamos de realizar, vamos usa-lo para explicar como ele é montado:

Vejam que ele vem criptografado em sua maior parte, e as informações são separadas pelo caractere “|” (pipe). No trecho do código “retVenda = msg.split("\\|");” estamos pegando o retorno separado a cada caractere “I” encontrado, atribuindo o conteúdo ao array retVenda. Por exemplo, se você quer o arquivo

8

base64 do xml de retorno do sat, neste caso vai corresponder a posição retVenda[7], a chave de consulta por sua vez, ficaria na posição 9.

E agora vamos ao significado de cada retorno dado pelo SAT no exemplo dado:

846562|06000|0000|EMITIDO COM SUCESSO|||PENGZT48aW...U+PC9DRmU+|20161213105226|CFe3516124517028900012559900008605000

2459772908|1.00||hA5UkXIOer...OK9J9xtZfg==

846562 - Número de sessão aleatório gerado pelo AC (Aplicativo Comercial) usado no envio de comando.

06000 - Código de retorno, indica “Emitido com sucesso” veja a tabela completa dos retornos, disponível na especificação do SAT no item 6.2.

0000 - Em caso de alerta ou rejeição da nota, este código é substituído por um dentre os possíveis códigos de retorno descritos no item 6.3.1 da especificação do SAT, nos outros casos retorna o código - “0000”.

EMITIDO COM SUCESSO - Mensagem referente ao código de retorno, neste caso o 06000.

Os dois campos seguintes são respectivamente o código e a mensagem da SEFAZ de aviso ao usuário, neste caso como não houve nenhuma mensagem, eles estão vazios.

O retorno que vai de “PENGZT48aW5m...” até “...cmU+PC9DRmU+” corresponde ao xml de resposta em base64, fazendo a sua decodificação da base64 ficaria assim: <CFe><infCFe Id="CFe35161245170289000125599000086050002459772908" versao="0.07" versaoDadosEnt="0.07" versaoSB="010001"><ide><cUF>35</cUF><cNF>977290</cNF><mod>59</mod><nserieSAT>900008605</nserieSAT><nCFe>000245</nCFe><dEmi>20161213</dEmi><hEmi>105226</hEmi><cDV>8</cDV><tpAmb>2</tpAmb><CNPJ>16716114000172</CNPJ><signAC>SGR-SAT SISTEMA DE GESTAO E RETAGUARDA DO SAT</signAC><assinaturaQRCODE>hA5UkXIOerUAyo2yLY+98crZXWd8hUdC5JkSrBJ5wTkFIl9mYschNg6DKLN6fSKGdS30LZ8Rb89cXx826l6b5bbm90dCEzh9WJ28VYs3EGqoR9tjUYNBnKqnC9ht6ZxOOWo9y5v6b7ty1gojpFdPhS8lrUHcj8SzJO462nKptMm5iY4t4nfXS+6cCchgbKZ2JwgnjC4Znvs4te8S+OTAGNKVleDgg6thrEXxJ2ajeGBm+rM+Db9pWts6Sr/V93HI3mNH7nOY4f+39Hui1AkZZnrN8pMSQyByuUaAZpxHVIBKr3vIpsvHQlCIIFXuaECZ4ctmJu8MI09dOK9J9xtZfg==</assinaturaQRCODE><numeroCaixa>001</numeroCaixa></ide><emit><CNPJ>45170289000125</CNPJ><xNome>DARUMA TELECOMUNICACOES E INFORMATICA S/A</xNome><xFant>URMET DARUMA</xFant><enderEmit><xLgr>AVENIDA INDEPENDENCIA</xLgr><nro>3500</nro><xBairro>LOT INDUSTRIAL</xBairro><xMun>TAUBATE</xMun><CEP>12032000</CEP></enderEmit><IE>688023460111</IE><cRegTrib>3</cRegTrib><cRegTribISSQN>3</cRegTribISSQN><indRatISSQN>N</indRatISSQN></emit><dest/><det nItem="1"><prod><cProd>001</cProd><xProd>Pao de forma</xProd><CFOP>5102</CFOP><uCom>kg</uCom><qCom>1.0000</qCom><vUnCom>1.000</vUnCom><vProd>1.00</vProd><indRegra>A</indRegra><vItem>1.00</vItem></prod><imposto><ICMS><ICMS00><Orig>0</Orig><CST>00</CST><pICMS>1.00</pICMS><vICMS>0.01</vICMS></ICMS00></ICMS><PIS><PISAliq><CST>01</CST><vBC>1.00</vBC><pPIS>1.0000</pPIS><vPIS>1.00</vPIS></PISAliq></PIS><PISST><vBC>1.00</vBC><pPIS>1.0000</pPIS><vPIS>1.00</vPIS></PISST><COFINS><COFINSAliq><CST>01</CST><vBC>1.00</vBC><pCOFINS>1.0000</pCOFINS><vCOFINS>1.00</vCOFINS></COFINSAliq></COFINS></imposto></det><total><ICMSTot><vICMS>0.01</vICMS><vProd>1.00</vProd><vDesc>0.00</vDesc><vPIS>1.00</vPIS><vCOFINS>1.00</vCOFINS><vPISST>1.00</vPISST><vCOFINSST>0.00</vCOFINSST><vOutro>0.00</vOutro></ICMSTot><vCFe>1.00</vCFe><DescAcrEntr/><vCFeLei12741>12.00</vCFeLei12741></total><pgto><MP><cMP>01</cMP><vMP>1.00</vMP></MP><vTroco>0.00</vTroco></pgto><infAdic><infCpl>Obrigada e volte sempre!</infCpl><obsFisco xCampo="xCampo1"><xTexto>xTexto1</xTexto></obsFisco></infAdic></infCFe><Signature xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/><SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/><Reference URI="#CFe35161245170289000125599000086050002459772908"><Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/><Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><DigestValue>+a/MCpx8carmAY8a1owIPyD92ik87YO1NxeSSILFQgM=</DigestValue></Reference></SignedInfo><SignatureValue>Zf1crHEkgd/aVm8H9MrdbaKKMDn/BMxRsWEv3qEE0KI2aiofN2IT3At8e4Md37hcyRQJQ+UAG66w+tV9v6lySVLNaYhwCqo1/XDyHLex22Nva28q4LPlwPkirrtZDgk3jzHNU7UFHmbEhtAN2LG9CpZndlQkRIA1WzKFiARKJHoZ8Jozr6DZaA92RbI/lm3V5EtDLoQADWaQRZhjrXBUbpLr349Y0A7Q7zQ0tAcv3mqGVa6hTdXnapgltHWQTvVmaq0E40iOwP6bFoLrADTzqX//i56wY8252vCDICH+sbAmyaZQEQfXV1tspifP7DKXazsQanyVQrYeDZDQ/U3uPw==</SignatureValue><KeyInfo><X509Data><X509Certificate>MIIGwTCCBKmgAwIBAgIJAR73

9

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</X509Certificate></X509Data></KeyInfo></Signature></CFe>

20161213105226 - Data e hora da emissão do cupom.

CFe35161245170289000125599000086050002459772908 - Chave de consulta do cupom.

1.00 - Valor total do cupom.

O próximo parâmetro esta em branco, pois não identificamos o consumidor, caso contrário estaria o valor do CPF ou CNPJ do consumidor neste campo.

hA5UkXIOer...OK9J9xtZfg== - Corresponde a assinatura do XML, impressa no QRCode e finaliza a resposta.

Desta forma vimos como realizar as chamadas aos métodos de nossa biblioteca SAT e como tratar as respostas. Basta agora aplicar esse conceito que vimos aos demais métodos e implementar em sua aplicação para realizar vendas com o SAT Daruma.

Guia de métodos da DMF SAT

Conforme especificação da SEFAZ, os métodos disponibilizados pela biblioteca de comandos são os seguintes:

AssociarAssinatura (int numeroSessao, String codigoAtivacao, StringCNPJ, String AssinaturaCNPJs): String AtivarSAT (int numeroSessao, int subComado, String codigoAtivacao, String CNPJ, int cUF): String AtualizarSoftwareSAT (int numeroSessao, String codigoAtivacao): String BloquearSAT (int numeroSessao, String codigoAtivacao): String CancelarUltimaVenda (int numeroSessao, String codigoAtivacao, Stringchave, String dadosCancelamento): String ComunicarCertificadoICPBRASIL (int numeroSessao, String codigoAtivacao, String certificado): String ConfigurarInterfaceDeRede (int numeroSessao, String codigoAtivacao, String dadosConfiguracao): String

10

ConsultarNumeroSessao (int numeroSessao, String codigoAtivacao, int cNumeroSessao): String ConsultarSAT (int numeroSessao): String ConsultarStatusOperacional (int numeroSessao, String codigoAtivacao): String DesbloquearSAT (int numeroSessao, String codigoAtivacao): String EnviarDadosVenda (int numeroSessao, String codigoAtivacao, String dadosVenda): String ExtrairLogs (int numeroSessao, String codigoAtivacao): String TesteFimAFim (int numeroSessao, String codigoAtivacao, String dadosVendas): String TrocarCodigoDeAtivacao (int numeroSessao, String codigoAtivacao, int opcao, String novoCodigo, String confirmaNovoCodigo): String Possuímos ainda um método extra de consulta da Versão da Biblioteca de comandos, ele não possui parâmetros e retorna apenas a versão: regRetornarVersaoDriver(): String

Se tiver alguma dúvida e/ou dificuldade, entre em contato com a nossa equipe de suporte ao desenvolvedor.

E-mails:

[email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected]

Skypes:

suporte_daruma, daruma.desenvolvedores, desenvolvedores_daruma, desenvolvedores.daruma, desenvolvedores_suporte_daruma, suporte_desenvolvedores_daruma, suporte_desenvolvedores_daruma, suporte.daruma, ddc_suporte_daruma, desenvolvedores_kiosk, claudenir_andrade