API para CIOT

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

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

API para CIOT

Mensagem por JoséQuintas »

Antes de encerrar, voltamos à compilação -w3 -es2
d:\temp>hbmk2 test -w3 -es2
hbmk2: Processing environment options: -comp=mingw
hbmk2: Processing configuration: d:\harbour\bin\hbmk.hbc
Harbour 3.2.0dev (r2303091450)
Copyright (c) 1999-2021, https://harbour.github.io/
Compiling 'test.prg'...

test.prg:57: warning W0001 Ambiguous reference 'CURLOPT_HTTPHEADER'
test.prg:67: warning W0001 Ambiguous reference 'CURLOPT_URL'
test.prg:68: warning W0001 Ambiguous reference 'CURLOPT_POST'
test.prg:69: warning W0001 Ambiguous reference 'CURLOPT_POSTFIELDS'
test.prg:75: warning W0001 Ambiguous reference 'CURLINFO_RESPONSE_CODE'
test.prg:84: warning W0032 Variable 'CCIOT' is assigned but not used in function '51:MAIN'
Tá faltando o #include da libcurl, que não tem nada a ver com a tal "hbapi.h".

e a variável CCIOT, foi criada pra bost. nenhuma, tá aí de intrometida, e por isso mostra erro.

Aonde tem as funções que faltam ?
Sei lá...

A julgar pelo uso indevido de ".", ou o fonte é de outra linguagem de programação, ou de alguma minigui/fivewin.
Se faz parte das LIBs não faço a menor idéia.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

API para CIOT

Mensagem por JoséQuintas »

Mais um pouco ?

A julgar pelo uso de jsonImport().... deve ser equivalente a hb_JsonDecode() e inventaram outra, ou outra linguagem ou xharbour, sei lá.
Talvez oJson := hb_JsonDecode( cResponse )

a julgar pelo uso de jsonget(), deve ser o uso de hash, que inventaram alguma função desnecessária
Talvez oJson[ "CIOT" ]

JsonRelease( oJson ), dever ser oJson := Nil e inventaram função, sei lá.

JsonToStr() devem ter inventado função pra do harbour hb_JsonEncode()

JsonNew() devem ter inventado função pra x := hb_Hash(), mas parece até coisa de Visual Basic, a julgar pelo uso e pela destruição no final

É tudo chute, mas é por aí.
Como eu disse.... fontes suspeitos.

E tava preocupado com o #include "hbapi.h"

Tudo que fiz é coisa normal: compilar e ver os erros.

Depois foi suposição pelos nomes ou pelo uso.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

API para CIOT

Mensagem por JoséQuintas »

LOCAL oData := {}
LOCAL cJson := JsonToStr(oData)
LOCAL oHeaders := {}
LOCAL cResult := HttpPost(cUrl, cJson, oHeaders)
LOCAL oResponse := JsonToObj(cResult)

oData["valor"] := 1000.00
oData["id_carreteiro"] := "123456"
oData["tipo_operacao"] := "carga"
oData["descricao"] := "Frete para São Paulo"
oData["placa_veiculo"] := "AAA1234"
oData["placa_reboque1"] := "BBB5678"
oData["cpf_cnpj_pagar"] := "12345678900"
oData["nome_pagar"] := "Transportadora XPTO"
oData["cidade_origem"] := "Rio de Janeiro"
oData["uf_origem"] := "RJ"
oData["cidade_destino"] := "São Paulo"
oData["uf_destino"] := "SP"
Mais um pouco...
Por causa do uso LOCAL em lugar errado, ao mover pra cima, oResponde := JsonToObj(cResult) ficou em lugar errado, o que precisa ser convertido só está mais pra frente, teria que separar a declaração da variável do uso dela.

Quem deixa ficar declarando no meio do fonte é VISUAL BASIC.
Quem cria objetos pra usar depois é VISUAL BASIC oJson := JsonNew()
Quem usa "." pra classes é VISUAL BASIC
Quem destrói objetos é VISUAL BASIC JsonRelease( oJson )
Tudo indica que é um fonte visual basic ajustado, que nunca foi usado em harbour

Procure outra referência porque esses fontes não servem.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

API para CIOT

Mensagem por JoséQuintas »

erro.png
Chutando tudo, como possibilidade, diz que esse endereço de internet não existe.
Mais essa também.....

Código: Selecionar todos


PROCEDURE gerarCIOT()

   LOCAL cUrl := "https://api.truckpadpay.com.br/v1/emissao"
   LOCAL cToken := "seu-token-aqui"
   LOCAL oData := hb_Hash()
   LOCAL cResposta, oJson

   oData["valor"] := 1000.00
   oData["id_carreteiro"] := "123456"
   oData["tipo_operacao"] := "carga"
   oData["descricao"] := "Frete para São Paulo"
   oData["placa_veiculo"] := "AAA1234"
   oData["placa_reboque1"] := "BBB5678"
   oData["cpf_cnpj_pagar"] := "12345678900"
   oData["nome_pagar"] := "Transportadora XPTO"
   oData["cidade_origem"] := "Rio de Janeiro"
   oData["uf_origem"] := "RJ"
   oData["cidade_destino"] := "São Paulo"
   oData["uf_destino"] := "SP"

   cResposta := HttpPost( cUrl, oData, "application/json", "Bearer " + cToken )

   ? "Resultado: ", cResposta

   oJson := hb_JsonDecode( cResposta )

   ALTD() // debugar pra ver os nomes em oJson

   ? oJson[ "CIOT" ] // chute

   RETURN

FUNCTION httpPost( cUrl, oData, cHead1, cHead2 )

   LOCAL oWeb, cResposta

   oWeb := win_OleCreateObject( "MSXML2.ServerXMLHTTP" )
   oWeb:Open( "PUT", cUrl, .F. )
   oWeb:SetRequestHeader( "Content-Type", cHead1 )
   oWeb:SetRequestHeader( "Authorization", cHead2 )
   oWeb:Send( hb_JsonEncode( oData ) )
   oWeb:WaitForResponse( 100 )
   cResposta := oWeb:ResponseBody()

   RETURN cResposta
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
ivanil
Usuário Nível 3
Usuário Nível 3
Mensagens: 166
Registrado em: 11 Set 2004 15:13
Localização: Florianópolis/SC

API para CIOT

Mensagem por ivanil »

Ola Quintas;

Um dia desse eu vi este post e achei o código estranho....

Mas hoje eu estava fazendo uns testes com OpenAI e aí eu entendi... este código postado foi gerado por ela... por isso algumas coisas fora do lugar e ilógico, indicação de cabeçalho sem necessidade, pelo menos os sintomas são exatamente esses que apareceram nos meus testes; provavelmente o fornecedor da API provavelmente lançou um protótipo na IA e pediu uma conversão para harbour... novos tempos..kkk

Grande abraço.
Avatar do usuário
Alexandre Silva
Usuário Nível 3
Usuário Nível 3
Mensagens: 376
Registrado em: 26 Mar 2007 00:16
Localização: Itapema - SC

API para CIOT

Mensagem por Alexandre Silva »

Opa Foi isso mesmo Ivanil.
Como nao connheco achei que poderia funcionar..
Mas entao, para usar essa API o melhor metodo é com CUrl certo ?
Ou tem outras formas ? o PayLoad é em Json.
* Clipper 5.2e/Gaspro 4.0 /CDX/Blinker 7.0 Harbour 3.2 Console Hbmk2
ivanil
Usuário Nível 3
Usuário Nível 3
Mensagens: 166
Registrado em: 11 Set 2004 15:13
Localização: Florianópolis/SC

API para CIOT

Mensagem por ivanil »

Ola Alexandre,

você vai conseguir, usando este ultimo exemplo que o Quintas passou; mas você vai ter que voltar ao fornecedor e pegar pelo menos os caminhos corretos, é geralmente fornecido um ambiente de QA para testes; sem isso vc vai ficar sempre achando uma coisa e o problema está no endereçamento.

At.

Ivanil
Avatar do usuário
Alexandre Silva
Usuário Nível 3
Usuário Nível 3
Mensagens: 376
Registrado em: 26 Mar 2007 00:16
Localização: Itapema - SC

API para CIOT

Mensagem por Alexandre Silva »

Ok Obrigado
Vou trabalho em cima disso
Ruim é trabalhar com esse json, se fosse xml era bem mais facil
Como vou fazer essas identacoes no modelo do Jose Quintas ?
Ou tem como colocar a informacao de outra forma ?

"date_finish": "30/11/2021",
"doc_freight": [
{
"doc_freight_type": "1",
"doc_freight_number": "123456789",
"doc_freight_cubing": "300.00",
"doc_freight_commodity_value": "90.00",
"doc_freight_weight": "300.00",
"doc_freight_nature": "2617",
"fiscal_person": [
{
"fiscal_type": "1",
"fiscal_doc_type": "1",
"fiscal_doc_number": "89.637.085/0001-27",

Código: Selecionar todos

{
  "integrated_by": "70ecda3b-1c2c-43b4-b730-f7af34a114ff",
	"payment_method": "1",	
	"contractor_operation_type": "1",
	"id_freight_client": "89182",
	"freight_credited": "OWNER",
	"load_weight": "300.00",
	"load_nature": "2617",
	"source_state": "SP",
	"source_city": "SÃO PAULO",
	"source_city_ibge": "5300108",
	"source_cep": "13880000",
	"destination_state": "DF",
	"destination_city": "BRASÍLIA",
	"destination_city_ibge": "5300108",
	"destination_cep": "13880000",
	"toll_value": "",
	"fuel_value": "",
	"date_departure": "30/11/2021",
	"date_finish": "30/11/2021",
	"doc_freight": [
		{
			"doc_freight_type": "1",
			"doc_freight_number": "123456789",
			"doc_freight_cubing": "300.00",
			"doc_freight_commodity_value": "90.00",
			"doc_freight_weight": "300.00",
			"doc_freight_nature": "2617",
			"fiscal_person": [
				{
					"fiscal_type": "1",
					"fiscal_doc_type": "1",
					"fiscal_doc_number": "89.637.085/0001-27",
					"fiscal_name": "José",
					"fiscal_address_zip_code": "01308-020",
					"fiscal_address": "Rua das Laranjeiras"
				},
				{
					"fiscal_type": "2",
					"fiscal_doc_type": "1",
					"fiscal_doc_number": "09.144.751/0001-56",
					"fiscal_name": "José",
					"fiscal_address_zip_code": "01308-020",
					"fiscal_address": "Rua das Laranjeiras"
				},
				{
					"fiscal_type": "3",
					"fiscal_doc_type": "1",
					"fiscal_doc_number": "09.144.751/0001-56",
					"fiscal_name": "José",
					"fiscal_address_zip_code": "01308-020",
					"fiscal_address": "Rua das Laranjeiras"
				},
				{
					"fiscal_type": "4",
					"fiscal_doc_type": "1",
					"fiscal_doc_number": "09.144.751/0001-56",
					"fiscal_name": "José",
					"fiscal_address_zip_code": "01308-020",
					"fiscal_address": "Rua das Laranjeiras"
				}
			]
		}
	],
	"hired": [
		{
			"hired_type": "1",
			"hired_name": "Gaby",
			"hired_doc": [
				{
					"hired_doc_type": "2",
					"hired_doc_number": "34861575826"
				},
				{
					"hired_doc_type": "5",
					"hired_doc_number": "11577578"
				}
			],
			"hired_account_agency": "1",
			"hired_account_agency_digit": "1",
			"hired_account_number": "1",
			"hired_account_bank": "237",
			"hired_account_type": "1"
		},
		{
			"hired_type": "2",
			"hired_name": "",
			"hired_doc": [
				{
					"hired_doc_type": "",
					"hired_doc_number": ""
				}
			]
		},
		{
			"hired_type": "3",
			"hired_name": "Werley",
			"hired_doc": [
				{
					"hired_doc_type": "2",
					"hired_doc_number": "11443626520"
				}
			]
		}
	],
	"vehicle": [
		{
			"vehicle_plate": "PZV8946",
			"vehicle_rntrc": "11577578",
			"vehicle_category": "1"
		}
	],
  "parcel": [
		{
			"parcel_effectiveness_type": "2",
			"parcel_value": "100.00",
			"parcel_subtype": "1",
			"parcel_status_id": "2",
			"parcel_number_client": "1"
		},
	"freight_value_gross": "200.00",
	"tax": [
		{
			"tax_type": "IR",
			"tax_value": "1.00"
		}
	],
		"discharge": [
		{
			"discharge_reservation": "2",
			"discharge_place": "2",
			"discharge_discount_type": "2",
			"discharge_load_type": "1",
			"discharge_tolerance": "10"
		}
	]
}


* Clipper 5.2e/Gaspro 4.0 /CDX/Blinker 7.0 Harbour 3.2 Console Hbmk2
ivanil
Usuário Nível 3
Usuário Nível 3
Mensagens: 166
Registrado em: 11 Set 2004 15:13
Localização: Florianópolis/SC

API para CIOT

Mensagem por ivanil »

Ola Alexandre;

Endentação é irrelevante a API que consome os dados; é como xml, nao importa se vc junta linha, os identificadores estando certo é o que importa;
Quanto a usar um ou outro, o modelo que vc mostrou demonstra que a API trabalha com json, na verdade, basicamente tudo hoje é Json; melhor se acostumar.

At.

Ivanil
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

API para CIOT

Mensagem por JoséQuintas »

Alexandre Silva escreveu:Ruim é trabalhar com esse json, se fosse xml era bm mais facil
O harbour tem função pra json.
O próprio fonte já mostra: é só criar como hash array, e o harbour converte.

A grosso modo, hash array é array que usa nome ao invés de número.

Mas atenção, o json mistura hash array e array, conforme o nível.

Se consegue exemplos, pode partir do exemplo e olhar pelo debug pra evitar erros.

{ } (chaves) indica hash array, é nome e conteúdo
[ ] (colchetes) indica array
json.png

Código: Selecionar todos

xValue := hb_Hash()
xValue[ "intergrated_by", "70ecda3b-1c2c-43b4-b730-f7af34a114ff" ]
xValue[ payment_method", "1" ]
...
xValue[ "doc_freight" ] := {} // aqui array/lista 1, vai adicionar elementos aqui
   // criar lista 1
   xValue2 := hb_Hash()
   xValue2[ "doc_freight_type", "1" ]
   ...
   xValue2[ "fiscal_person" ] := {} // aqui array/lista 2
      // criar elementos do array/lista 2
      xValue3 := hb_Hash()
      xValue3[ "fiscal_type", "1" ]
      ...
     AAdd( xValue2[ "fiscal_person" ], xValue3 ) // adiciona na lista 2
     ..
   AAdd( xValue[ "doc_freight" ], xValue2 ) // adiciona na lista 1
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

API para CIOT

Mensagem por JoséQuintas »

"TALVEZ" dividir em módulos/funções evite erros.

Código: Selecionar todos

xValue := hb_Hash()
xValue[ "intergrated_by", "70ecda3b-1c2c-43b4-b730-f7af34a114ff" ]
xValue[ payment_method", "1" ]
...
xValue[ "doc_freight" ] := Lista1()


FUNCTION Lista1()

   LOCAL aList := {}, xValue

   DO WHILE ! Eof() // se tem vários alguma coisa vai ter pra processar
      xValue := hb_Hash()
      xValue[ "doc_freight_type", "1" ]
      ...
      xValue[ "fiscal_person" ] := Lista2()
      AAdd( aList, xValue )
   ENDDO

   RETURN aList

FUNCTION Lista2()

   LOCAL aList := {}, xValue 

   DO WHILE ! Eof()
         xValue := hb_Hash()
         xValue[ "fiscal_type", "1" ]
         ...
        AAdd( aList, xValue )
   ENDDO

   RETURN aList
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
Alexandre Silva
Usuário Nível 3
Usuário Nível 3
Mensagens: 376
Registrado em: 26 Mar 2007 00:16
Localização: Itapema - SC

API para CIOT

Mensagem por Alexandre Silva »

Obrigado
Estou trabalhando como essas informacoes todas
No caso abaixo nao aceitou compilar deu
Error E0020 Incomplete statement or unbalanced delimiters

Código: Selecionar todos

xValue := hb_Hash()
xValue[ "intergrated_by", "70ecda3b-1c2c-43b4-b730-f7af34a114ff" ]
xValue[ "payment_method", "1" ]
entao mudei para

Código: Selecionar todos

xValue := hb_Hash()
xValue[ "intergrated_by"]:= "70ecda3b-1c2c-43b4-b730-f7af34a114ff" 
xValue[ "payment_method"]:= "1"
É a mesma coisa nao é ?
Editado pela última vez por JoséQuintas em 11 Abr 2023 17:01, em um total de 1 vez.
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
* Clipper 5.2e/Gaspro 4.0 /CDX/Blinker 7.0 Harbour 3.2 Console Hbmk2
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

API para CIOT

Mensagem por JoséQuintas »

Alexandre Silva escreveu:É a mesma coisa nao é ?
NÃO, É TOTALMENTE DIFERENTE, PRA SITUAÇÕES DIFERENTES.
Lembra do que falei ? hash é igual array, a diferença é usar texto ao invés de valor

Código: Selecionar todos

a[ 1, 2 ]
a[ 1 ] := 2
No primeiro está usando o elemento 2 do array 1
No segundo está atribuindo um valor ao elemento 1
Tanto faz se é array com número ou hash array com nome.

estes dois são equivalentes, mas trata-se só do uso:

Código: Selecionar todos

a[ 1, 2 ]
a[ 1 ][ 2 ]
Voltando ao seu fonte:
Estava usando um valor pronto que não existia, ao invés de atribuir um valor.
Para o compilador, usar um valor pra nada não existe. (exceto pra evitar erro em compilação -w3)
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
Alexandre Silva
Usuário Nível 3
Usuário Nível 3
Mensagens: 376
Registrado em: 26 Mar 2007 00:16
Localização: Itapema - SC

API para CIOT

Mensagem por Alexandre Silva »

ok
Depois de montado esse Json, tenho como ver , de preferencia num arquivo. para ver se esta tudo certo ?
Poder copiar e colar no Postman para testar..

Tem uma funcao para isso ?
Ou vai ficar apenas na Memoria para ser enviado ?
* Clipper 5.2e/Gaspro 4.0 /CDX/Blinker 7.0 Harbour 3.2 Console Hbmk2
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

API para CIOT

Mensagem por JoséQuintas »

Isso é uma variável HASH.

hb_JsonEncode( variavel ) vai converter

Pode salvar o resultado disso, é um texto.

Pode colar o texto no postman (imagino que isso seja pra testes)
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder