Olá, primeiro "post" aqui!
Estou desenvolvendo uma comunicação entre o Protheus e a Loja Integrada VTEX, onde irei precisar utilizar metodos GET e POST.
Através do método GET eu consegui consumir informações normalmente.
Porém através do método POST eu não consegui, sempre é retornado o erro "400 Bad Request - O Conteúdo não é um arquivo JSON válido."
Segue o exemplo de como estou fazendo:
1° Exemplo *:
Local aArea := GetArea()
// Variavel Local Caractere para receber a url base da API
Local cUrlBase := 'https://api.awsli.com.br'
// Variavel Local para receber o cabeçalho da conexão com a API
Local aHeader := {}
// Variavel Local Objeto para conexão com a API
Local oRestCli := nil
// Variavel Local Caractere para receber os dados do cliente a ser enviado
Local oObjJson := nil
Local aJson := {}
// Variavel Local Lógica para controle de retorno
Local lRetorno := .F.
Local nHandle := nil
// Iniciando Parametros da Conexão
oRestCli := FWRest():New(cUrlBase)
// Concatenando caminho a urlbase
oRestCli:setPath('/v1/cliente')
// Definindo dados do cabeçalho da conexão
aadd(aHeader, "Content-Type: application/json; charset=UTF-8")
aadd(aHeader, "User-Agent: Mozilla/5.0 (compatible; Protheus " + GetBuild() + ")")
aadd(aHeader, "Accept: */*")
aadd(aHeader, "Authorization: chave_api CODIGO_CHAVE aplicacao CODIGO_CHAVE")
oObjJson := JsonObject():New()
oObjJson["email"] := "anderson-alves98@leanclean.com.br"
oObjJson["nome"] := "Anderson Rafael Alves"
oObjJson["sexo"] := "f"
oObjJson["aceita_newsletter"] := .T.
oObjJson["telefone_principal"] := "7727562476"
oObjJson["telefone_comercial"] := nil
oObjJson["telefone_celular"] := "77997596060"
oObjJson["grupo_id"] := "1"
oObjJson["tipo"] := "PF"
oObjJson["cpf"] := "56845278849"
oObjJson["rg"] := "359396525"
oObjJson["razao_social"] := nil
oObjJson["cnpj"] := nil
oObjJson["ie"] := nil
// Adicionando array de endereços
aJson := {}
aadd(aJson,JsonObject():new())
aJson[1]["endereco"] := "Rua B"
aJson[1]["numero"] := "861"
aJson[1]["complemento"] := nil
aJson[1]["bairro"] := "Zabelê"
aJson[1]["cidade"] := "Vitória da Conquista"
aJson[1]["estado"] := "BA"
aJson[1]["cep"] := "45079442"
aJson[1]["pais"] := "BRA"
aJson[1]["nome"] := "Residencia"
oObjJson["enderecos"] := JSonObject():New()
oObjJson["enderecos"] := aJson
oObjJson["data_nascimento"] := "1998-05-12"
// Gravando arquivo no c: para teste
FWAlertInfo(cValToChar(oObjJson), "JSON")
nHandle := FCreate('C:\arquivo_teste_json.txt')
FWrite(nHandle, cValToChar(oObjJson))
FClose(nHandle)
// Setando parametros do post
oRestCli:SetPostParams(oObjJson:ToJson())
oRestCli:SetChkStatus(.F.)
// Tentando conectar na API para passar dados - MÉTODO POST
if oRestCli:POST(aHeader)
cError := ""
nStatus := HTTPGetStatus(@cError)
if nStatus >= 200 .And. nStatus <= 299
if Empty(oRestCli:getResult())
FWAlertInfo(nStatus, "Status HTTP")
else
FWAlertInfo(oRestCli:getResult(), "Resultado do POST")
endif
else
FWAlertError(cError + oRestCli:GetLastError() + CRLF + oRestCli:getResult(), "ERRO!!!")
endif
else
// Mensagem de erro
FWAlertError('Não foi inserir o Cliente! Retorno do erro: ' + oRestCli:GetLastError() + CRLF + oRestCli:getResult(), 'ERRO!')
endif
nHandle := FCreate('c:\retorno_teste_json_LJBPOSTCLI_.txt')
FWrite(nHandle, cValToChar(cError + CRLF + oRestCli:GetLastError() + CRLF + oRestCli:getResult()))
FClose(nHandle)
RestArea(aArea)
2° Exemplo *:
Local aArea := GetArea()
Local cUrl := "https://api.awsli.com.br"
Local cResource := "/v1/cliente"
Local aHeader := {}
Local cHeadRet := ''
Local nTimeOut := 120
Local oObjJson := nil
Local _cResult := nil
Local nHandle := nil
oObjJson := JsonObject():New()
oObjJson["email"] := "anderson-alves98@leanclean.com.br"
oObjJson["nome"] := "Anderson Rafael Alves"
oObjJson["sexo"] := "f"
oObjJson["aceita_newsletter"] := .T.
oObjJson["telefone_principal"] := "7727562476"
oObjJson["telefone_comercial"] := nil
oObjJson["telefone_celular"] := "77997596060"
oObjJson["grupo_id"] := "1"
oObjJson["tipo"] := "PF"
oObjJson["cpf"] := "56845278849"
oObjJson["rg"] := "359396525"
oObjJson["razao_social"] := nil
oObjJson["cnpj"] := nil
oObjJson["ie"] := nil
// Adicionando array de endereços
aJson := {}
aadd(aJson,JsonObject():new())
aJson[1]["endereco"] := "Rua B"
aJson[1]["numero"] := "861"
aJson[1]["complemento"] := nil
aJson[1]["bairro"] := "Zabelê"
aJson[1]["cidade"] := "Vitória da Conquista"
aJson[1]["estado"] := "BA"
aJson[1]["cep"] := "45079442"
aJson[1]["pais"] := "BRA"
aJson[1]["nome"] := "Residencia"
oObjJson["enderecos"] := JSonObject():New()
oObjJson["enderecos"] := aJson
oObjJson["data_nascimento"] := "1998-05-12"
// Gravando arquivo no c: para teste
FWAlertInfo(cValToChar(oObjJson), "JSON")
nHandle := FCreate('C:\arquivo_teste_json_LJBHTPTCLI_.txt')
FWrite(nHandle, cValToChar(oObjJson))
FClose(nHandle)
// Definindo dados do cabeçalho da conexão
aadd(aHeader, "Content-Type: application/json; charset=UTF-8")
aadd(aHeader, "User-Agent: Mozilla/5.0 (compatible; Protheus " + GetBuild() + ")")
aadd(aHeader, "Accept: */*")
aadd(aHeader, "Authorization: chave_api CODIGO_CHAVE aplicacao CODIGO_CHAVE")
_cResult := HTTPPost(cUrl + cResource, "",cValToChar(oObjJson),nTimeOut,aHeader,@cHeadRet)
nHandle := FCreate('C:\retorno_teste_json_LJBHTPTCLI_.txt')
FWrite(nHandle, cValToChar(_cResult))
FClose(nHandle)
if !empty( _cResult )
FWAlertInfo(cValToChar(_cResult), "HTTPS POST OK")
else
FWAlertInfo(cValToChar(_cResult), "HTTPS POST FAILED")
endif
RestArea(aArea)
Os dados da pessoa acima são ficticios. A chave foi suprimida por motivos obvios.
A questão é que de ambas as formas, inclusive montando o JSON "na mão" em uma variável com o conteúdo STRING gera o mesmo erro. Eu andei pesquisando bastante e acho que talvez seja algo relacionado ao charset, mas não solucionei ainda.enter code here