Uma vez instalado o aplicativo DFeMessengerService, será necessário em seu aplicativo Android, criar uma “conexão” entre seu aplicativo e o nosso serviço.
Para isso, segue abaixo um breve resumo da operação realizada em Xamarin com linguagem C#.
Foi criado uma Classe chamada DFeServiceConection que será transmitida a função BindService onde permitirá a conexão ao aplicativo criado, no caso DFeMessengerService.
Trecho que deverá constar em seus Activity’s nos métodos OnStart() e OnStop(), o código para permitir a conexão ao serviço e o encerramento do mesmo.
protected override void OnStart()
{
base.OnStart();
var dfeMessengerService = new
Intent("Br.Com.Vinco.iContDFe.AndroidService.DFeMessengerService");
_demoServiceConnection = new DFeServiceConnection(this);
BindService(dfeMessengerService, _demoServiceConnection,
Bind.AutoCreate);
}
protected override void OnDestroy()
{
base.OnDestroy();
if (_isBound) UnbindService(_demoServiceConnection);
_isBound = false;
}
Segue abaixo a classe auxiliar para gerenciar a conexão ao aplicativo com duas funções Conectar o serviço e Desconectar o serviço.
internal class DFeServiceConnection : Object, IServiceConnection
{
readonly ControleActivity _activity;
public DFeServiceConnection(ControleActivity activity)
{
_activity = activity;
}
public void OnServiceConnected(ComponentName name, IBinder service)
{
_activity._demoMessenger = new Messenger(service);
_activity._isBound = true;
}
public void OnServiceDisconnected(ComponentName name)
{
_activity._demoMessenger.Dispose();
_activity._demoMessenger = null;
_activity._isBound = false;
}
}
Segue abaixo classe auxiliar para gerenciar a conexão ao aplicativo com duas funções Conectar o serviço e Desconectar o serviço.
internal class DFeServiceConnection : Object, IServiceConnection
{
readonly ControleActivity _activity;
public DFeServiceConnection(ControleActivity activity)
{
_activity = activity;
}
public void OnServiceConnected(ComponentName name, IBinder service)
{
_activity._demoMessenger = new Messenger(service);
_activity._isBound = true;
}
public void OnServiceDisconnected(ComponentName name)
{
_activity._demoMessenger.Dispose();
_activity._demoMessenger = null;
_activity._isBound = false;
}
}
Por fim, também será necessário adicionar um Handler em cada Activity para permitir verificar a mensagem de retorno do nosso serviço. Exemplo:
internal class ReturnHandler : Handler
{
public override void HandleMessage(Message msg)
{
var motivo = string.Format("Motivo: {0}", msg.Data.GetString("Motivo"));
var statusWhat = string.Format("What: {0} || Status: {1}", msg.What,
msg.Data.GetInt("Status"));
}
}
Portanto, em cada Activity realizado em nosso exemplo, colocamos estes métodos que permitem realizar a conexão e as operações com o serviço.
Funcionalidades do DFeMessengerService
O serviço para Android do VincoDFe possui 12 funcionalidades para emissão de documentos eletrônicos no ambiente Android. Segue lista abaixo:
1 - RegistrarApp;
2 - VerificarRegistoApp;
3 - ForcarAtualizacaoMetaDados;
4 - EnviarNfce;
5-PrepararNfceOffLine;
6-EnviarNfceOffline;
7-VerificaArquivosOffline;
8-EnviarCancelamento;
9-EnviarInutilizacao;
10-ApagarNfceOffline;
11-VerificaNfce;
12-Ping;
Importante ressaltar a numeração, pois, é desta forma que o serviço identifica a operação solicitada, exemplo ao solicitar a função RegistrarApp deve-se informar o valor 1:
var msg = Message.Obtain(null, 1);
Segue a descrição de cada funcionalidade disponibilizada.
1 - RegistrarApp
Permite o registro da empresa ao serviço Android. Em sua chamada são necessários quatro parâmetros:
IdKeyEmpresa: IdKeyEmpresa da empresa no VincoDFe.- Tipo: String
Senha Digest: Informação fornecida pela Equipe Vinco para uso na aplicação Android – Tipo: String
Chave Privada: Obtida no site – Tipo: String
Posicao Chave Privada: Informação será fornecida junto com a chave privada. Cada chave privada terá uma posição (índice) – Tipo: Int
Exemplo de implementação:
- private Messenger demoMessenger;
- var returnMessage = new Messenger(new ReturnHandler());
- var b = new Bundle();
- var msg = Message.Obtain(null, 1);
- msg.ReplyTo = returnMessage;
- b.PutString("IdKeyEmpresa",”xxx-xxxx-xxxx-xxxx”);
- b.PutString("SenhaDigest",” xxxxxxxxxxxx”);
- b.PutInt("Posicao, x);
- b.PutString("ChavePrivada",”xxxxxxxxxxxx”);
- msg.Data = b;
- demoMessenger.Send(msg).
Exemplo de implementação Retorno:
internal class ReturnHandler : Handler
{
public override void HandleMessage(Message msg)
{
var motivo = string.Format("Motivo: {0}", msg.Data.GetString("Motivo"));
var status = msg.Data.GetInt("Status"));
}
}
Propriedades Retornadas:
Motivo: Mensagem da operação realizada. Tipo: String.
Status: Código de Status da operação. (Verificar Anexo I com as mensagens e os códigos retornados). Tipo: Int.
2 - VerificarRegistroApp
Utilizado para verificar se o serviço está registrado corretamente. Não exige parâmetros.
Exemplo de implementação:
- private Messenger demoMessenger;
- var returnMessage = new Messenger(new ReturnHandler());
- var msg = Message.Obtain(null, 2);
- msg.ReplyTo = returnMessage;
- demoMessenger.Send(msg).
Exemplo de implementação Retorno.
internal class ReturnHandler : Handler
{
public override void HandleMessage(Message msg)
{
var motivo = string.Format("Motivo: {0}", msg.Data.GetString("Motivo"));
var status = msg.Data.GetInt("Status"));
}
}
Propriedades Retornadas:
Motivo: Mensagem da operação realizada. Tipo: String
Status: Código de Status da operação. (Verificar Anexo I com as mensagens e os códigos retornados). – Tipo: Int
3 - ForcarAtualizacaoMetaDados
Utilizado para atualizar as informações da empresa no cache. Procedimento importante no momento para permitir a contingência OffLine da NFC-e.
Exemplo de implementação.
- private Messenger demoMessenger;
- var returnMessage = new Messenger(new ReturnHandler());
- var msg = Message.Obtain(null, 3);
- msg.ReplyTo = returnMessage;
- demoMessenger.Send(msg);
Exemplo de implementação Retorno.
internal class ReturnHandler : Handler
{
public override void HandleMessage(Message msg)
{
var motivo = string.Format("Motivo: {0}", msg.Data.GetString("Motivo"));
var status = msg.Data.GetInt("Status"));
}
}
Propriedades Retornadas:
Motivo: Mensagem da operação realizada. – Tipo: String.
Status: Código de Status da operação. (Verificar Anexo I com as mensagens e os códigos retornados). – Tipo: Int.
4 – EnviarNFCe
Utilizado para enviar NFCe de forma direta (não contingência).
Em sua chamada são necessários quatro parâmetros:
- IdKeyEmpresa: IdKeyEmpresa da empresa no VincoDFe.- Tipo: String.
- KeySistema: IdKeySistema da empresa no ConfigExtractor (Opcional) – Tipo: String.
- Posicao Chave Privada: Informação será fornecida junto com a chave privada. Cada chave privada terá uma posição (índice) – Tipo: Int.
- Chave Privada: Obtida no site – Tipo: String.
- XmlNFCe: XML com dados gerais da NFCe – Tipo: String.
Exemplo de implementação:
- private Messenger demoMessenger;
- var returnMessage = new Messenger(new ReturnHandler());
- var b = new Bundle();
- var msg = Message.Obtain(null, 4);
- b.PutString("IdKeyEmpresa",”xxx-xxxx-xxxx-xxxx”);
- b.PutString("KeySistema",”xxx-xxxx-xxxx-xxxx”);
- b.PutInt("Posicao, x);
- b.PutString("ChavePrivada",”xxxxxxxxxxxx”);
- b.PutString("XmlNFCe", “arquivo XML”);
- msg.Data = b;
- demoMessenger.Send(msg).
Exemplo de implementação Retorno:
internal class ReturnHandler : Handler
{
public override void HandleMessage(Message msg)
{
var ChaveDFe = msg.Data.GetString("ChaveDFe");
var Motivo = msg.Data.GetString("Motivo");
var UrlDanfe = msg.Data.GetString("UrlDanfe");
var Status = msg.Data.GetInt("Status ");
var XmlDFe = msg.Data.GetString("XmlDFe");
}
}
Propriedades Retornadas:
- Motivo: Mensagem da operação realizada. Tipo: String.
- Status: Código de Status da operação. (Verificar Anexo I com as mensagens e os códigos retornados). Tipo: Int.
- ChaveDFe: Chave da NFCe Emitida. Tipo: String.
- UrlDanfe: URL para consulta da NFCe. Tipo: String.
- XmlDFe: XML do DFe autorizado. Tipo:String.
5 – PrepararNfceOffLine
Utilizado para emitir a nota em contingência.
A função “prepara” um arquivo com a extensão “.offLine”, que deverá ser encaminhado posteriormente através da funcionalidade “EnviarNfceOffline”.
A pasta onde o arquivo é armazenado é gerenciado pelo serviço.
Para a correta operação desta função, é necessário que o sistema tenha autorizado uma NFC-e de forma direta (online), ao menos uma vez.
Em sua chamada são necessários 4 parâmetros:
- IdKeyEmpresa: IdKeyEmpresa da empresa no VincoDFe. - Tipo: String.
- Posicao Chave Privada: Informação será fornecida junto com a chave privada. Cada chave privada terá uma posição (índice) - Tipo: Int.
- Chave Privada: Obtida no site - Tipo: String.
- XmlNFCe: XML com dados gerais da NFCe – Tipo: String.
Exemplo de implementação:
- private Messenger demoMessenger;
- var returnMessage = new Messenger(new ReturnHandler());
- var b = new Bundle();
- var msg = Message.Obtain(null, 5);
- b.PutString("IdKeyEmpresa",”xxx-xxxx-xxxx-xxxx”);
- b.PutInt("Posicao, x);
- b.PutString("ChavePrivada",”xxxxxxxxxxxx”);
- b.PutString("XmlNFCe", “arquivo XML”);
- msg.Data = b;
- demoMessenger.Send(msg).
Exemplo de implementação Retorno.
internal class ReturnHandler : Handler
{
public override void HandleMessage(Message msg)
{
var ChaveDFe = msg.Data.GetString("ChaveDFe");
var Motivo = msg.Data.GetString("Motivo");
var UrlDanfe = msg.Data.GetString("UrlDanfe");
var Status = msg.Data.GetInt("Status ");
var XmlDFe = msg.Data.GetString("XmlDFe");
}
}
Propriedades Retornadas:
Motivo: Mensagem da operação realizada. Tipo: String
Status: Código de Status da operação. (Verificar Anexo I com as mensagens e os códigos retornados). – Tipo: Int
ChaveDFe: Chave da NFCe Emitida. – Tipo:String
UrlDanfe: URL para consulta da NFCe. – Tipo: String
XmlDFe: XML do DFe autorizado. – Tipo: String
6 – EnviarNfceOffLine
Utilizado para transmitir a nota preparada em contingência. A função encaminha o arquivo com a extensão “.offLine”. Tendo o retorno igual a função EnviarNFCe. Em sua chamada são necessários 4 parâmetros:
- IdKeyEmpresa: IdKeyEmpresa da empresa no VincoDFe.
- Posicao Chave Privada: Informação será fornecida junto com a chave privada. Cada chave privada terá uma posição (índice).
- Chave Privada: Obtida no site.
- ChaveDFe: Chave da NFCe gerada em contingência.
Exemplo de implementação:
- private Messenger demoMessenger;
- var returnMessage = new Messenger(new ReturnHandler());
- var b = new Bundle();
- var msg = Message.Obtain(null, 6);
- b.PutString("IdKeyEmpresa",”xxx-xxxx-xxxx-xxxx”);
- b.PutInt("Posicao, x);
- b.PutString("ChavePrivada",”xxxxxxxxxxxx”);
- b.PutString("ChaveDFe ", “Chave 44 posições da NFCe”);
- msg.Data = b;
- demoMessenger.Send(msg);
Exemplo de implementação Retorno:
internal class ReturnHandler : Handler
{
public override void HandleMessage(Message msg)
{
var ChaveDFe = msg.Data.GetString("ChaveDFe");
var Motivo = msg.Data.GetString("Motivo");
var UrlDanfe = msg.Data.GetString("UrlDanfe");
var Status = msg.Data.GetInt("Status ");
var XmlDFe = msg.Data.GetString("XmlDFe");
}
}
Propriedades Retornadas:
- Motivo: Mensagem da operação realizada. Tipo: String.
- Status: Código de Status da operação. (Verificar Anexo I com as mensagens e os códigos retornados). – Tipo: Int.
- ChaveDFe: Chave da NFCe Emitida. – Tipo:String.
- UrlDanfe: URL para consulta da NFCe. – Tipo: String.
- XmlDFe: XML do DFe autorizado. – Tipo: String.
7 –VerificaArquivosOffLine
Utilizado para Listar os arquivos preparados em contingência. Não exige parâmetros.
Exemplo de implementação:
- private Messenger demoMessenger;
- var returnMessage = new Messenger(new ReturnHandler());
- var msg = Message.Obtain(null, 7);
- msg.ReplyTo = returnMessage;
- demoMessenger.Send(msg).
Exemplo de implementação Retorno:
internal class ReturnHandler : Handler
{
public override void HandleMessage(Message msg)
{
var listaChaves = msg.Data.GetStringArrayList("Chaves");
var quantidade = msg.Data.GetInt("Quantidade")
}
}
Propriedades Retornadas:
Chaves: Array com as Chaves das NFCe’s preparadas em contingência, Array Tipo String.
Quantidade: Quantidade de notas preparadas em contingência - Tipo: Int.
8 – EnviarCancelamento
Utilizado para realizar o Cancelamento do DFe. Em sua chamada são necessários oito parâmetros:
- IdKeyEmpresa: IdKeyEmpresa da empresa no VincoDFe. - Tipo: String;
- Posicao Chave Privada: Informação será fornecida junto com a chave privada. Cada chave privada terá uma posição (índice) – Tipo: String;
- Chave Privada: Obtida no site.- Tipo: String;
- Chave: Chave do DFe a ser cancelado – Tipo:String;
- Ambiente: 1 – Produção ou 2 – Teste – Tipo: Int;
- Protocolo: Protocolo de autorização do DFe – Tipo: Long;
- DhEvento: Data de Hora do Cancelamento – Tipo: String;
- Motivo – Justificativa do Cancelamento – Tipo: String.
Exemplo de implementação:
- private Messenger demoMessenger;
- var returnMessage = new Messenger(new ReturnHandler());
- var b = new Bundle();
- var msg = Message.Obtain(null, 8);
- b.PutString("IdKeyEmpresa",”xxx-xxxx-xxxx-xxxx”);
- b.PutInt("Posicao, x);
- b.PutString("ChavePrivada",”xxxxxxxxxxxx”);
- b.PutString("Chave",”xxxxxxxxxxxx”);
- b.PutInt("Ambiente", "2"); // 1 - Produção 2 - Testes
- b.PutLong("Protocolo", "12345678"); //Número de Protocolo de Autorização
- b.PutString("DhEvento", DateTime.Now.ToString("yyyy-MM-ddTHH:mm:sszzz"));
- b.PutString("Motivo", "Teste de Cancelamento);
- msg.Data = b;
- demoMessenger.Send(msg);
Exemplo de implementação Retorno:
internal class ReturnHandler : Handler
{
public override void HandleMessage(Message msg)
{
var ChaveEvento= msg.Data.GetString("ChaveEvento");
var Motivo = msg.Data.GetString("Motivo");
var IdEvento = msg.Data.GetLong("IdEvento");
var Status = msg.Data.GetInt("Status ");
var XmlEvento= msg.Data.GetString("XmlEvento");
var ProtocoloEvento = msg.Data.GetLong("ProtocoloEvento ")
}
}
Propriedades Retornadas:
- Motivo: Mensagem da operação realizada.- Tipo: Sting;
- Status: Código de Status da operação. (Verificar Anexo I com as mensagens e os códigos retornados). – Tipo:Int;
- ChaveEvento: Chave da NFCe Emitida. – Tipo: String;
- IdEvento: Id do Evento Retornado. – Tipo: Long;
- UrlDanfe: URL para consulta da NFCe. – Tipo: String;
- XmlEvento: XML do Evento Registrado. – Tipo: String;
- ProtocoloEvento: Protocolo do Evento Registrado. – Tipo: Long.
9 – Enviar Inutilização
Utilizado para realizar a Inutilização do DF-e. Em sua chamada são necessários onze parâmetros:
- IdKeyEmpresa: IdKeyEmpresa da empresa no VincoDFe. – Tipo: String
- Posicao Chave Privada: Informação será fornecida junto com a chave privada. Cada chave privada terá uma posição (índice) – Tipo: Int
- Chave Privada: Obtida no site. – Tipo: String
- Ambiente: 1 – Produção ou 2 – Teste - Tipo: Int
- Serie – Serie do Número a ser Inutilizado - Tipo: Int
- Cuf – Código da UF do Emitente - Tipo: Int
- Ano – Ano da Operação. Exemplo: 17 - Tipo: Int
- Cnpj - CNPJ do Emitente - Tipo: Long
- Motivo – Justificativa da Inutilização. – Tipo: String
- NumeroInicial – Número Inicial do Primeiro número a ser Inutilizado - Tipo: Int
- NumeroFinal – Número Final do Último número a ser Inutilizado. - Tipo: Int
Exemplo de implementação:
- private Messenger demoMessenger;
- var returnMessage = new Messenger(new ReturnHandler());
- var b = new Bundle();
- var msg = Message.Obtain(null, 9);
- b.PutString("IdKeyEmpresa",”xxx-xxxx-xxxx-xxxx”);
- b.PutInt("Posicao, x);
- b.PutString("ChavePrivada",”xxxxxxxxxxxx”);
- b.PutInt("Serie", 1); // 1 - Produção 2 - Testes
- b.PutLong("Cnpj", 012345678901234);
- b.PutInt("Ambiente", "2"); // 1 - Produção 2 - Testes
- b.PutInt("Cuf", 35); //Número de Protocolo de Autorização
- b.PutInt("Ano", 17); //Número de Protocolo de Autorização
- b.PutString("Motivo", "Teste de Inutilizção);
- b.PutInt("NumeroInicial", 1);
- b.PutInt("NumeroFinal", 2);
- msg.Data = b;
- demoMessenger.Send(msg).
Exemplo de implementação Retorno.
internal class ReturnHandler : Handler
{
public override void HandleMessage(Message msg)
{
var Motivo = msg.Data.GetString("Motivo");
var Status = msg.Data.GetInt("Status ");
var XmlInutilizacao = msg.Data.GetString("XmlInutilizacao");
}
}
Propriedades Retornadas
Motivo: Mensagem da operação realizada. – Tipo: String
Status: Código de Status da operação. (Verificar Anexo I com as mensagens e os códigos retornados). – Tipo: Int
XmlInutilizacao: XML da Inutilização – Tipo: String
10 – ApagarNfceOffLine
Utilizado para apagar os arquivos preparados OffLine, uma vez que tenham sido transmitidos. Em sua chamada é necessário apenas um parâmetro.
- ChaveDFe: Chave da NFCe contida no arquivo que deverá ser excluído. – Tipo: String
Exemplo de implementação:
- private Messenger demoMessenger;
- var returnMessage = new Messenger(new ReturnHandler());
- var b = new Bundle();
- var msg = Message.Obtain(null, 10);
- b.PutString("ChaveDFe",”xxxxxxxxxxxx”);
- msg.Data = b;
- demoMessenger.Send(msg)
Exemplo de implementação Retorno:
internal class ReturnHandler : Handler
{
public override void HandleMessage(Message msg)
{
var motivo = string.Format("Motivo: {0}", msg.Data.GetString("Motivo"));
var status = msg.Data.GetInt("Status"));
}
}
Propriedades Retornadas:
Motivo: Mensagem da operação realizada. – Tipo: String
Status: Código de Status da operação. (Verificar Anexo I com as mensagens e os códigos retornados). – Tipo: Int
11 – VerificaNfce
Utilizado para verificar NFC-e em caso de exceção ou retorno inconclusivo da SEFAZ.
São seus parâmetros:
- IdKeyEmpresa: IdKeyEmpresa da empresa no VincoDFe.- Tipo: String
- KeySistema: IdKeySistema da empresa no ConfigExtractor (Opcional) – Tipo: String
- Posicao Chave Privada: Informação será fornecida junto com a chave privada.Cada chave privada terá uma posição (índice) – Tipo: Int
- Chave Privada: Obtida no site – Tipo: String
- XmlNFCe: XML com dados gerais da NFCe – Tipo: String
Exemplo de implementação:
- private Messenger demoMessenger;
- var returnMessage = new Messenger(new ReturnHandler());
- var b = new Bundle();
- var msg = Message.Obtain(null, 4);
- b.PutString("IdKeyEmpresa",”xxx-xxxx-xxxx-xxxx”);
- b.PutString("KeySistema",”xxx-xxxx-xxxx-xxxx”);
- b.PutInt("Posicao, x);
- b.PutString("ChavePrivada",”xxxxxxxxxxxx”);
- b.PutString("XmlNFCe", “arquivo XML”);
- msg.Data = b;
- demoMessenger.Send(msg).
Exemplo de implementação Retorno:
internal class ReturnHandler : Handler
{
public override void HandleMessage(Message msg)
{
var ChaveDFe = msg.Data.GetString("ChaveDFe");
var Motivo = msg.Data.GetString("Motivo");
var UrlDanfe = msg.Data.GetString("UrlDanfe");
var Status = msg.Data.GetInt("Status ");
var XmlDFe = msg.Data.GetString("XmlDFe");
}
}
Propriedades Retornadas:
- Motivo: Mensagem da operação realizada. Tipo: String.
- Status: Código de Status da operação. (Verificar Anexo I com as mensagens e os códigos retornados). Tipo: Int
- ChaveDFe: Chave da NFCe Emitida. Tipo: String.
- UrlDanfe: URL para consulta da NFCe. Tipo: String.
- XmlDFe: XML do DFe autorizado. Tipo:String.
12 – Ping
Utilizado para verificar se o serviço está onlinte. Em sua chamada não é necessário parâmetros.
Endereco: Endereço da URL da Api.
Exemplo de implementação:
- private Messenger demoMessenger;
- var returnMessage = new Messenger(new ReturnHandler());
- var msg = Message.Obtain(null, 12);
- demoMessenger.Send(msg);
Exemplo de implementação Retorno:
internal class ReturnHandler : Handler
{
public override void HandleMessage(Message msg)
{
var motivo = string.Format("Motivo: {0}", msg.Data.GetString("Motivo"));
var status = msg.Data.GetInt("Status"));
}
}
Propriedades Retornadas.
Motivo: Mensagem da operação realizada. – Tipo: String
Status: Código de Status da operação. (Verificar Anexo I com as mensagens e os códigos retornados). – Tipo: Int
Anexo I – Tabela de Código de Status e Mensagens retornadas pela Solução.
Caso a transmissão com a SEFAZ ocorra com êxito serão retornados no campo Status o e Motivo o campo código Cstat e XMotivo retornados pelo Fisco nos processo de Autorização, Cancelamento, Inutilização e etc.
Status | Motivo | Operação |
-1000 |
Registro de aplicativo falhou, faltam dados. |
RegistrarApp |
200 | Registro de aplicativo aceito | RegistrarApp |
-200 | Exceção Diversa | RegistrarApp |
-900 | Exceção não tratada | RegistrarApp |
300 | Registro OK! |
VerificarRegistoApp, ForcarAtualizacaoMetaDados |
-1001 |
Registro de aplicativo falho, faltam dados, refaça o registro de aplicativo |
Validar em Todas as operações |
-9999 | Exceção não tratada | Validar em Todas as operações |
101 |
XmlNFCe ou Chave Df-e não informado |
EnviarNfce, VerificaNfce, |
99 | Arquivo preparo OffLine | PrepararNfceOffLine |
999 | What/Operação desconhecido | Todas as operações |
- Detalhes
- Escrito por Anderson
- Publicado: 08 Julho 2019
- Última atualização: 22 Agosto 2019