Ir para conteúdo
  • Cadastre-se

dev botao

PIXCD_ConsultarPixRecebidos/Harbour gerando data maluca


Ver Solução Respondido por Júlio Cavalcanti,
  • Este tópico foi criado há 129 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Membros Pro
Postado

Boa Tarde pessoal,

Ao tentar executar o PIXCD_ConsultarPixRecebidos Assim:

cData1 := "2024-12-04T00:00:00.000"
cData2 := "2024-12-04T23:59:00.000"
PIXCD_ConsultarPixRecebidos(cData1,cData2,"","",nPag,nIt,@cBuf,@nLen))

ou assim:

cData1 := "2024-12-04"
cData2 := "2024-12-04"
PIXCD_ConsultarPixRecebidos(cData1,cData2,"","",nPag,nIt,@cBuf,@nLen))

Está aparecendo o seguinte no log:

04/12/24 16:07:45:127 - PIXCD_ConsultarPixRecebidos(30/12/1899,30/12/1899,,,1,30 )
04/12/24 16:07:45:137 - Travar
04/12/24 16:07:46:623 -    MoverStringParaPChar. StrLen:376, BufLen:255
04/12/24 16:07:46:623 -    SetRetorno(0, [Problema]
Detail=os parâmetros de consulta a  lista de pix recebidos não respeitam o schema ou não fazem sentido semanticamente.
Status=400
Title=Operação inválida.
correlationId=
type_uri=https://pix.bcb.gov.br/api/v2/error/PixConsultaInvalida

ou seja, uma data 30/12/1899 ?!?

  • Moderadores
Postado
  Em 05/12/2024 at 11:03, VFADev disse:

Bom dia Juliomar,
Mas eu não estou deixando de passar esses parâmetros. Estou passando eles vazios.

 

Expandir  

no caso creio que não deva ser vazio. tem que passar informações

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: juliomar_m@yahoo.com.br
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Transparent-02.png
 

 

  • Membros Pro
Postado (editado)

mas qual informação passo ai, se o que quero é consultar as transações de um período?

E no que isso interfere nas datas que estou enviando umas e a função recebendo outras?!?

 

Editado por VFADev
  • Consultores
Postado
  Em 04/12/2024 at 20:17, VFADev disse:

Boa Tarde pessoal,

Ao tentar executar o PIXCD_ConsultarPixRecebidos Assim:

cData1 := "2024-12-04T00:00:00.000"
cData2 := "2024-12-04T23:59:00.000"
PIXCD_ConsultarPixRecebidos(cData1,cData2,"","",nPag,nIt,@cBuf,@nLen))

ou assim:

cData1 := "2024-12-04"
cData2 := "2024-12-04"
PIXCD_ConsultarPixRecebidos(cData1,cData2,"","",nPag,nIt,@cBuf,@nLen))

Está aparecendo o seguinte no log:

04/12/24 16:07:45:127 - PIXCD_ConsultarPixRecebidos(30/12/1899,30/12/1899,,,1,30 )
04/12/24 16:07:45:137 - Travar
04/12/24 16:07:46:623 -    MoverStringParaPChar. StrLen:376, BufLen:255
04/12/24 16:07:46:623 -    SetRetorno(0, [Problema]
Detail=os parâmetros de consulta a  lista de pix recebidos não respeitam o schema ou não fazem sentido semanticamente.
Status=400
Title=Operação inválida.
correlationId=
type_uri=https://pix.bcb.gov.br/api/v2/error/PixConsultaInvalida

ou seja, uma data 30/12/1899 ?!?

Expandir  

Parece que a data não está sendo interpretada corretamente.

  • Membros Pro
Postado

Boa Tarde Julio,
Sim, parece ser esse realmente o problema que estou tendo.  Como eu poderia usar essa função ?  ela está disponível em alguma biblioteca ACBr?

  • Consultores
Postado
  Em 06/12/2024 at 16:36, VFADev disse:

Boa Tarde Julio,
Sim, parece ser esse realmente o problema que estou tendo.  Como eu poderia usar essa função ?  ela está disponível em alguma biblioteca ACBr?

Expandir  

Então, essa eu implementei em Java. Eu não domino Harbour, mas tu pode olhar como está em Java e passar para o Harbour.

Essa implementação é bem simples.

Tu vai receber o objeto do tipo Date (do Harbour) usar um método semelhante ao getTime (do Java), realizar a operação matemática para converter e devolver esse double.

  • Membros Pro
Postado
  Em 07/12/2024 at 00:17, rossine disse:

Olá,

Pelo que está documentado, os parâmetros devem ser no formato Data, então talvez deva ter que usar a função abaixo nas datas.

No harbour, temos a função hb_DateTime() que faz isto.

Neste link tem explicando como usar ela e outra funções que manipulam data e time

http://www.pctoledo.com.br/forum/viewtopic.php?f=42&t=25634

Veja se isto te ajuda.

 

Expandir  

Usando a função Hb_DateTime() pra passar a data como parâmetro para a função, temos isso no log.

dData1 := HB_DateTime(Year(Date()),Month(Date()),Day(Date()))
? dData1 // exibe 09/12/2024 10:06:51
nRet := PIXCD_ConsultarPixRecebidos(dData1,dData1,"","",1,30,@cbuf,nLen)

09/12/24 10:02:51:120 - PIXCD_ConsultarPixRecebidos(30/12/1899,30/12/1899,,,1,30 )

 

  • Membros Pro
Postado

Olá,

Pelo que está documentado, os parâmetros devem ser no formato Data, então talvez deva ter que usar a função abaixo nas datas.

No harbour, temos a função hb_DateTime() que faz isto.

Neste link tem explicando como usar ela e outra funções que manipulam data e time

http://www.pctoledo.com.br/forum/viewtopic.php?f=42&t=25634

Veja se isto te ajuda.

 

Olá, 

Talvez então passar somente data,por exemplo:

Date() ou ctod("09/12/2024")

Temte isto.

  • Curtir 1
  • Membros Pro
Postado
  Em 09/12/2024 at 13:30, rossine disse:

Olá,

Pelo que está documentado, os parâmetros devem ser no formato Data, então talvez deva ter que usar a função abaixo nas datas.

No harbour, temos a função hb_DateTime() que faz isto.

Neste link tem explicando como usar ela e outra funções que manipulam data e time

http://www.pctoledo.com.br/forum/viewtopic.php?f=42&t=25634

Veja se isto te ajuda.

 

Olá, 

Talvez então passar somente data,por exemplo:

Date() ou ctod("09/12/2024")

Temte isto.

Expandir  

Se vc der uma olhada um pouco acima, já fiz vários testes com os valores assim. Acredito que o problema seja mesmo de conversão de data, mas ainda não encontrei uma função que gere o valor como a biblioteca ACBr está esperando...

  • Consultores
Postado
  Em 09/12/2024 at 13:37, VFADev disse:

Se vc der uma olhada um pouco acima, já fiz vários testes com os valores assim. Acredito que o problema seja mesmo de conversão de data, mas ainda não encontrei uma função que gere o valor como a biblioteca ACBr está esperando...

Expandir  

Tu deu uma olhada na implementação do Java?

Seria algo como:

public double convertDateToTDateTime(Date date) {
    // Obtém o timestamp Unix em milissegundos
    long unixMillis = date.getTime();
    // Converte o timestamp para TDateTime
    double pascalDateTime = unixMillis / 86400000.0 + 25569.0;
	return pascalDateTime;
}
  • Membros Pro
Postado
  Em 09/12/2024 at 14:06, Júlio Cavalcanti disse:

Tu deu uma olhada na implementação do Java?

Seria algo como:

public double convertDateToTDateTime(Date date) {
    // Obtém o timestamp Unix em milissegundos
    long unixMillis = date.getTime();
    // Converte o timestamp para TDateTime
    double pascalDateTime = unixMillis / 86400000.0 + 25569.0;
	return pascalDateTime;
}
Expandir  

Sim, adaptei esse código para o Harbour:
 

FUNCTION convertDateToTDateTime() 
LOCAL unixMillis,pascalDateTime
    // Obtém o timestamp Unix em milissegundos 
    unixMillis := hb_TToMSec( hb_DateTime() )

   // Converte o timestamp para TDateTime 
   pascalDateTime := (unixMillis / 86400000.0) + 25569.0 
return pascalDateTime

Mas no log está aparecendo assim:
09/12/24 11:20:24:059 - PIXCD_ConsultarPixRecebidos(17/01/8707,17/01/8707,,,1,30 )

 
  • Membros Pro
Postado

Vcs saberiam me dizer qual a data inicial considerada pelas bibliotecas ACbr?

Microsoft' Ole sources count date/time from epoch Jan 1, 1900 00 hours
Unix / java/ etc start with Jan 1 1970 00 hours

  • Consultores
Postado

O Fluxo abstraído é:

  1. Use algum método que converte a data de um objeto Date para um timestamp Unix. 
  2. Multiplica o timestamp por 1000, para converter de segundos para milissegundos.
  3. realiza a operação timestamp em milissegundos/ 86400000.0 + 25569.0 para tornar compatível com o pascal.
  4. E o resultado da operação acima tu vai informar como parâmetro no método da lib.

Tente usar esse 45267.0 como parâmetro do método e veja o que sai no log.

  • Membros Pro
Postado
  Em 09/12/2024 at 14:59, Júlio Cavalcanti disse:

O Fluxo abstraído é:

  1. Use algum método que converte a data de um objeto Date para um timestamp Unix. 
  2. Multiplica o timestamp por 1000, para converter de segundos para milissegundos.
  3. realiza a operação timestamp em milissegundos/ 86400000.0 + 25569.0 para tornar compatível com o pascal.
  4. E o resultado da operação acima tu vai informar como parâmetro no método da lib.

Tente usar esse 45267.0 como parâmetro do método e veja o que sai no log.

Expandir  

Valeu Julio,
Consegui achar uma função que converte o timestamp pra Unix e agora as data já estão sendo lidas ok pelo método. Ficou assim o código:

dData1 := hb_DateTime(Year(dData1), Month(dData1), Day(dData1), 00, 00,00,00)
   unixMillis := FW_DateToUnix( dData1 )
   dData1 := (unixMillis / 86400000.0) + 25569.0
   
   dData2 := hb_DateTime(Year(dData2), Month(dData2), Day(dData2), 23, 59,59,999)
   unixMillis := FW_DateToUnix( dData2 )
   dData2 := (unixMillis / 86400000.0) + 25569.0

   IF (nRet := PIXCD_ConsultarPixRecebidos(dData1,dData2,"","",1,30,@cbuf,nLen)) == 0
      IF nLen > 255
         cBuf := Space(nLen)
         PIXCD_UltimoRetorno(@cBuf, @nLen)        
      ENDIF  
   ENDIF  

No log não apareceu mais nenhum erro:

09/12/24 14:43:06:096 - PIXCD_ConsultarPixRecebidos(04/12/2024,09/12/2024,,,1,30 )
09/12/24 14:43:06:097 - Travar
09/12/24 14:43:08:094 -    MoverStringParaPChar. StrLen:209, BufLen:255
09/12/24 14:43:08:094 -    SetRetorno(0, [ConsultarPIXRecebidos]
TxId=
TxIdPresente=0
cnpj=
cpf=
devolucaoPresente=0
fim=09/12/2024 23:59:59
inicio=04/12/2024
itensPorPagina=30
paginaAtual=1
quantidadeDePaginas=1
quantidadeTotalDeItens=5

Mas, não vieram as transações !  e no log diz ter 5 transações, que é mais ou menos a quantidade de testes que fiz. nesse periodo.

  • Consultores
Postado
  Em 09/12/2024 at 17:48, VFADev disse:

Valeu Julio,
Consegui achar uma função que converte o timestamp pra Unix e agora as data já estão sendo lidas ok pelo método. Ficou assim o código:

dData1 := hb_DateTime(Year(dData1), Month(dData1), Day(dData1), 00, 00,00,00)
   unixMillis := FW_DateToUnix( dData1 )
   dData1 := (unixMillis / 86400000.0) + 25569.0
   
   dData2 := hb_DateTime(Year(dData2), Month(dData2), Day(dData2), 23, 59,59,999)
   unixMillis := FW_DateToUnix( dData2 )
   dData2 := (unixMillis / 86400000.0) + 25569.0

   IF (nRet := PIXCD_ConsultarPixRecebidos(dData1,dData2,"","",1,30,@cbuf,nLen)) == 0
      IF nLen > 255
         cBuf := Space(nLen)
         PIXCD_UltimoRetorno(@cBuf, @nLen)        
      ENDIF  
   ENDIF  

No log não apareceu mais nenhum erro:

09/12/24 14:43:06:096 - PIXCD_ConsultarPixRecebidos(04/12/2024,09/12/2024,,,1,30 )
09/12/24 14:43:06:097 - Travar
09/12/24 14:43:08:094 -    MoverStringParaPChar. StrLen:209, BufLen:255
09/12/24 14:43:08:094 -    SetRetorno(0, [ConsultarPIXRecebidos]
TxId=
TxIdPresente=0
cnpj=
cpf=
devolucaoPresente=0
fim=09/12/2024 23:59:59
inicio=04/12/2024
itensPorPagina=30
paginaAtual=1
quantidadeDePaginas=1
quantidadeTotalDeItens=5

Mas, não vieram as transações !  e no log diz ter 5 transações, que é mais ou menos a quantidade de testes que fiz. nesse periodo.

Expandir  

Tente informar 0 na paginaAtual

×
×
  • 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 9 segundos...
The popup will be closed in 9 segundos...