Ir para conteúdo
  • Cadastre-se

dev botao

  • Este tópico foi criado há 4468 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

Pessoal, a homologadora a partir do dia 18/06/2012 está exigindo que a aplicação comercial

tenha o módulo Cielo Premia! Alguem já implementou isso no ACBrTEFD ou de outra forma que possa

me ajudar? Obrigado!

Postado

Metodo a ser utilizado para a Cielo Premia:

A automação deve enviar a TAG (transacao_valor_ajuste) no final do

buffer de solicitação de VENDA com o valor -> 00.

sera retornando num buffer junto com a primeira via do comprovante TEF o valor com desconto

na mesma TAG chamada (transacao_valor_ajuste). O Valor dado como desconto deve sair no cupom como desconto!

Para testar o valor da transação do cartão deve ser 10.010,02.

CIELO PREMIA_VeSPague.rar

Postado

Juliomar,

Vc poderia me ajudar, o que eu poderia fazer no ACBrTEFD para cumprir o requisito

acima exigido pela CIELO para homologação usando VeSPague em modo Background ?

Obrigado!

Postado

RESOLVIDO!!!

No momento da solicitação de um pagamento, deve ser enviado a TAG

transacao_valor_ajuste com o valor 00;

E caso tenha algum desconto o valor já com o desconto é devolvido na TAG

transacao_valor ! Eu coloquei para este valor retornado ser passado como mais um parametro

do tipo double de valor default 00 no evento OnEfetuaPagamento do componente ACBrTEFD!

Ai está a dica!

Valeu ai pessoal ! E até a próxima!

Postado

Daniel,

Segue abaixo as alterações em vermelho realizadas por mim para adicionar ao

componente ACBrTEFD para a homologação pela VeSPague da nova implementação do CIELO PREMIA,

exigida pela CIELO! Ela foi testada pelo homologador Moises e está conforme o solicitado pela CIELO!

//---Nova Declaração da função ProcessarRespostaPagamento com o novo parametro com valor Default = 00---

//---Esta nova declaração deve ser modificada em todos o .PAS que ela for declarada, no caso eu modifiquei em

//---ACBrTEFDClass.pas, ACBrTEFDBanese.pas, ACBrTEFDAuttar.pas, ACBrTEFDCliDTEF.pas, ACBrTEFDCliSiTef.pas e ACBrTEFDTicketCar.pas

Function ProcessarRespostaPagamento( const IndiceFPG_ECF : String; const Valor : Double; const ValorAjuste : Double = 00) : Boolean; override;

//---Função modificada no ACBrTEFDVeSPague.pas-------------------------------------------------------------

//---Novo corpo da função ProcessarRespostaPagamento---

Function TACBrTEFDVeSPague.ProcessarRespostaPagamento(

const IndiceFPG_ECF : String; const Valor : Double; const ValorAjuste : Double) : Boolean;//---A funcao recebe o ValorAjuste com valor default 0

var

ImpressaoOk : Boolean;

RespostaPendente : TACBrTEFDResp ;

begin

Result := True ;

with TACBrTEFD(Owner) do

begin

Self.Resp.IndiceFPG_ECF := IndiceFPG_ECF;

{ Cria Arquivo de Backup, contendo Todas as Respostas }

CopiarResposta ;

{ Cria cópia do Objeto Resp, e salva no ObjectList "RespostasPendentes" }

RespostaPendente := TACBrTEFDRespVeSPague.Create ;

RespostaPendente.Assign( Resp );

RespostasPendentes.Add( RespostaPendente );

if AutoEfetuarPagamento then

begin

ImpressaoOk := False ;

try

while not ImpressaoOk do

begin

try

ECFPagamento( IndiceFPG_ECF, Valor, ValorAjuste );//---O ValorAjuste é passado para a função ECFPagamento---

RespostasPendentes.SaldoAPagar := RoundTo( RespostasPendentes.SaldoAPagar - Valor, -2 ) ;

RespostaPendente.OrdemPagamento := RespostasPendentes.Count + 1 ;

ImpressaoOk := True ;

except

on EACBrTEFDECF do ImpressaoOk := False ;

else

raise ;

end;

if not ImpressaoOk then

begin

if DoExibeMsg( opmYesNo, 'Impressora não responde'+sLineBreak+

'Deseja imprimir novamente ?') <> mrYes then

begin

try ComandarECF(opeCancelaCupom); except {Exceção Muda} end ;

break ;

end;

end;

end;

finally

if not ImpressaoOk then

CancelarTransacoesPendentes;

end;

end;

if RespostasPendentes.SaldoRestante <= 0 then

begin

if AutoFinalizarCupom then

begin

FinalizarCupom;

ImprimirTransacoesPendentes;

end;

end ;

end;

end;

//---Novo corpo da função FazerRequisicao---

Function TACBrTEFDVeSPague.FazerRequisicao( Transacao : String;

AHeader : AnsiString = ''; Valor : Double = 0; Documento : AnsiString = '';

ListaParams : AnsiString = '') : Integer ;

begin

if fpAguardandoResposta then

raise Exception.Create( ACBrStr( 'Requisição anterior não concluida' ) ) ;

fCancelandoTransacao := (AnsiUpperCase(Transacao) = 'ADMINISTRACAO CANCELAR');

ServicoIniciar ;

ReqVS.Servico := 'executar' ;

ReqVS.AddParamString( 'transacao', Transacao ) ;

if Valor > 0 then

ReqVS.AddParamDouble('transacao_valor', Valor);

// V&SPague não coleta o Documento

if TransacaoOpcao <> '' then

ReqVS.AddParamString( 'transacao_opcao', TransacaoOpcao ) ;

//---Adicionando a TAG de solicitacao do CIELO PREMIA---

ReqVS.AddParamDouble( 'transacao_valor_ajuste', 00) ;

//------------------------------------------------------

if ListaParams <> '' then

ReqVS.Params.Add(ListaParams);

TransmiteCmd ;

Result := RespVS.Retorno;

Resp.Clear;

if not (Result in [0,1]) then

exit ;

with TACBrTEFDRespVeSPague( Resp ) do

begin

if Documento = '' then

Documento := IntToStr(fpIDSeq) ;

{ Adiciona Campos já conhecidos em Resp, para processa-los em

métodos que manipulam "RespostasPendentes" (usa códigos do G.P.) }

Conteudo.GravaInformacao(899,100, AHeader ) ;

Conteudo.GravaInformacao(899,101, IntToStr(ReqVS.Sequencial) ) ;

Conteudo.GravaInformacao(899,102, Documento ) ;

Conteudo.GravaInformacao(899,103, IntToStr(Trunc(SimpleRoundTo( Valor * 100 ,0))) );

// Grava valor de "Transacao|Sequencia" em 27(Finalizacao) para usar no CNF, NCN

Conteudo.GravaInformacao(27,0, Transacao+'|'+IntToStr(ReqVS.Sequencial) );

Resp.TipoGP := fpTipo;

end;

Req.Clear;

Req.Header := AHeader;

Req.ID := ReqVS.Sequencial;

Req.DocumentoVinculado := Documento;

Req.ValorTotal := Valor;

end;

//---------------------------------------------------------------------------------------------------------

//---Função modificada no ACBrTEFD.pas---------------------------------------------------------------------

//---Nova Declaração da função ECFPagamento com o novo parametro com valor Default = 00---

function ECFPagamento(Indice : String; Valor : Double; ValorAjuste : Double = 00) : Integer;

//---Novo corpo da função ECFPagamento---

Function TACBrTEFD.ECFPagamento( Indice: String; Valor: Double; ValorAjuste : Double ) : Integer ;//---Função recebe a variavel ValorAjuste com valor Default = 0

Var

Erro : String ;

begin

fTefClass.GravaLog( fTefClass.Name +' ECFPagamento: Indice: '+

Indice + ' Valor: '+FormatFloat('0.00',Valor) ) ;

Result := -1 ; // -1 = Não tratado

OnComandaECFPagamento( Indice, Valor, Result, ValorAjuste ) ;//---O ValoAjuste(Valor do Cielo Premia) é passado para o Evendo OnCommandaECFPagamento---

if Result < 1 then

begin

if Result = 0 then

Erro := 'Erro ao executar "OnComandaECFPagamento"'

else

Erro := '"OnComandaECFPagamento" não tratada' ;

fTefClass.GravaLog(Erro);

raise EACBrTEFDECF.Create( ACBrStr( Erro ) )

end;

end;

//---------------------------------------------------------------------------------------------------------

//---------------------------------------------------------------------------------------------------------

Function TACBrTEFDVeSPague.CRT( Valor : Double; IndiceFPG_ECF : String;

DocumentoVinculado : String = ''; Moeda : Integer = 0 ) : Boolean;

var

Retorno : Integer ;

begin

VerificarTransacaoPagamento( Valor );

Retorno := FazerRequisicao( fTransacaoCRT, 'CRT', Valor, DocumentoVinculado) ;

if Retorno = 0 then

Retorno := ContinuarRequisicao( False ) ; { False = NAO Imprimir Comprovantes agora }

Result := ( Retorno in [0,1] ) ;

if Result then

ProcessarRespostaPagamento( IndiceFPG_ECF, Valor, Resp.ValorTotal )//---É passado agora como parametro 'Resp.ValorTotal' contendo o valor com destonto do CIELO PREMIA---

else

FinalizarRequisicao;

end;

//---------------------------------------------------------------------------------------------------------

No evento do ComandaECFPagamento do componente ACBrTEFD, deve pegar a diferenca do parametros recebidos

(Valor - ValorAjuste) e colocar para sair como desconto no ECF quando for Totalizar o cupom!

Atenciosamente,

Augusto Cezar.

AlteraçõesACBrTEFD.rar

  • Fundadores
Postado

Obrigado pela informação, mas fica muito difícil analisar desta maneira....

Por favor adicione no post as Units modificadas, que eu as compararei com as originais usando o WinMerge

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

  • Fundadores
Postado

Augusto,

As alterações propostas podem causar incompatibilidade em todos os usuários que usam o ACBrTEFD atualmente (pois redefine a assinatura de um evento)... Pretendo estudar maneiras alternativas para suportar essa funcionalidade...

Verifiquei a documentação, e ela é direcionada a empresas que fazem o GP (como a V&SPague) e não para quem consome o GP (como nós)

Há alguma documentação escrita pela V&SPague sobre como proceder com essa funcionalidade ? Talvez o roteiro de testes também dê uma dica do que deva ser feito

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Postado

Daniel,

O Moises da VeSpague me passou o texto abaixo:

Metodo a ser utilizado para abilitar a aplicação para a Cielo Premia:

A automação deve enviar a TAG (transacao_valor_ajuste) no final do

buffer de solicitação de VENDA com o valor -> 00.

sera retornando num buffer junto com a primeira via do comprovante TEF o valor com desconto

na TAG chamada (transacao_valor).

Para testar o CIELO PREMIA o valor da transação do cartão deve ser 10.010,02.

//------------------------------------------------------------------------------------------------------------

PS. Acredito que não vá causar imcompatibilida pois o novo parâmetro do evento recebe como Default o valor 0(zero).

Com isso, mesmo que chame o evento sem a passagem deste parâmetro não dará erro de compilação! E este valor deve

ser pego justamente no momento do pagamento! No caso se não quiser colocar um novo parâmetro neste evento, este valor pode ser retornado no parametro 'VALOR' deste evento, pois caso não seja retornado o valor com desconto do CIELO PREMIA na tag transacao_valor ele retorna o valor sem o desconto nesta mesma tag!

Antenciosamente,

Augusto Cezar.

  • 1 mês depois ...
Postado

Ufaaaa! Ontem, depois de quase 3 dias de homologação consegui homologar minha aplicação em C++ Builder para o VeSPague

usando o ACBrTEFD e com as novas exigencias do CIELO PREMIA! Fomos a primeira empresa a homologar com CIELO PREMIA

usando o VeSPague! Os testes aumentaram bastante por causa desta nova exigencia da CIELO de ter o CIELO PREMIA!

Obrigado pela atenção de todos e até a proxima!

Qualquer dúvida estou a disposição!

Atenciosamente,

Augusto Cezar (ZerOne System!)

  • Fundadores
Postado

Ola Augusto,

Parabéns pela sua homologação...

Sinto muito não ter aproveitado suas modificações nos fontes originais... mas através delas, acredito que consegui modificar a classe original para suportar o Cielo Premia e adicionar um tratamento na Inicialização para Confirmar as Transações pendentes no caso do Cupom já haver sido impresso com sucesso (isso já era feito na classe do CliSiTEF)...

Se possível, por favor atualize sua cópia do SVN (após um backup dos seus fontes), e teste as alterações efetuadas...

Sei que é difícil mexer nos seus fontes atuais, agora que já está homologado... mas se possível, por favor efetue testes nos pontos mais críticos, usando o projeto TEFDDemo.

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

  • Este tópico foi criado há 4468 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.