Clipper On Line • Ver Tópico - Pin pad Gertec PPC 910

Pin pad Gertec PPC 910

Projeto Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

 

Pin pad Gertec PPC 910

Mensagempor JoséQuintas » 25 Mai 2017 10:29

Desisto, fiz 200 compilações, coloquei tirei, mas a função DLLCALL não está sendo localizada


Isso é coisa do xHarbour, se é que no xHarbour existe.

No Harbour 3.2 e 3.4, tem aquela xhb.hbc, que é LIB de compatibilidade com xHarbour.
Lá tem uma CallDll(). NÃO USE ESSA, pelo que dá pra ver, nem no xHarbour gostam do que é do xHarbour.

No Harbour 3.2 e 3.4 tem hb_DyCall(), função no core do Harbour, pra Windows ou Linux.

No Harbour 3.2 tem CallDll32() que no Harbour 3.4 foi renomeada pra CallDll() em hbmisc.hbc

Como exemplo de uso de DLL, a do RMChart pode ser interessante quando se tem muitas funções na DLL.

CREATE CLASS RmChart

   VAR    nHandle

   METHOD New()                            INLINE ::nHandle := hb_libLoad( "RMChart.dll" ), SELF
   METHOD Destroy()                        INLINE hb_libFree( ::nHandle )
   METHOD AddBarSeries(a,b,c, ... )        INLINE ::CallDllStd( "RMC_ADDBARSERIES", a, b, ::ToDouble( c ), ... )
   METHOD CallDllStd( cName, ... )         INLINE hb_DynCall( { cName, ::nHandle, HB_DYN_CALLCONV_STDCALL }, ... )
   END CLASS


Trata-se apenas de carregar a DLL, liberar no final, e montar as chamadas à DLL.
O IMPORTANTÍSSIMO é que os tipos passados/retornados tem que ser compatíveis, senão é GPF.

Se no xHarbour não der pra fazer igual, tão perdendo tempo com ele.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Pin pad Gertec PPC 910

Mensagempor esbasso » 25 Mai 2017 10:41

Esta confundindo
Eu postei o exemplo do TEF em xHarbour
Quem não está conseguindo fazer é o que usa o Harbour

Tenho todas as funções do RMCHart no xHarbour e funciona muito bem

No caso do Sitef não tem nenhum problema com os parâmetros ao contrario do RMChart que é preciso converter alguns.
Luis Fernando Basso
Desenvolvedor VFP + XHARBOUR + HWGUI
lfbasso@gmail.com
http://www.engersoft.com.br
esbasso
Colaborador

Colaborador
 
Mensagens: 325
Data de registro: 24 Jan 2007 16:49
Cidade/Estado: CHAPECO/SC
Curtiu: 0 vez
Mens.Curtidas: 8 vezes

Pin pad Gertec PPC 910

Mensagempor HASA » 25 Mai 2017 10:55

:-o
Bom dia, no caso estou tentando pegar o exemplo do Basso que está em Xharbour e compilar com o Harbour 3.2 que vem junto com a Minigui Extend usando Brmake, minha intensão era criar um pequeno aplicativo como exemplo de uso para disponibilizar aos colegas já que consegui um PinPad emprestado, tenho somente 40 dias para devolve-lo e estou correndo para criar, testar e disponibilizar algum material INEDITO sobre TEF pois não localzei nada que realmente ajude quem está começando, se conseguirem compilar o exemplo do Basso em Harbour 3.2 disponibilizem os fontes que vou migrar para Minigui Extend ok.
8-|
HASA
Avatar de usuário

HASA
Colaborador

Colaborador
 
Mensagens: 1082
Data de registro: 01 Set 2003 19:50
Cidade/Estado: São Paulo
Curtiu: 1 vez
Mens.Curtidas: 51 vezes

Pin pad Gertec PPC 910

Mensagempor JoséQuintas » 25 Mai 2017 12:07

Esta confundindo
Eu postei o exemplo do TEF em xHarbour
Quem não está conseguindo fazer é o que usa o Harbour
Tenho todas as funções do RMCHart no xHarbour e funciona muito bem
No caso do Sitef não tem nenhum problema com os parâmetros ao contrario do RMChart que é preciso converter alguns.


Então em Harbour, que pode ser ajustado pra xHarbour, igual do RMChart:
(Fiz agora, pode conter erros, é bom confirmar)

CREATE CLASS TefDllClass

   VAR    nHandle

   METHOD New()                      INLINE ::nHandle := hb_libLoad( "CliSiTef32i.dll" ), SELF
   METHOD Destroy()                  INLINE hb_libFree( ::nHandle )
   METHOD Configura( ... )           INLINE ::CallDllStd( "ConfiguraIntSiTefInterativoEx", ... )
   METHOD Inicia( ... )              INLINE ::CallDllStd( "IniciaFuncaoSiTefInterativo", ... )
   METHOD Continua( ... )            INLINE ::CallDllStd( "ContinuaFuncaoSiTefInterativo", ... )
   METHOD Finaliza( ... )            INLINE ::CallDllStd( "FinalizaTransacaoSiTefInterativo", ... )
   METHOD KeepAlive()                INLINE ::CallDllStd( "KeepAlivePinPad", ... )
   METHOD Escreve( ... )             INLINE ::CallDllStd( "EscreveMensagemPermanentePinPad", ... )
   METHOD LeTrilha( ... )            INLINE ::CallDllStd( "LeTrilha3", ... )
   METHOD LeCartao( ... )            INLINE ::CallDllStd( "LeCartaoSeguro", ... )
   METHOD LeSenha( ... )             INLINE ::CallDllStd( "LeSenhaDireto", ... )
   METHOD LeSimNaoPinPad( ... )      INLINE ::CallDllStd( "LeSimNaoPinPad", ... )
   METHOD CallDllStd( cName, ... )   INLINE hb_DynCall( { cName, ::nHandle, HB_DYN_CALLCONV_STDCALL }, ... )
   END CLASS
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Pin pad Gertec PPC 910

Mensagempor JoséQuintas » 25 Mai 2017 12:26

Lembrando que o HBMK2 tem a opção de pesquisar em tudo que é LIB...

Dá pra ver HMG_CallDll() na HMG Extended, OOHG, HMG3 e "talvez" CallFunc() na HWGui
E tem até __fox_DynCall() na hbfoxpro.hbc e DllCall() em hbxpp.hbc
Além das que já mencionei, CallDll(), CallDll32(), e hb_DynCall()
A preferência é sempre pra funções do núcleo do Harbour.

hbmk2.png
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Pin pad Gertec PPC 910

Mensagempor janio » 26 Mai 2017 09:23

Cliente Modular?
mas qual seria o teu homologador?
SOFTWARE EXPRESS?
Não vi este tipo de opção, somente pela DLL


Basso!

Minha homologadora eh a SOFTWARE EXPRESS, e faço através da SkyTEF.

Sim, existe o CLIENTE MODULAR que funciona exatamente como o ACBrMonitor. Vc fica trocando arquivos TEXTO com ele. Cria o comando numa pasta, e espera o retorno em outra pasta. MUUUUUITO FACIL. O monitor deles (Sitef) fica rodando escondido no tray.

Eu achei muuuuuito mais facil e simples do que com a dll. Desenvolvi em poucos dias.

Eh so vc pedir o material pra fazer pelo cliente modular q eles te mandam sem problema. Inclusive acabaram de me mandar pq vou precisar re-homologar para impressora nao fiscal.

Janio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar de usuário

janio
Colaborador

Colaborador
 
Mensagens: 1835
Data de registro: 06 Jul 2004 07:43
Cidade/Estado: UBAJARA - CE
Curtiu: 8 vezes
Mens.Curtidas: 68 vezes

Pin pad Gertec PPC 910

Mensagempor HASA » 26 Mai 2017 10:24

Janio, abusando só um pouquinho tens um pequeno demo com acbr ?
:)´
HASA
Avatar de usuário

HASA
Colaborador

Colaborador
 
Mensagens: 1082
Data de registro: 01 Set 2003 19:50
Cidade/Estado: São Paulo
Curtiu: 1 vez
Mens.Curtidas: 51 vezes

Pin pad Gertec PPC 910

Mensagempor HASA » 26 Mai 2017 10:47

:-O
- Jânio inclusive no fórum do acbr não localizo nada a respeito acredito que sua ajuda possa ser muito valiosa.

- Veja no link abaixo outro colega procurando por informações:

http://www.projetoacbr.com.br/forum/topic/18458-nfc-e-pagamento-por-cartao/#comment-210500

8-|
Avatar de usuário

HASA
Colaborador

Colaborador
 
Mensagens: 1082
Data de registro: 01 Set 2003 19:50
Cidade/Estado: São Paulo
Curtiu: 1 vez
Mens.Curtidas: 51 vezes

Pin pad Gertec PPC 910

Mensagempor janio » 26 Mai 2017 10:57

Hasa,

Nao uso ACBr para o TEF. Faço na unha mesmo. O que eu disse foi que o uso do CLIENTE MODULAR é SEMELHANTE ao uso do ACBr, ou seja, vai arquivo e vem arquivo (troca).

Aliás, não ha necessidade de ficar 'amarrado' ao acbr para isso hehehe

O uso é simples:
ComandoTEF( { "000-000 = CRT" ,;
"001-000 = " + nIdentifiTEF ,;
"002-000 = " + AllTrim(Str(vNUMCOO)) ,;
"003-000 = " + AllTrim( Trans( vValorTEF, '@E 999999999.99' ) ) ,;
"004-000 = 0" ,;
"210-084 = " + "CRIASOFT10" ,;
"701-034 = 4" ,;
"999-999 = 0" } )

If !VerificaArqStatusTef()
msg("tef nao responde")
Return .f.
Endif


Vc manda um arquivo e aguarda a resposta dele. Simples
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar de usuário

janio
Colaborador

Colaborador
 
Mensagens: 1835
Data de registro: 06 Jul 2004 07:43
Cidade/Estado: UBAJARA - CE
Curtiu: 8 vezes
Mens.Curtidas: 68 vezes

Pin pad Gertec PPC 910

Mensagempor HASA » 26 Mai 2017 11:21

:{ :)Pos

- Captei, estou bem no inicio e vendo para onde a maré vai me levar não decidi ainda, troca de arquivos, dll, e o que pintar vou testando, valeu mesmo por essa dica de start, se mais alguem utilizar outro modo de comunicar-se com a SiTef agradeço qualquer dica.
:{

HASA
Avatar de usuário

HASA
Colaborador

Colaborador
 
Mensagens: 1082
Data de registro: 01 Set 2003 19:50
Cidade/Estado: São Paulo
Curtiu: 1 vez
Mens.Curtidas: 51 vezes

Pin pad Gertec PPC 910

Mensagempor janio » 26 Mai 2017 11:52

Hasa,

Ha dois anos eu tambem estava perdido qndo precisei implementar isso 'pra ontem' num cliente. A demora foi entender como tudo funciona! Depois q entendi o processo, foi rapido.

Com cliente modular eu fiz em menos de uma semana. E mais: em mais de 2 anos de uso, nunca tive um so problema com TEF. O negocio eh bem feito.

Eu fiz parceria com a SkyTEF, eles passaram um roteiro e os arquivos necessários. Duvidas fui tirando com eles...

Se interessar fazer pelo cliente modular, posso passar as funções q fiz para troca de arquivos...

Janio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar de usuário

janio
Colaborador

Colaborador
 
Mensagens: 1835
Data de registro: 06 Jul 2004 07:43
Cidade/Estado: UBAJARA - CE
Curtiu: 8 vezes
Mens.Curtidas: 68 vezes

Pin pad Gertec PPC 910

Mensagempor HASA » 26 Mai 2017 12:59

:)) :D

Jânio, como disse meu barquinho não chegou em lugar algum, com esse seu depoimento acima de a 2 anos não ter tido problemas me animou muuuiiiitttooo já que estou rodando no meio desse lago, se jogares a boia agradeço.
:-´ :-Y
HASA
Avatar de usuário

HASA
Colaborador

Colaborador
 
Mensagens: 1082
Data de registro: 01 Set 2003 19:50
Cidade/Estado: São Paulo
Curtiu: 1 vez
Mens.Curtidas: 51 vezes

Pin pad Gertec PPC 910

Mensagempor janio » 26 Mai 2017 13:47

PhTEF     := 'C:\Client'
PhTEFreq  := 'C:\Client\Req\'
PhTEFres  := 'C:\Client\Resp\'

TefReq       := 'IntPos.001'
TefRes       := 'IntPos.001'
TefTmp      := 'IntPos.TMP'
TefSts       := 'IntPos.Sts'

Function ComandoTEF( VET_PARAM, ESPERA )
Local RET_IMP, REQ, RESP, TEMPOR, TINI, tFIM, Tef_Handle, BYTES, I, TIPO_PARAM

DEFAULT VET_PARAM   to {} ,;
        ESPERA      to 3600

REQ    := PhTEFreq + TefReq
RESP   := PhTEFres + TefRes
TEMPOR := PhTEFreq + TefTmp

// apaga requisição anterior
tFIM := seconds() + 3
Do while hb_FileExists( REQ )

   fErase( TEMPOR )
   
   If fErase( REQ ) = -1
      If (seconds() > tFIM)
         RET_IMP := 'ERRO: Nao foi possivel apagar o arquivo: ('+REQ+') '+;
         ErrorOsMessage(ferror())
      Else
         millisec(20)
      EndIf
   EndIf
     
Enddo

Tef_Handle := FCreate( TEMPOR )

For I := 1 to Len(VET_PARAM)

   fWriteLine( Tef_Handle, VET_PARAM[I] )

Next

fClose(Tef_Handle)
Millisec(100)

Do while Empty(RET_IMP)

   If fRename(TEMPOR, REQ) = -1
      RET_IMP := 'ERRO: Nao foi possivel renomear ('+TEMPOR+') para ('+REQ+') '+;
      ErrorOsMessage(ferror())
   EndIf

Enddo

Return .t.

Function CriaArquivoIniTef( VET_PARAM )
Local Tef_Handle

DEFAULT VET_PARAM   to {}

Tef_Handle := FCreate( ArquivoTef )

For I := 1 to Len(VET_PARAM)

   fWriteLine( Tef_Handle, VET_PARAM[I] )

Next

fClose(Tef_Handle)
Millisec(50)

Return .t.

Function VerificaArqStatusTef
Local Espera := 32
Local lRet := .f.

Do while Espera >= 0
   If hb_FileExists( ArqStatusTef )
      lRet := .t.
      Exit
   Endif

   Millisec(250)
   Espera--
Enddo
Return lRet


O processo é o seguinte:
1-) Cria o arquivo ('IntPos.001') de REQUISIÇÃO em 'C:\Client\Req\' (PhTEFreq)
2-) Espera o arquivo ('IntPos.001') de RESPOSTA do Sitef em 'C:\Client\Resp\' (PhTEFres)
3-) Deu algo errado? Volta pra tela pra o usuario escolher outra forma de pagamento ou outro cartao, etc...
4-) Recebeu a resposta de aprovação? Segue o processo (gravacao de dados em banco, etc) e IMPRIME a resposta do Sitef tal qual ela veio (com todos os dados da transação)
5-) No meio da impressao dos comprovantes deu problema (faltou papel, energia)? Exibe msg para o usuario CONTINUAR TENTANDO ou DESISTIR DA IMPRESSÃO
6-) Conseguiu imprimir? Manda comando de CONFIRMAÇÃO DA TRANSAÇÃO! Enquanto vc não enviar esse comando, a transação (apesar de aprovada) está PENDENTE!
7-) Não conseguiu imprimir? Manda comando de CANCELAMENTO DA TRANSAÇÃO e, se for o caso, inicia tudo de novo

Importante1: A transação TEF não está ok quando vc recebe a msg de aprovação da bandeira. A transação TEF somente de fato eh realizada quando vc consegue imprimir os comprovante e manda comando de confirmação da transação

Importante2: O que colocar nos comandos, de transação ou cancelamento, por exemplo? É so seguir o manual que la eles dizemos o que deve conter em cada

Importante3: No momento que vc envia comando de TRANSAÇÃO, o Sitef assume o barco e a interface dele é aberta. Daí o usuario vai respodendo ao Sitef aquelas costumeiras perguntas: Credito ou Debito? Quantas parcelas?, etc... Enquanto isso vc ta la parado aguardando a criaçao do arquivo de resposta. É o que nos resta fazer kkkkk. O que vc tem que fazer eh mandar o arquivo de requisição e esperar o arquivo de resposta. O restante é com o Sitef
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar de usuário

janio
Colaborador

Colaborador
 
Mensagens: 1835
Data de registro: 06 Jul 2004 07:43
Cidade/Estado: UBAJARA - CE
Curtiu: 8 vezes
Mens.Curtidas: 68 vezes

Pin pad Gertec PPC 910

Mensagempor HASA » 26 Mai 2017 13:56

:-Y X:)
Nossa parece bastante informação para digerir, mas... vou tentar, valeu mesmo.
Sucesso.
:{
HASA
Avatar de usuário

HASA
Colaborador

Colaborador
 
Mensagens: 1082
Data de registro: 01 Set 2003 19:50
Cidade/Estado: São Paulo
Curtiu: 1 vez
Mens.Curtidas: 51 vezes

Pin pad Gertec PPC 910

Mensagempor HASA » 26 Mai 2017 14:10

:%
Jânio o que você sugere que eu grave da trasação tef, Ex: número da transação imagino e MAIS...
HASA
Avatar de usuário

HASA
Colaborador

Colaborador
 
Mensagens: 1082
Data de registro: 01 Set 2003 19:50
Cidade/Estado: São Paulo
Curtiu: 1 vez
Mens.Curtidas: 51 vezes

Anterior Próximo



Retornar para Harbour

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 7 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro