Jump to content

logo_acbr_paygo.png

Chegou o TEF ACBr PayGo
Seja um revendedor e ofereça uma solução completa para seu cliente.


botao_saibamais.png

beneficios.png

Curso Dominando o ACBrMonitor
Novo Módulo Soluções de Varejo
Assine o SAC ACBr em qualquer plano e tenha acesso

Saiba Mais

Balança SM100 performance surpreendente

Tecnologia Japonesa   Teclado e Visor resistentes a água
Consumo inteligente de etiquetas   Baixo custo de manutenção
Comunicação Ethernet e WIFI independentes

Saiba Mais

Impressora de Etiquetas ELGIN - L42 PRO

Protocolos PPLA, PPLB, ZPL, EPL (automático)
Porta USB padrão Opcionais: Ethernet, Serial, Paralela
Sensor de Etiquetas Móvel Garantia de 18 meses

Saiba mais

marcelosantos

Usuários SAC
  • Content Count

    59
  • Joined

  • Last visited

Community Reputation

18 Good

About marcelosantos

  • Rank
    Membro

Profile Information

  • Sexo
    Masculino
  • Localização
    Caruaru

Recent Profile Visitors

782 profile views
  1. EMBarbosa, problema resolvido tudo funcionando perfeitamente Componente agora está redondo
  2. Basta consultar novamente a transação e verificar se o status é 'paid'
  3. Isso exato, eu tentei colocar um "Result.free" no final da função mais não deu certo, o retorno da função ficou invalido e o qr-code não foi carregado
  4. Tem sim, só vou precisar que você me diga como é feito esse FullDebug mais detalhes do erro 29 - 36 bytes: TStringStream x 3 -> Esse 3 no final indica que foram 3 TStringsStream que estouraram erro, no debug aqui na hora que mandou enviar uma solicitação ele passa no método de gerar o qr-code por 3 vezes, então por isso o 3 fiz um teste de uso normal e solicitei 5 pagamentos, o leak no final era = 15
  5. Olá a todos os envolvidos Refiz todos os testes e tudo esta funcionando perfeitamente muito boa a ideia deste evento "procedure TDM.ACBrPicPay1WaitingTimeout(var Retry: Boolean);" -> Testei retornando true e false para a variável e funcionou como esperado neste evento "procedure TDM.ACBrPicPay1WaitingPayment(const Status: string; const TempoRestante: Integer);" o Retorno do TempoRestante esta funcionando perfeitamente, era justamente o que eu queria o único problema agora é um Memory Leak que é estourado ao finalizar a aplicação e ter usado o método Enviar --------------------------- Unexpected Memory Leak --------------------------- An unexpected memory leak has occurred. The unexpected small block leaks are: 29 - 36 bytes: TStringStream x 3 The sizes of unexpected leaked medium and large blocks are: 3116, 3116, 3116 --------------------------- OK --------------------------- eu acredito que seja esta function, (não tenho certeza) function TACBrPicPay.GetQRCode: TStringStream; {$IFDEF FPC} procedure DecodeQRCodeLazarusFPC; var vData: Ansistring; begin vData := DecodeStringBase64(fQRCode); Result := TStringStream.Create(vData); Result.Position := 0; end; {$ELSE} procedure DecodeQRCodeDelphi; var Input: TStringStream; begin Input := TStringStream.Create(fQRCode); try Result := TStringStream.Create(fQRCode); DecodeStream(Input, Result); Result.Position := 0; finally Input.Free; end; end; {$ENDIF} begin if fQRCode = '' then begin Result := nil; EACBrPicpayError.Create('QRCode está vazio ou inválido.'); end; fQRCode := StringReplace(fQRCode, 'data:image/png;base64,', '', [rfReplaceAll]); {$IFDEF FPC} DecodeQRCodeLazarusFPC; {$ELSE} DecodeQRCodeDelphi; {$ENDIF} end; Ultimo detalhe, fiz os testes também iniciando a aplicação, usando os métodos, consultar e cancelar e não há nenhum memory leak ao fechar a aplicação
  6. Eu pensei em mais uma propriedade teríamos tempo de Retorno que seria o tempo total, e teriamos tempoDecorrido (tempo que falta) que seria o valor retornando para a aplicação
  7. Bom dia "resolvi" o contador de tempo restante do demo adicionando o seguinte na unit ACBRPicPay.pas procedure TACBrPicPayThread.FazWaitingPayment; begin if Assigned(fACBrPicpay.fOnWaitingPayment) then begin fACBrPicpay.fOnWaitingPayment(fACBrPicpay.Status); fACBrPicpay.TempoRetorno := fACBrPicpay.TempoRetorno - 1; // adicionei esta linha end; end; sei que não estou usando as melhoras praticas, mais resolveu aqui pra mim, tudo funcionando agora. Se houver uma melhor forma de fazer, gostaria de "ouvi-los"
  8. EMBarbosa a principio tudo funcionado perfeitamente, ainda vou continuar com os testes aqui ainda não consegui pegar o TempoRetorno, entendi que ele mudou para fUltimoTempoAguardo e que preciso usar Thread.synchonize (se você me disse como fazer, posso alterar o exemplo e mandar para vocês)
  9. Olá a todos Pessoal, enquanto não sai a atualização do componente, consegui usar o "código fonte" sem erros. Como estou fazendo? Crio o Componente em tempo de execução Configuro todas suas propriedades Atribuo procedures previamente criadas a todos aos eventos (onwait, statuspayment, error) Uso o componente (objeto). Aqui tudo funcionando, Enviar, Consultar e Cancelar no final destro o objeto com Free e se for usar novamente, executo tudo novamente
  10. Isso EMBarbosa, acredito que se resolver a questão da destruição e criação das threads resolva o problema do componente. Quanto ao não uso de threads por conta do congestionamento vou resolver com esta variável, ACBrPicpay1.CancelarAguardoRetorno := true;, ou seja se for uma transação que não preciso do retorno no exato momento, eu deixo manual para o usuario consultar a transação no momento mais oportuno para ele se a negociação/transação for no checkout do PDV, então bloqueio tudo (igual ao TEF discado) e aguardo a resposta pelo tempo configurado (com a opção de cancelar o aguardo, caso o cliente não consiga realizar o pagamento)
  11. EMBarbosa fiz 2 testes, vou descrever abaixo usando o demo disponível no SVN Iniciei o programa e solicitei o 1º pagamento, após gerar o qr-code, fiz o pagamento usando o celular, o programa estava contado o tempo e assim que confirmou o pagamento no celular o status mudou para "PAGO" na COR verde. Após isto solicitei um novo pagamento (sem fechar o programa e com um novo id de referencia) o QR-code, foi gerado, recebi no celular a solicitação de pagamento, mais o tempo não estava decrementando (no modo debug ele não passa pelo evento OnWaitPayment). No 2º teste, iniciei o programa solicitei um novo pagamento (com um novo id é claro), gerou o qr-code, mais não finalizei este pagamento, cancelei a "espera" setando ACBrPicpay1.CancelarAguardoRetorno := true;. Após isso gerei uma nova solicitação e novamente o demo não passa pelo evento onwaitPayment, e logo o tempo não é decrementado
  12. Amigos há um pequeno problema (bug) no componente ACBrPicPay, acredito que seja a forma que o componente trata uma ação Ao inciar a primeira transação (cadastrar um pagamento) com o componente tudo funciona perfeitamente. Se tentar realizar a segunda operação (de cadastrar novamente) o componente não entra mais no evento ACBrPicPay1WaitingPayment, é como se a thread de aguardar o status não existisse mais O componente não tem um metodo "Clean", igual usamos na NFe, para reiniciar o componente, e talvez aqui esteja o problema. Ainda não tenho conhecimento suficiente para resolver este, se alguém puder ajudar ficarei agradecido
  13. Emanuel, vou escrever o que eu entendo ... O PicPay foi criado para transações e-commerce desta forma a integração com sua API, traz estas 2 variaveis que você sitou acima porque? e para que elas servem? ACBrPicpay1.Lojista.URLCallBack, esta URL é passada para o PicPay pois assim que o mesmo detectar uma mudança de status na transação ele avisa a sua aplicação através desta url (ele faz um post em seu servidor/aplicação) (ele não avisa o status atual avisa apenas que a transação sofreu uma alteração de status) ACBrPicpay1.Lojista.URLReturn, esta segunda é para onde o cliente será redirecionado quando ele realizar o pagamento da transação via web todas 2 urls são obrigatórias, mas podem ser urls "invalidas" (no formato correto, mesmo sem existir) caso o seu uso seja apenas desktop como assim? você pode criar pagamentos, enviar para o PicPay, esquecer estes lá (o picpay comunica ao cliente via push notification, e email) ai depois para você saber se foi pago ou não você consulta o status deste pagamento, e se estiver tudo ok, você libera a transação vai ficar de forma manual? vai é o melhor uso? não o PicPay foi criado para isso? não mas podemos usar e integrar nossas aplicações desta forma mais eu queria deixar de forma automática, não tem como? tem sim basta você seguir a ideia do Thulio e criar (ter) servidor web para ficar fazendo o meio de campo (escutado as respostas do PicPay, e enviado para sua aplicação desktop as repostas através do Redis) é uma gambiarra? é, mas funciona
  14. Pessoal atualizei meu repositório e vi as classes (fontes) do ACBr PicPay mais não encontrei o pacote para instalar o componente o instalador também ainda não foi atualizado Alguém pode me ajudar de como instalar este componente?
  15. Obrigado a todos pelas respostas, olhando todos os Set na unit TDFeSSL, ficou claro todo os procedimentos (comportamentos) dos componentes
×
×
  • Create New...