adrbarros / clisitef Goto Github PK
View Code? Open in Web Editor NEWExemplo básico de comunicação via DLL com TEF Dedicado SiTef (Software Express)
Exemplo básico de comunicação via DLL com TEF Dedicado SiTef (Software Express)
Bom dia tudo bem.
Eu converti o codigo do C# para o vb.net ele funciona tudo ok , abre os parâmetros passa no cartao finaliza no debito e no credito so que estou tendo dificuldade na seguinte parte segue codigo.
Nessa Sub "Continuarequisicao" ele da problema nessa parte do codigo ele fica lendo o Stats e passando o valor "tipocampo"
mas quando ele termina chega ali com um erro " -9 " e nao sai fica num loop eterno alguem sabe oque pode ser ?
Private Function ContinuarRequisicao() As Integer
Dim valorBuffer As Byte() = New Byte(19999) {}
Dim result As Integer
Dim continua As Integer = 0
Dim taxas As Integer = 1
Dim captionMenu As String = ""
Dim captionCarteiraDigital As String = ""
Dim interromper As Boolean = False
Dim Proximocomando As Integer
Dim tipoCampo As Long
Dim tamanhoMinimo As Short
Dim tamanhoMaximo As Short
Do
result = ContinuaFuncaoSiTefInterativo(Proximocomando, tipoCampo, tamanhoMinimo, tamanhoMaximo, valorBuffer, valorBuffer.Length, continua)
continua = 0
Dim mensagem As String = Encoding.UTF8.GetString(valorBuffer).Replace(ControlChars.NullChar, "").Trim()
Dim respostaSitef As String = ""
Dim voltar As Boolean = False
Dim digitado As Boolean = True
If result = 10000 Then
Select Case Proximocomando
Case 0 ' Está devolvendo um valor para, se desejado, ser armazenado pela automação
If tipoCampo = 0 Then
Dim obj1 As New TefRetorno(1, 0, mensagem)
TefRetornoAdicionar(obj1, mTefTransacao)
ElseIf tipoCampo = 100 Then
Dim obj11 As New TefRetorno(11, 0, mensagem)
TefRetornoAdicionar(obj11, mTefTransacao)
Dim msgAut As String = mensagem.PadRight(4, "0"c)
Dim obj731 As New TefRetorno(731, 0, msgAut.Substring(0, 2))
TefRetornoAdicionar(obj731, mTefTransacao)
Dim grupo As ModalidadePagamentoGrupoConst = ModalidadePagamentoGrupo.RetornarModalidadePagamentoGrupo(msgAut.Substring(0, 2))
If grupo IsNot Nothing Then
Dim obj731_1 As New TefRetorno(731, 1, grupo.Nome)
TefRetornoAdicionar(obj731_1, mTefTransacao)
End If
Dim obj732 As New TefRetorno(732, 0, msgAut.Substring(2, 2))
TefRetornoAdicionar(obj732, mTefTransacao)
Dim subgrupo As ModalidadePagamentoSubGrupoConst = ModalidadePagamentoSubGrupo.RetornarModalidadePagamentoSubGrupo(msgAut.Substring(2, 2))
If subgrupo IsNot Nothing Then
Dim obj732_1 As New TefRetorno(732, 1, subgrupo.Nome)
TefRetornoAdicionar(obj732_1, mTefTransacao)
End If
ElseIf tipoCampo = 105 Then
Dim msgData As String = mensagem.Substring(6, 2) & mensagem.Substring(4, 2) & mensagem.Substring(0, 4)
Dim obj22 As New TefRetorno(22, 0, msgData)
TefRetornoAdicionar(obj22, mTefTransacao)
Dim msgHora As String = mensagem.Substring(8)
Dim obj23 As New TefRetorno(23, 0, msgHora)
TefRetornoAdicionar(obj23, mTefTransacao)
ElseIf tipoCampo = 106 Then
If Not String.IsNullOrWhiteSpace(mensagem) Then
Dim obj748_1 As New TefRetorno(748, 1, mensagem)
TefRetornoAdicionar(obj748_1, mTefTransacao)
Dim obj As BandeiraPadraoConst = BandeiraPadrao.RetornarBandeiraPadrao(Convert.ToInt32(mensagem))
If obj IsNot Nothing Then
Dim obj748_2 As New TefRetorno(748, 2, obj.NomeTipoCodigo)
TefRetornoAdicionar(obj748_2, mTefTransacao)
End If
End If
ElseIf tipoCampo = 107 Then
If Not String.IsNullOrWhiteSpace(mensagem) Then
captionCarteiraDigital = mensagem
Dim obj748 As New TefRetorno(748, 0, mensagem)
TefRetornoAdicionar(obj748, mTefTransacao)
End If
ElseIf tipoCampo = 108 Then ' Verificar Carteira Digital
If Not String.IsNullOrWhiteSpace(mensagem) Then
' Operação não realizada
captionCarteiraDigital = mensagem 'Adicionado
End If
ElseIf tipoCampo = 111 Then
Dim tefFuncaoInterativa As New TefFuncaoInterativa() ' Substitua por sua instância real de TefFuncaoInterativa
RaiseEvent OnMessageClient(mensagem, 100, tefFuncaoInterativa)
ElseIf tipoCampo = 121 Then
Dim viaCliente As String() = mensagem.Split(ControlChars.Lf, ControlChars.Cr)
Dim obj712 As New TefRetorno(712, 0, viaCliente.Length.ToString())
TefRetornoAdicionar(obj712, mTefTransacao)
For i As Integer = 0 To viaCliente.Length - 1
Dim obj713 As New TefRetorno(713, i, """" & viaCliente(i) & """")
TefRetornoAdicionar(obj713, mTefTransacao)
Next
ElseIf tipoCampo = 122 Then
Dim viaEstab As String() = mensagem.Split(ControlChars.Lf, ControlChars.Cr)
Dim obj714 As New TefRetorno(714, 0, viaEstab.Length.ToString())
TefRetornoAdicionar(obj714, mTefTransacao)
For i As Integer = 0 To viaEstab.Length - 1
Dim obj715 As New TefRetorno(715, i, """" & viaEstab(i) & """")
TefRetornoAdicionar(obj715, mTefTransacao)
Next
ElseIf tipoCampo = 123 Then
If Not String.IsNullOrWhiteSpace(mensagem) Then
Dim obj As ComprovanteTipoConst = ComprovanteTipo.RetornarComprovanteTipo(mensagem)
If obj IsNot Nothing Then
Dim obj712_1 As New TefRetorno(712, 1, obj.CodigoNome)
TefRetornoAdicionar(obj712_1, mTefTransacao)
Dim obj714_1 As New TefRetorno(714, 1, obj.CodigoNome)
TefRetornoAdicionar(obj714_1, mTefTransacao)
End If
End If
ElseIf tipoCampo = 131 Then
Dim obj10 As New TefRetorno(10, 0, mensagem)
TefRetornoAdicionar(obj10, mTefTransacao)
Dim obj As RedeAutorizadoraConst = RedeAutorizadora.RetornarAutorizadora(obj10.Valor)
If obj IsNot Nothing Then
Dim obj10_1 As New TefRetorno(10, 1, obj.Nome)
TefRetornoAdicionar(obj10_1, mTefTransacao)
End If
ElseIf tipoCampo = 132 Then
Dim obj748_1 As New TefRetorno(748, 1, mensagem)
TefRetornoAdicionar(obj748_1, mTefTransacao)
Dim obj As BandeiraPadraoConst = BandeiraPadrao.RetornarBandeiraPadrao(Convert.ToInt32(mensagem))
If obj IsNot Nothing Then
Dim obj748_2 As New TefRetorno(748, 2, obj.NomeTipoCodigo)
TefRetornoAdicionar(obj748_2, mTefTransacao)
End If
ElseIf tipoCampo = 133 Then
Dim obj13 As New TefRetorno(13, 0, mensagem)
TefRetornoAdicionar(obj13, mTefTransacao)
ElseIf tipoCampo = 134 Then
Dim obj12 As New TefRetorno(12, 0, mensagem)
TefRetornoAdicionar(obj12, mTefTransacao)
ElseIf tipoCampo = 156 Then
Dim obj748 As New TefRetorno(748, 0, mensagem)
TefRetornoAdicionar(obj748, mTefTransacao)
ElseIf tipoCampo = 158 Then
Dim obj739 As New TefRetorno(739, 0, mensagem)
TefRetornoAdicionar(obj739, mTefTransacao)
ElseIf tipoCampo = 545 Then
If Not String.IsNullOrWhiteSpace(mensagem) Then
Dim obj749 As New TefRetorno(749, 0, mensagem)
TefRetornoAdicionar(obj749, mTefTransacao)
Dim obj As CarteiraDigitalTipoPagamentoConst = CarteiraDigitalTipoPagamento.RetornarTipoPagamento(Convert.ToInt32(mensagem))
If obj IsNot Nothing Then
Dim obj749_1 As New TefRetorno(749, 1, obj.CodigoNome)
TefRetornoAdicionar(obj749_1, mTefTransacao)
End If
End If
ElseIf tipoCampo = 546 Then
If Not String.IsNullOrWhiteSpace(mensagem) Then
Dim obj750 As New TefRetorno(750, 0, mensagem)
TefRetornoAdicionar(obj750, mTefTransacao)
Dim obj As CarteiraDigitalTipoVoucherConst = CarteiraDigitalTipoVoucher.RetornarTipoVoucher(Convert.ToInt32(mensagem))
If obj IsNot Nothing Then
Dim obj750_1 As New TefRetorno(750, 1, obj.CodigoNome)
TefRetornoAdicionar(obj750_1, mTefTransacao)
End If
End If
ElseIf tipoCampo = 590 Then
Dim obj742 As New TefRetorno(742, 0, mensagem)
TefRetornoAdicionar(obj742, mTefTransacao)
ElseIf tipoCampo = 591 Then
If Not String.IsNullOrWhiteSpace(mensagem) Then
Dim valorRecarga As Decimal = Convert.ToDecimal(mensagem) / 100D
Dim obj742_1 As New TefRetorno(742, 1, valorRecarga.ToString("N2"))
TefRetornoAdicionar(obj742_1, mTefTransacao)
End If
ElseIf tipoCampo = 800 Then
Dim obj27 As New TefRetorno(27, 0, mensagem)
TefRetornoAdicionar(obj27, mTefTransacao)
ElseIf tipoCampo = 950 Then ' Para Modulo SAT_NFCe INSTALADO - CNPJ da fonte pagadora (autorizador do cartão)
If Not String.IsNullOrWhiteSpace(mensagem) Then
Dim obj600 As New TefRetorno(600, 0, mensagem)
TefRetornoAdicionar(obj600, mTefTransacao)
End If
ElseIf tipoCampo = 951 Then ' Para Modulo SAT_NFCe INSTALADO - Bandeira NFCE
If Not String.IsNullOrWhiteSpace(mensagem) Then
Dim obj601 As New TefRetorno(601, 0, mensagem)
TefRetornoAdicionar(obj601, mTefTransacao)
Dim obj As SatNfceBandeiraConst = SatNfceBandeira.RetornarSatNfceBandeira(Convert.ToInt32(mensagem))
If obj IsNot Nothing Then
Dim obj601_1 As New TefRetorno(601, 1, obj.CodigoNome)
TefRetornoAdicionar(obj601_1, mTefTransacao)
End If
End If
ElseIf tipoCampo = 952 Then ' Para Modulo SAT_NFCe INSTALADO - Número de autorização NFCE
If Not String.IsNullOrWhiteSpace(mensagem) Then
Dim obj602 As New TefRetorno(602, 0, mensagem)
TefRetornoAdicionar(obj602, mTefTransacao)
End If
ElseIf tipoCampo = 953 Then ' Para Modulo SAT_NFCe INSTALADO - Código da credenciadora
If Not String.IsNullOrWhiteSpace(mensagem) Then
Dim obj603 As New TefRetorno(603, 0, mensagem)
TefRetornoAdicionar(obj603, mTefTransacao)
Dim obj As SatNfceCredenciadoraConst = SatNfceCredenciadora.RetornarSatNfceCredenciadora(Convert.ToInt32(mensagem))
If obj IsNot Nothing Then
Dim obj603_1 As New TefRetorno(603, 1, obj.CodigoNomeCnpj)
TefRetornoAdicionar(obj603_1, mTefTransacao)
End If
End If
ElseIf tipoCampo = 2021 Then
Dim obj740 As New TefRetorno(740, 0, mensagem)
TefRetornoAdicionar(obj740, mTefTransacao)
ElseIf tipoCampo = 2022 Then
Dim msgAut As String = mensagem.PadRight(4, "0"c)
Dim obj747 As New TefRetorno(747, 0, msgAut.Substring(2, 2) & msgAut.Substring(0, 2))
TefRetornoAdicionar(obj747, mTefTransacao)
ElseIf tipoCampo = 2023 Then
Dim obj741 As New TefRetorno(741, 0, mensagem)
TefRetornoAdicionar(obj741, mTefTransacao)
End If
Case 1 'Mensagem para o visor do operador
Dim tefFuncaoInterativa As New TefFuncaoInterativa()
RaiseEvent OnMessageClient(mensagem, 100, tefFuncaoInterativa)
Exit Select
Case 2 'Mensagem para o visor do cliente
Dim tefFuncaoInterativa As New TefFuncaoInterativa()
RaiseEvent OnMessageClient(mensagem, 100, tefFuncaoInterativa)
Exit Select
Case 3 'Mensagem para os dois visores
Dim tefFuncaoInterativa As New TefFuncaoInterativa()
RaiseEvent OnMessageClient(mensagem, 100, tefFuncaoInterativa)
Exit Select
Case 4 'Texto que deverá ser utilizado como cabeçalho na apresentação do menu (Comando 21)
captionMenu = mensagem
Exit Select
Case 11 'Deve remover a mensagem apresentada no visor do operador
mensagem = ""
Dim tefFuncaoInterativa As New TefFuncaoInterativa()
RaiseEvent OnMessageClient(mensagem, 0, tefFuncaoInterativa)
Exit Select
Case 12 'Deve remover a mensagem apresentada no visor do cliente
mensagem = ""
Dim tefFuncaoInterativa As New TefFuncaoInterativa()
RaiseEvent OnMessageClient(mensagem, 0, tefFuncaoInterativa)
Exit Select
Case 13 'Deve remover mensagem apresentada no visor do operador e do cliente
mensagem = ""
Dim tefFuncaoInterativa As New TefFuncaoInterativa()
RaiseEvent OnMessageClient(mensagem, 0, tefFuncaoInterativa)
Exit Select
Case 14 'Deve limpar o texto utilizado como cabeçalho na apresentação do menu
captionMenu = ""
Exit Select
Case 15 'Cabeçalho a ser apresentado pela aplicação
Exit Select
Case 16 'Deve remover o cabeçalho
captionMenu = ""
Exit Select
Case 20 'Deve obter uma resposta do tipo SIM/NÃO.
If String.IsNullOrWhiteSpace(mensagem) Then
mensagem = "Confirma?"
End If
Dim objForm20 As New TefFuncaoInterativa With {
.DataType = DataTypeEnum.Confirmation,
.TipoCampo = tipoCampo,
.RespostaSitef = "1",
.Mensagem = mensagem
}
RaiseEvent OnCallForm(objForm20)
respostaSitef = objForm20.RespostaSitef
interromper = objForm20.Interromper
Exit Select
Case 21 'Deve apresentar um menu de opções e permitir que o usuário selecione uma delas. Na chamada o parâmetro Buffer contém as opções no formato 1:texto;2:texto;...i:Texto;...A rotina da aplicação deve apresentar As opções da forma que ela desejar (não sendo necessário incluir os índices 1, 2, ...) e após a seleção feita pelo usuário, retornar em Buffer o índice i escolhido pelo operador (em ASCII)
Dim objForm21 As New TefFuncaoInterativa With {
.DataType = DataTypeEnum.Menu,
.Titulo = captionMenu,
.ItensMenu = mensagem.Split(";"c)
}
RaiseEvent OnCallForm(objForm21)
respostaSitef = objForm21.RespostaSitef
interromper = objForm21.Interromper
Exit Select
Case 22 'Deve aguardar uma tecla do operador. É utilizada quando se deseja que o operador seja avisado de alguma mensagem apresentada na tela
If String.IsNullOrWhiteSpace(mensagem) Then
mensagem = "Aguarde ....."
End If
Dim objForm22 As New TefFuncaoInterativa With {.DataType = DataTypeEnum.Await, .Mensagem = mensagem}
RaiseEvent OnCallForm(objForm22)
respostaSitef = ""
Exit Select
Case 23 'Este comando indica que a rotina está perguntando para a aplicação se ele deseja interromper o processo de coleta de dados ou não. Esse código ocorre quando a CliSiTef está acessando algum periférico e permite que a automação interrompa esse acesso (por exemplo: aguardando a passagem de um cartão pela leitora ou a digitação de senha pelo cliente)
Exit Select
Case 29 'Deve ser fornecido um campo, sem captura, cujo tamanho está entre TamMinimo e TamMaximo. O campo deve ser devolvido em Buffer
Exit Select
Case 30 'Deve ser lido um campo cujo tamanho está entre TamMinimo e TamMaximo. O campo lido deve ser devolvido em Buffer
Dim objForm30 As New TefFuncaoInterativa With {
.DataType = DataTypeEnum.Numeric,
.TipoCampo = tipoCampo,
.TamanhoMinimo = tamanhoMinimo,
.TamanhoMaximo = tamanhoMaximo,
.Titulo = mensagem
}
RaiseEvent OnCallForm(objForm30)
respostaSitef = objForm30.RespostaSitef
interromper = objForm30.Interromper
If Not interromper Then
If tipoCampo = 505 Then
Dim obj505 As New TefRetorno(505, 0, respostaSitef)
TefRetornoAdicionar(obj505, mTefTransacao)
End If
End If
Exit Select
Case 31 'Deve ser lido o número de um cheque. A coleta pode ser feita via leitura de CMC-7 ou pela digitação da primeira linha do cheque. No retorno deve ser devolvido em Buffer “0:” ou “1:” seguido do número coletado manualmente ou pela leitura do CMC-7, respectivamente. Quando o número for coletado manualmente o formato é o seguinte: Compensação(3), Banco (3), Agencia (4), C1 (1), ContaCorrente (10), C2 (1), Numero Do Cheque (6) e C3 (1), nesta ordem. Notar que estes campos são os que estão na parte superior de um cheque e na ordem apresentada. Sugerimos que na coleta seja apresentada uma Interface que permita ao operador identificar e digitar adequadamente estas informações de forma que a consulta não seja feita com dados errados, retornando como bom um cheque com problemas
Exit Select
Case 34 'Deve ser lido um campo monetário ou seja, aceita o delimitador de centavos e devolvido no parâmetro Buffer
Dim objForm34 As New TefFuncaoInterativa With {
.DataType = DataTypeEnum.Currency,
.TipoCampo = tipoCampo,
.TamanhoMinimo = tamanhoMinimo,
.TamanhoMaximo = tamanhoMaximo,
.Titulo = mensagem
}
RaiseEvent OnCallForm(objForm34)
respostaSitef = objForm34.RespostaSitef
interromper = objForm34.Interromper
If tipoCampo = 504 OrElse tipoCampo = 130 Then
If Not String.IsNullOrWhiteSpace(respostaSitef) AndAlso Convert.ToDecimal(respostaSitef) > 0 Then
Dim valor As String = Convert.ToDecimal(respostaSitef).ToString("N2")
Dim obj3 As New TefRetorno(3, taxas, $"{valor}|{RemoverQuebraDeLinhas(mensagem)}")
TefRetornoAdicionar(obj3, mTefTransacao)
taxas += 1
End If
End If
Exit Select
Case 35 ' Deve ser lido um código em barras ou coletado manualmente
Exit Select
Case 41 ' Análogo ao Comando 30, mas o campo deve ser coletado de forma mascarada (senha)
Exit Select
Case 42 ' Deve apresentar um menu de opções e permitir que o usuário selecione uma delas
Exit Select
Case 50 ' A automação comercial deve exibir o QRCode na tela
mObjForm50 = New TefFuncaoInterativa With {
.DataType = DataTypeEnum.QrCode,
.TipoCampo = tipoCampo,
.Titulo = captionCarteiraDigital,
.Mensagem = mensagem
}
RaiseEvent OnCallPanelQrCode(mObjForm50)
Case 51 'A automação comercial deve remover da tela o QRCode exibido anteriormente, pois o SiTef já devolveu uma resposta à CliSiTef.
Dim tefFuncaoInterativa As New TefFuncaoInterativa()
RaiseEvent OnMessageClient(mensagem, 1000, tefFuncaoInterativa)
If mObjForm50 IsNot Nothing AndAlso mObjForm50.FormAberto Then
mObjForm50.FormFechar = True
RaiseEvent OnClosePanelQrCode(mObjForm50)
respostaSitef = mObjForm50.RespostaSitef
interromper = mObjForm50.Interromper
End If
mObjForm50 = Nothing
captionCarteiraDigital = ""
Exit Select
Case 52 'Mensagem de rodapé, opcional para o caso haja um espaço para ela ser exibida, no caso em que o QRCode foi exibido e está aguardando que o cliente faça a sua leitura.
Dim tefFuncaoInterativa As New TefFuncaoInterativa()
RaiseEvent OnMessageClient(mensagem, 200, tefFuncaoInterativa)
If mObjForm50 IsNot Nothing AndAlso mObjForm50.FormAberto AndAlso mObjForm50.Interromper Then
mObjForm50.FormFechar = True
RaiseEvent OnClosePanelQrCode(mObjForm50)
interromper = mObjForm50.Interromper
respostaSitef = mObjForm50.RespostaSitef
End If
Case 99
Exit Select
Case Else
Exit Select
End Select
End If
If voltar Then
continua = 1
ElseIf Not digitado OrElse interromper Then
continua = -1
End If
valorBuffer = Encoding.ASCII.GetBytes(respostaSitef & New String(ControlChars.NullChar, 20000 - respostaSitef.Length))
Loop
Return result
End Function
Boa tarde
Primeiramente agradecer novamente pelo ótimo projeto.
Gostaria de saber como faço para pegar o NSU para conseguir gravar em um banco de dados e utilizar para emitir a NFCe
Poderia me ajudar?
Boa noite sobre o codigo do QRCODE quando gera no botao CRT CD ele da erro -27 isso acontece porque esta em modo homologado ? nao funciona o modo carteira digital qual modo qrcode ?
Recentemente a a SiTef implementou essa Valor a ser Cancelado em situações onde pode existir cancelamento parcial do valor pago, gostaria de saber onde devo implementar na solução essa situação ?
Atualmente o log da aplicação aponta esse comando e tipo de campo travando o sistema e aumentando o tamanho do log:
-> Cmd: 34 -> Tc: 147 -> Buffer: Valor do cancelamento
Boa tarde!
A lib tem alguma função de apresentar imagem na telinha do pinpad?
verifiquei que é possível, mas gostaria de saber se já existe algo desenvolvido nessa lib.
Olá,
Estou executando esse projeto a função de obter o cpf do consumidor no pinpad, e estou obtenho um erro. Estou usando um pinpad da gertec ppc920, as outras funções de vender com cartao de credito/debito esta sendo executado perfeitamente.
A minha duvida se tem algo a mais para ser configurado no sitef demo ou no clisitef.ini, ou se é presciso de alguma outra dll para que eu possa obter o cpf pelo pinpad.
Desde já agradeço.
Existe alguma documentaçao sobre essa DLL eo programa cli-sitef converti ele do C# para o vb.net mas queria saber se tem algo relacionado a explicar melhor o codigo.
esses dias baixei seu projeto para tentar fazer essa implementação em C# com WPF até ai tudo bem, mas percebir que ele só pede as parcelas ou se é avista o cartão depois de ter passado o cartão no pinpad!
isso esta certo ?
não deveria ter que informar essas coisas antes e quando passar o cartão já ser somente para finalizar ?
Ola, tenho um pequeno projeto de PDV em c# e preciso fazer a integração com a dll do sitef, alguem por acaso teria disponibilidade para esse servico de freelancer?
Estou com um problema com a maquina da GERTEC PPC930 quando em homologação na função debito passa de boas
agora na função credito quando uso ela e pede a senha ele diz opçao recusada pelo cartao ?
Tem alguma configuração pra fazer na maquina ou e assim mesmo ?
Olá, Adriano Barros
Meu nome é Joan Vitor, sou desenvolvedor C# Júnior, estou trabalhando em uma implementação de carteiras digitais (pix) na automação comercial através da sua biblioteca, juntamente com o andrebts.
Seguimos os seguintes passos:
Instalado o SitDemo e o CardSE enviados pelo próprio suporte da Software Express.
Seguidos os passos descritos no arquivo: 8-CardSE_PIX_Guia de Instalação.pdf
CliSiTef.ini
Com o conhecimento atual da utilização de carteiras digitais no SiTef, acreditamos que executamos todos os passos de configuração necessários, entretanto ao selecionar "CRT CD"
ou "CRT" -> "Carteira digital"
na aplicação da biblioteca, é retornada a mensagem "Carteira Digital - Trn. nao habilitada"
, conforme imagem abaixo:
Ao depurar percebemos que o último resultado das chamadas ao metódo ContinuaFuncaoSiTefInterativo
retorna o valor -24 como visto no gif abaixo:
Não entendemos qual o problema para podermos solucioná-lo. Você já passou por essa situação? Há alguma outra configuração necessária além das mencionadas nesse issue?
Tem exemplo de como faz a captura do CPF do cliente por exemplo? vi que precisa iniciar uma requisição mandando 789, mas não consegui entender exatamente o fluxo das chamadas
Bom dia pessoal, tudo bem?
No momento que roda o projeto, ele diz não encontrar a DLL. Ela vai na raiz do DEBUG certo?
Obrigado,
Att
Bom dia,
Ao executar o programa, está com o seguinte retorno "PinPad não encontrado".
Entretanto, estou com o SitDemo executando.
Olá.
Primeiramente muito obrigado sua solução me ajudou muito.
Segundo, tenho uma duvida, como faço para parcelar no cartão de credito?
Bom dia.
Posso tentar migrar o projeto para .net 6 lts.
Para podermos aumentar a longevidade do projeto.
Boa tarde, estou precisando implementar uma rotina que altere o valor da venda após a leitura e identificação do cartão, no caso uma determinada bandeira poderia conceder desconto na venda;
Eu uso a sua aplicação como base para o meu TEF, seria possível fazer esse tratamento? Vi que o comando 154 seria para alterar o valor da venda, mas sempre que altero o valor da venda ele me retorna erro no PIN PAD;
Esta transação deverá ser de
R$ 80,00
Para esta transação utilizar cartões Visa Electron e Visa
Aplicação deve tratar que é retornado no TipoCampo=4029, seja exibido com a Finalizadora desconto antes da totalização da venda.
A aplicação deverá somar os valores dos descontos recebidos e lança-los no cupom fiscal (valor inicial –valores dos descontos =valor da venda
Alguem ja implemento essa parte em C# sobre o desconto em cartao caso houver ?
Boa tarde!
Como faço para "reiniciar" o pinpad quando ele não responde?
Estou tentando fazer a coleta de dados utilizando a Função de leitura de campo aberto.
O fluxo está assim:
1.Inicia leitura de campo aberto no pinpad
2. Caso deseje cancelar a coleta de dados utilizo o parâmetro "interromper" = true (campo 23)
3. Se eu inicio novamente uma nova coleta de dados muito rápido(sem esperar o pinpad apagar a tela) então ele trava e não responde mais.
Tem alguma forma de quando o pinpad não responder, eu mandar uma reinicialização?
Bom dia, estava estudando o Projecto para implementar integração com outra linguagem de programação.
Estou com dificuldade para testar Qr Code para pagamento com carteira digital no 'Pin Pad Gertec PPC930'.
Em pesquisa pela web ele suporta QR-Code no visor do Pin Pad.
Fonte pesquisa QR-Code Pin Pad PPC930: https://loja.gertec.com.br/produto/ppc930/#
No Projeto está sendo passado o ParamAdic = ”DevolveStringQRCode=1” na rotina IniciaFuncaoSiTefInterativo.
No arquivo CliSiTef.ini [PinPadCompartilhado] Porta=AUTO_USB.
Está tudo certo com o meu ambiente, tanto que funciona o pagamento com cartão de crédito no Pin Pad. O que eu estou fazendo de errado. Tem alguma dica?
@adrbarros BOm dia tudo bem espero que esteje tudo certo.
Estou com duvidas na chamada do pendente eu vi o codigo ontem mas nao consigo fazer a chamada pra autorizar o pendente novamente como faço tal ? consegue me mandar via C# .
O Outro e do cancelamento o botao pra voltar atraz coloquei o codigo mas tanbem nao cosegui fazer a chamada consegue me ajudar pode ser em C# mesmo.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.