adrbarros / CliSitef

Exemplo básico de comunicação via DLL com TEF Dedicado SiTef (Software Express)
44 stars 21 forks source link

Sobre o botao cancelamento eo de verificaçao de pendente #20

Closed Marlonwg closed 5 months ago

Marlonwg commented 5 months ago

@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.

adrbarros commented 5 months ago

Transações Pendentes, eu faço chamando a Função 130 (pagina 62 do SiTef - Interface Simplificada com a aplicação(VRS-253)). Assim por esse retorno, consigo escolher se vou cancelar ou confirmar a transação.

O ObtemQuantidadeTransacoesPendentes eu nunca usei.

Referente ao Voltar do Cancelamento, vou dar uma olhada

Marlonwg commented 5 months ago

Consegue me mandar o codigo em C# como faz essa chamada ?

Do voltar e que usa o botao da maquina anular mas tem uma opçao via comando ai que da pra cancelar quando esta pedindo o cartao. Esta ai nos issues mas nao soube chamar somente.

Marlonwg commented 5 months ago

@adrbarros Conseguiu ver sobre a funcao ?

se puder me enviar pra tirar base em C# e porque estou em homologacao rsrs e preciso das 2 funcao pra passar tanto o boltao cancelar operacao quando estiver ja aparecendo valor

Quanto esse pra reenviar dados.

adrbarros commented 5 months ago

Estarei vendo isso somente na próxima semana

adrbarros commented 5 months ago

Fazendo teste rápido aqui, no Voltar do Menu Cancelamento, eu Acho que tem algum Bug no Ambiente da SoftwareExpress, mas você pode utilizar o ESC para interromper

Marlonwg commented 5 months ago

Precisaria ver esse retorno a pra cancelar as operaçoes pendentes ate estou conseguindo obter eles no ContinuafuncaoIterativa

meu negocio ta sendo enviar e finalizar não esta cancelando os pendentes.

adrbarros commented 5 months ago

Transações Pendentes, eu faço chamando a Função 130 (pagina 62 do SiTef - Interface Simplificada com a aplicação(VRS-253)). Assim por esse retorno, consigo escolher se vou cancelar ou confirmar a transação.

Segue esse roteiro para sua implementação, como você tem acesso aos fontes, você mesmo pode fazer a implementação e melhoria, na sua Solução.

Se sobrar um tempo na próxima semana, vou ver se consigo analisar as Transações Pendentes (Confirmar ou Cancelar)

Marlonwg commented 5 months ago

Sim ate fiz a leitura

 ElseIf tipoCampo = 160 Then 'Cupom Fiscal retorno
                                Dim obj160 As New TefRetorno(160, 0, mensagem)
                                TefRetornoAdicionar(obj160, mTefTransacao)

                            ElseIf tipoCampo = 161 Then 'Número Identificador do Cupom do Pagamento
                                Dim obj161 As New TefRetorno(161, 0, mensagem)
                                TefRetornoAdicionar(obj161, mTefTransacao)

                            ElseIf tipoCampo = 163 Then 'Data Fiscal
                                Dim obj163 As New TefRetorno(163, 0, mensagem)
                                TefRetornoAdicionar(obj163, mTefTransacao)

                            ElseIf tipoCampo = 164 Then 'Hora Fiscal
                                Dim obj164 As New TefRetorno(164, 0, mensagem)
                                TefRetornoAdicionar(obj164, mTefTransacao)

                            ElseIf tipoCampo = 210 Then 'Quantidade total de pendências, listadas nos blocos de dados abaixo
                                Dim obj210 As New TefRetorno(210, 0, mensagem)
                                TefRetornoAdicionar(obj210, mTefTransacao)

                            ElseIf tipoCampo = 211 Then 'Código da “Funcao” original
                                Dim obj211 As New TefRetorno(211, 0, mensagem)
                                TefRetornoAdicionar(obj211, mTefTransacao)

O negocio ta sendo usar os dados pra finalizar acho que estou errando na chamada de finaliza seguindo a requisicao

Public Function RequisicaoPendente(ByVal _valor As Decimal, Optional ByVal _documentoVinculado As String = "", Optional ByVal _operador As String = "", Optional ByVal _funcao As Integer = 0, Optional ByVal _confirmarCnf As Boolean = True) As Integer
            Dim parametrosAdicionais As String = "" ' "[10]" 'Cheques
            Dim sts As Integer = FazerRequisicao(130, "NCN", _valor, _documentoVinculado, parametrosAdicionais, _operador)
            If sts = 10000 Then
                DefinirTefTransacao(_documentoVinculado, 0D) 'ADD NOVO
                '      gCupomVenda.Transacoes.Add(mTefTransacao)
                Dim obj0 As New TefRetorno(0, 0, "NCN")
                TefRetornoAdicionar(obj0, mTefTransacao)
                Dim obj2 As New TefRetorno(2, 0, _documentoVinculado)
                TefRetornoAdicionar(obj2, mTefTransacao)
                Dim obj2_1 As New TefRetorno(2, 1, mTefTransacao.IdentificadorTransacao.ToString())
                TefRetornoAdicionar(obj2_1, mTefTransacao)
                Dim obj3 As New TefRetorno(3, 0, _valor.ToString("N2"))
                TefRetornoAdicionar(obj3, mTefTransacao)
                Dim obj4 As New TefRetorno(4, 0, "0")
                TefRetornoAdicionar(obj4, mTefTransacao)
                Dim obj718 As New TefRetorno(718, 0, "IP" & mTefConfig.Tef_Terminal)
                TefRetornoAdicionar(obj718, mTefTransacao)
                Dim obj719 As New TefRetorno(719, 0, mTefConfig.Tef_Empresa)
                TefRetornoAdicionar(obj719, mTefTransacao)
                sts = ContinuarRequisicao()
            End If
            If sts = 0 Then
                ' Retornos TEF

                Dim obj9 As New TefRetorno(9, 0, "0")
                TefRetornoAdicionar(obj9, mTefTransacao)

                FinalizarOperacao(0, _documentoVinculado)

                If _confirmarCnf Then
                    Cnf(_documentoVinculado:=_documentoVinculado)
                End If
            End If
            Return sts
        End Function

algo que nao vai ate os dados passam so que nao acontece nada rsrs

Private Sub FinalizarOperacao(_confirma As Short, Optional _documentoVinculado As String = "")
            Dim dataStr As String = DateTime.Now.ToString("yyyyMMdd")
            Dim horaStr As String = DateTime.Now.ToString("HHmmss")
            Dim doc As Integer = New Random().Next(999999)
            If String.IsNullOrWhiteSpace(_documentoVinculado) Then
                _documentoVinculado = doc.ToString("000000")
            End If
            'Passar essa funcao finaliza com os dados

            ' FinalizaFuncaoSiTefInterativo(0, "Doc em aberto", dataStr, horaStr, Nothing)

            FinalizaFuncaoSiTefInterativo(_confirma, _documentoVinculado, dataStr, horaStr, Nothing)
        End Sub

Vou tentar em C# mas no codigo que vem aqui do github tb nao tem ainda.

adrbarros commented 5 months ago

Baixe a atualização e teste!!

Marlonwg commented 5 months ago

Tem atualização do codigo da pra marcar so aonde tem as atualizações porque converter tudo e osso rsrs.+

Quando vc colocar ali em c# vou comparar no que estou errando.

adrbarros commented 5 months ago

Se você tem uma Fork do projeto, sua ferramente de gerenciamento do Git, mostra o que foi Alterado

Eu uso aqui o SourceTree ou o próprio Visual Studio. mas vai reparar que tem um Botão para verificar as transações pendentes

image

Marlonwg commented 5 months ago

No meu aqui nao tem rsrs, o Fork nem o tree vou verificar pos so baixei ali a base eas dlls e converti tudo mas esta funcionando ok so nessa parte deu zebrinha, rsrs

Marlonwg commented 5 months ago

hum realmente no site esta atualizado vou pegar com base nele obrigado.

Marlonwg commented 5 months ago

Resolvi sobre o botao cancelar se alguem quizer Implementar mas o meu esta em dotnet .net

Segue

Chamei essa dll no caso da tecla esc ser pressionada

<DllImport("user32.dll")>
        Private Shared Function GetAsyncKeyState(ByVal vKey As Integer) As Short
        End Function
        Private Const VK_ESCAPE As Integer = &H1B

        Public Delegate Sub OnVerifyDataCollectionInterruptionHandle(ByRef _interromper As Boolean)
        Public Event OnVerifyDataCollectionInterruption As OnVerifyDataCollectionInterruptionHandle

        'Restante do codigo....

           Sub GerarArquivoRetornoDaTransacao()

            Dim interromper As Boolean = False
           ....restante codigo ate chegar na Case23

                 Case23
                            RaiseEvent OnVerifyDataCollectionInterruption(interromper)
                            If interromper Then
                                ' Se interromper for verdadeiro, finalize a operação
                                Return -1
                            End If
                            If (GetAsyncKeyState(VK_ESCAPE) And &H8000) <> 0 Then
                                interromper = True
                            End If
                            Exit Select

                            .... Continuacao do codigo normal

Caso alguem queira melhorar quando fica a mensagem na tela pra passar o cartao fico segurando a TECLA ESC entao ele pede pra cancelar a operação e fechar.

adrbarros commented 5 months ago

Resolvi sobre o botao cancelar se alguem quizer Implementar mas o meu esta em dotnet .net

Segue

Chamei essa dll no caso da tecla esc ser pressionada

<DllImport("user32.dll")>
       Private Shared Function GetAsyncKeyState(ByVal vKey As Integer) As Short
       End Function
       Private Const VK_ESCAPE As Integer = &H1B

       Public Delegate Sub OnVerifyDataCollectionInterruptionHandle(ByRef _interromper As Boolean)
       Public Event OnVerifyDataCollectionInterruption As OnVerifyDataCollectionInterruptionHandle

       'Restante do codigo....

          Sub GerarArquivoRetornoDaTransacao()

           Dim interromper As Boolean = False
          ....restante codigo ate chegar na Case23

                Case23
                           RaiseEvent OnVerifyDataCollectionInterruption(interromper)
                           If interromper Then
                               ' Se interromper for verdadeiro, finalize a operação
                               Return -1
                           End If
                           If (GetAsyncKeyState(VK_ESCAPE) And &H8000) <> 0 Then
                               interromper = True
                           End If
                           Exit Select

                           .... Continuacao do codigo normal

Caso alguem queira melhorar quando fica a mensagem na tela pra passar o cartao fico segurando a TECLA ESC entao ele pede pra cancelar a operação e fechar.

Ola, Não me atentei qua na chamada do Delegate OnVerifyDataCollectionInterruption não tinha a Implementação no lado do FrmTelaTesteVenda. Porém quando estiver em qualquer interação com o PinPad (Inserir ou Passar o Cartão, por ex.), é só precionar a Tecla Cancela do PinPad (VERMELHA) para abortar. Mas essa implementação da chamada da tecla ESC, vai servir para Abotar uma transação PIX, por ex., quando a operação ficar aguardando a leitura do QrCode, e o cliente por algum acaso desistir.