Ir para conteúdo
  • Cadastre-se

dev botao

Webservice - Acess violation em enviar


Recommended Posts

Estou fazendo os testes da API de registro de boletos começando pelo Sicredi.

Estava fazendo já o registro, baixa, consulta e alteração de vencimento com sucesso, dando problema apenas na alteração da data limite do desconto (outro tópico). Mas após atualizar o ACBr (rodei o ACBrInstall_Trunk2) para ver se resolvia, só apareceram outros problemas que não existiam como relatado abaixo:

1. Registro - Problema em dados com acentuação, testei retirando os acentos e funcionou, mas são inúmeros clientes. Já existe outro tópico em aberto com o problema.

2. Baixa - Baixa com sucesso, mas dá erro de Acess Violation. Já depurei e é dentro da rotina do enviar. Como pode ver nos prints em anexo

3. Alterar Vencimento - Altera com sucesso, mas dá erro de Acess Violation. Já depurei e é dentro da rotina do enviar.

4. Alterar data limite do desconto. Dá erro de Acess Violation - Outro tópico. 

Todos esses erros de Acess Violation não tinham antes no ACBr, o debuger por exemplo mostrava o erro do pas do ACBr

eemplo:

image.png.c610222abccab75b3b2faf4aa2ef2d25.png

Agora tudo dá erro de Acess Violation, mesmo quando o comando é executado com sucesso.

image.thumb.png.1296f47070bce0f5d48cf9462748afa9.png

image.thumb.png.a094c625ec2399a0e469ad5c24b51e45.png

 

RetornoBaixa.txt RetornoAlteraDataLimiteDesconto.txt RetornoAlteraVencimento.txt

image.png

image.png

Editado por Luciano Rodrigues Pereira
Link para o comentário
Compartilhar em outros sites

Não entendi, entrar com F7 onde?

Outra coisa, na hora de registrar ou consultar não dá erro. Só dá erro na hora de baixar e alterar o vencimento. Mas ele baixa e altera o vencimento com sucesso (como pode ver nos anexos) e só depois dá o acess violation nesta linha aí do ACBr, dentro da rotina de "enviar". Não dá para entender.

Acredito que esse acess violation tem a mesma razão em todos os casos, mas não sei que razão é essa. Só lembrando que esses problemas não tinham antes de eu atualizar o ACBr e eu não mudei uma linha sequer na aplicação antes da atualização do ACBr e vinha funcionando perfeitamente. Então só pode ser alguma coisa no componente.

 

 

Link para o comentário
Compartilhar em outros sites

Lembrando o processo que faço:

Configuro todas as informações do WebService e cedente.
Depois eu apenas adiciono o título na lista de boletos  com

Boleto1.ListadeBoletos.Clear;
titulo:= Boleto1.CriarTituloNaLista;
titulo.OcorrenciaOriginal.Tipo:= toRemessaBaixar;
titulo.NossoNumero := nosso número que estou tentando baixar por exemplo
Boleto1.ListadeBoletos.Add(titulo);

faço: Boleto1.Configuracoes.WebService.Operacao := tpBaixa;

E envio o comando: Boleto1.enviar;

A partir daí ele vai baixar com sucesso mas vai dar Acess Violation nesta linha do ACBrJson aí e não tem como depurar a partir do Acess Violation.

Portanto, não tem como eu ver o que ele está retornando, Eu acredito que o problema seja quando ele vai montar esse JSon. Mas não tem como eu ver onde está o problema, pois eu só dou o comando enviar e ele não retorna para linha seguinte do meu app, ele dá erro dentro do processo enviar. E o retorno do Json é após (ou na rotina) de enviar.

Só lembrando que os comandos de tpRegistrar e tpConsultaDetalhe funcionam de boa, mas tpBaixar e tpAlterarVencimento está com esse problema. O
ACBr realmente baixa e altera o vencimento com sucesso, mas logo depois dá o erro de Acess Violation e não retorna. Entendeu?

 

Link para o comentário
Compartilhar em outros sites

  • Consultores
19 horas atrás, Luciano Rodrigues Pereira disse:

E deu o erro de Acess Violation

Debuga o processo para ver onde ocorre o AV, se alguma chave do json que não existe, o próprio que pode não ter sido retornado ou algum ponto que esteja tentando acessar algo inexistente ou já removido da memória. 

Caso tenha alguma sugestão de correção, anexe os fontes alterados para análise.

Link para o comentário
Compartilhar em outros sites

1. Instalei o Delphi e o ACBr (atualizado) do zero em outro computador e o erro persiste, então não é meu Delphi. E nem poderia ser, porque Registro e Consulta de boletos funcionam.

2. Em relação aos meus fontes, deixei para lá e fiz os testes no exemplo do ACBr (ACBrBoletoDemo), mas lá só tem Registro e Consulta de boletos e essas funções estão funcionando sem problema. Então mudei a Consulta para Baixa (é só usar a operação tpBaixa e ocorrencia original toRemessaBaixar), só para testar a baixa e o erro de AV também acontece no ACBrBoletoDemo, então não são meus fontes.

3. O erro só acontece quando rodando dentro do Delphi (após compilar), fora do Delphi não tem erro, acredito que por conta de algum try/excep. Mesmo dentro do Delphi, ele dá o erro, mas faz a baixa do boleto no banco corretamente. Então acredito que o problema seja na hora dele ler montar o Json de retorno do banco.

4. Para depurar eu mudei o pas onde acontece o erro (ACBrJSon.pas) para salvar em um txt cada chamada da função onde está o erro, e descobri que o erro é quando a função recebe como parâmetro "nome". Aí ele dá pane quando ele vai fazer  LIndex := FJSON.IndexOf(AName); Nos demais campos mesmo com um índice negativo ele não dá erro. Mas no "nome" não tem índice nenhum.
Esse "nome" é o primeiro campo dentro de "Pagador", mas Baixa, alteração de vencimento, alteração de data de desconto, alteração do valor de desconto, etc., não tem o campo Pagador como retorno da API. 

Tenho certeza que se houvesse em ACBrBoletoDemo a função de baixar boleto ou alterar vencimento, vocês veriam o problema. Se puderem testar aí vão ver o problema.

Segue o txt que gerei em anexo.

ACBrJason.pas 
function TACBrJSONObject.GetAsValue(const AName: string): TACBrJSONValue;

AName:
access_token - indice: 0
expires_in - indice: 1
error - indice: 1
status - indice: -1
error - indice: 1
message - indice: 3
erros - indice: -1
codigoBarras - indice: -1
linhaDigitavel - indice: -1
carteira - indice: -1
seuNumero - indice: -1
nossoNumero - indice: -1
pagador - indice: -1
nome <------ AQUI DÁ O ERRO 
 

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Estranho pois uso o mesmo para emissão, alteração ,baixa etc e não tenho o erro relatado.

mas vou tentar simular jogando informações incompletas ou erradas.

eu uso só o V2 do sicredi

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

  • Consultores

Obrigado pela análise.

1 hora atrás, Luciano Rodrigues Pereira disse:

3. O erro só acontece quando rodando dentro do Delphi (após compilar), fora do Delphi não tem erro, acredito que por conta de algum try/excep. Mesmo dentro do Delphi, ele dá o erro, mas faz a baixa do boleto no banco corretamente. Então acredito que o problema seja na hora dele ler montar o Json de retorno do banco.

Não deve ser problema então, deve ser alguma exceção levantada e que foi tratada por um try..except.

Ao clicar em continuar ou ignore... ele deve seguir sem problemas em ambiente de desenvolvimento.

1 hora atrás, Luciano Rodrigues Pereira disse:

4. Para depurar eu mudei o pas onde acontece o erro (ACBrJSon.pas) para salvar em um txt cada chamada da função onde está o erro, e descobri que o erro é quando a função recebe como parâmetro "nome". Aí ele dá pane quando ele vai fazer  LIndex := FJSON.IndexOf(AName); Nos demais campos mesmo com um índice negativo ele não dá erro. Mas no "nome" não tem índice nenhum.
Esse "nome" é o primeiro campo dentro de "Pagador", mas Baixa, alteração de vencimento, alteração de data de desconto, alteração do valor de desconto, etc., não tem o campo Pagador como retorno da API. 

Se tiver alguma sugestão de correção do erro, anexe os fontes para análise, pois o tratamento com try..except deve ter previsto exceções para não interromper o processo em produção.

Link para o comentário
Compartilhar em outros sites

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.

The popup will be closed in 10 segundos...