Base de conhecimento
Encontre respostas para suas dúvidas em quatro fontes de conhecimento diferentes ao mesmo tempo, simplificando o processo de pesquisa.

Cross Segmento - TOTVS Backoffice Linha Protheus - ADVPL - Consumo de web services com totvs http broker

time.pngTempo aproximado para leitura: 00:05:00 min

Ocorrência

Após a migração para o T-Cloud, nossas customizações de integração com os web services Protheus (tanto os fontes em ADVPL, quanto nas demais linguagens de mercado) pararam de funcionar.

Ambiente
Cross Segmento - TOTVS Backoffice (Linha Protheus)  – ADVPL – A partir da versão 12.1.17

Causa
Esta inconsistência ocorre porque na primeira requisição, mesmo que retornado um código 200, o conteúdo da requisição não é enviado, mas sim, uma orientação falando que o sistema está utilizando o TOTVS Broker HTTP + cookie para requisição.

Solução
Dado o fato do TOTVS Broker HTTP trabalhar com diversas instancias como slave, na primeira requisição é enviado um cookie para "amarrar" a sessão do requisitante à um slave específico (TOTVS_PROXY_SH_001).
Desta forma, torna-se necessário o envio do cookie na segunda requisição para o correto retorno dos dados.

Exemplo

// BIBLIOTECAS NECESSÁRIAS
#Include "TOTVS.ch"

//------------------------------------------------------
// REALIZA CONSUMO EM SERVIÇOS QUE UTILIZAM BROKER HTTP
//------------------------------------------------------
User Function T225BROKER()
Local aHeader := {} // CABEÇALHO
Local oRest := RestDef() // CLIENTE DE REQUISIÇÃO
Local cResponse := Space(0) // RESPOSTA
Local cCookie := Space(0) // COOKIE PARA ENVIO

// DEFINE O RETORNO OBRIGATÓRIO DO SERVIÇO
AAdd(aHeader, "Content-Type: application/json")

// REALIZA O PRIMEIRO POST
If (oRest:Post(aHeader))
// VERIFICA SE FOI ENVIADO ALGO NA RESPOSTA DA REQUISIÇÃO
If (Len(oRest:oResponseH:aHeaderFields) > 0)
// CASO TENHA SIDO ENVIADO, ENCONTRA O CONTEÚDO DE SET-COOKIE
cCookie := oRest:oResponseH:aHeaderFields[AScan(oRest:oResponseH:aHeaderFields, {|x| Upper(AllTrim(x[1])) == "SET-COOKIE"})][2]

// EXTRAI APENAS O COOKIE DO CABEÇALHO DE RETORNO
cCookie := StrTokArr2(cCookie, ";", .F.)[1]

// ADICIONA O COOKIE NO CABEÇALHO DA NOVA REQUISIÇÃO
AAdd(aHeader, "Cookie: " + EncodeUTF8(cCookie))
oRest := RestDef()

// REALIZA O SEGUNDO POST
If (oRest:Post(aHeader))
cResponse := oRest:GetResult()
Else
cResponse := oRest:GetLastError()
EndIf
EndIf
Else
cResponse := oRest:GetLastError()
EndIf
Return (NIL)

//------------------------------------------------------
// GERA UM CLIENTE DE REQUISIÇÃO PRONTO DA EXECUÇÃO
//------------------------------------------------------
Static Function RestDef()
Local cURI := "http://minhaempresaqui.protheus.cloudtotvs.com.br:4050/rest" // URL DO SERVIÇO
Local cPath := "/fornecedor" // RECURSO SOLICITADO
Local oRest := FwRest():New(cURI) // CLIENTE DE REQUISIÇÃO

// DEFINE O RECURSO E O CORPO DA REQUISIÇÃO (BODY)
oRest:SetPath(cPath)
oRest:SetPostParams(JsonDef())
Return (oRest)

//------------------------------------------------------
// REALIZA A MONTAGEM DO JSON DO CORPO DA REQUISIÇÃO
//------------------------------------------------------
Static Function JsonDef()
Local bJson := {|| JsonObject():New()} // OBJETO DE MACROEXECUÇÃO
Local oJson := Eval(bJson) // JSON DO CORPO DA REQUISIÇÃO (BODY)

// VETOR DE CAMPOS
oJson["fornecedor"] := {}

// CAMPOS DO VETOR
AAdd(oJson["fornecedor"], Eval(bJson))
oJson["fornecedor"][Len(oJson["fornecedor"])]["field"] := "A2_COD"
oJson["fornecedor"][Len(oJson["fornecedor"])]["value"] := "000001"

AAdd(oJson["fornecedor"], Eval(bJson))
oJson["fornecedor"][Len(oJson["fornecedor"])]["field"] := "A2_LOJA"
oJson["fornecedor"][Len(oJson["fornecedor"])]["value"] := "01"

/* DEMAIS INFORMAÇÕES DO JSON AQUI */
Return (oJson:ToJson())

Saiba mais
Broker HTTP - Detalhes do balanceamento
Esse artigo foi útil?
Usuários que acharam isso útil: 0 de 0

0 Comentários

Por favor, entre para comentar.
X Fechar

Olá ,

Há pendência referente a um de seus produtos contratados para a empresa ().

Entre em contato com o Centro de Serviços TOTVS para tratativa.

Ligue! 4003-0015 opção 4 e 9 ou registre uma solicitação para CST – Cobrança – Verificação de pendências financeiras . clique aqui.

TOTVS

X Fechar

Olá ,

Seu contato não está cadastrado no Portal do Cliente como um perfil autorizado a solicitar consultoria telefônica.

Por gentileza, acione o administrador do Portal de sua empresa para: (1)configurar o seu acesso ou (2)buscar um perfil autorizado para registro desse atendimento.

Em caso de dúvidas sobre a identificação do contato administrador do Portal, ligue (11) 4003-0015, opção 7 e, em seguida, opção 4 para buscar o suporte com o time de Assessoria ao Portal do Cliente. . clique aqui.

TOTVS

X Fechar

Olá ,

Para o atendimento de "Consultoria Telefônica" você deverá estar de acordo com o Faturamento.

TOTVS

X Fechar

Olá,

Algo inesperado ocorreu, e o usuario nao foi reconhecido ou você nao se encontra logado

Por favor realize um novo login

Em caso de dúvidas, entre em contato com o administrador do Portal de Clientes de sua empresa para verificação do seu usuário, ou Centro de Serviços TOTVS.

Ligue! 4003-0015 opção 4 e 9 ou registre uma solicitação para CST – Cadastros . clique aqui.

TOTVS

Chat _

Preencha os campos abaixo para iniciar o atendimento:

Chat _