DISP_E_MEMBERNOTFOUND (a saga...)
Enviado: 05 Jan 2022 09:39
Bom dia, senhores(as).
No xHarbour, eu uso o seguinte método para acessar uma URL e obter um token para acesso:
Funciona redondinho nas máquinas com Windows 10, no entanto, em algumas máquinas com Windows 7 (não todas), retorna msg DISP_E_MEMBERNOTFOUND.
Alguém pode me ajudar com uma sugestão ? Já pesquisei, inclusive aqui no fórum mas não encontrei.
Obs: Uso o xHarbour 1.2.3 + HWGui
No xHarbour, eu uso o seguinte método para acessar uma URL e obter um token para acesso:
Código: Selecionar todos
*******************************************************
*
* Obtém um novo token.
*
*******************************************************
METHOD ObterToken() CLASS TXYWZ
LOCAL oServer, nPos := 0, cCredentials, nExpireTime := 0
::cTokenTemp := ""
::cTokenType := ""
::tTokenExpira := CTOT("")
::aResultado := Hash()
::nCode := 0
// Obtém um novo token
oServer:=CreateObject( "MSXML2.ServerXMLHTTP")
// oServer:=CreateObject( "MSXML2.ServerXMLHTTP.5.0") (já testei com todos esses objetos mas sem sucesso)
// oServer:=CreateObject( "Microsoft.XMLHTTP" )
// oServer:=CreateObject( "MSXML2.XMLHTTP" )
oServer:Open( "POST", ::cURL + "/oauth2/token", .F. )
oServer:setRequestHeader( "Content-Type", "application/x-www-form-urlencoded; charset=utf-8")
oServer:SetRequestHeader( "accept", "*/*" )
oServer:SetRequestHeader( "Accept-Encoding", "gzip, deflate, br" )
oServer:SetRequestHeader( "Connection", "keep-alive" )
cCredentials := "client_id=" + ::cClientID + ;
"&client_secret=" + ::cClientSecret + ;
"&grant_type=client_credentials" + ;
"&scope=partner_all"
TRY
oServer:Send(cCredentials)
oServer:WaitForResponse( 1000 )
CATCH
FA_GravarLog( "OBTÉM TOKEN TRY CATCH (FALHA)" + LF + Ole2TxtError() + LF + valtoprg( oServer ) )
If ::lMsgErro
MsgExclamation("Falha ao obter um novo token de acesso."+LF+LF+;
"Erro na conexão com o site "+::cURL + "/oauth2/token"+LF+LF+;
"Erro: " + Ole2TxtError() +LF+LF+;
"Tente novamente mais tarde", PROCNAME() )
EndIf
oServer := NIL
Return
END
::nCode := oServer:status
nPos := aScan( aCode, {|x| x[1] == ::nCode } )
If nPos > 0
::cMsg := aCode[nPos,2]
Else
::cMsg := 'CÓDIGO DE RETORNO NÃO ENCONTRADO '+STR(::nCode,3)
EndIf
hb_jsonDecode( oServer:ResponseBody, @::aResultado )
// Salva o retorno
If ::lSalvaRet
If EMPTY( vJSonFile )
vJSonFile := STRZERO( HB_RandomInt( 999999 ), 6 )+".JSON"
EndIf
MemoWrit(vpUserDir+"\FCIAS_APP\RET_TOKEN_"+vJSonFile, oServer:ResponseText, .F.)
EndIf
If "ERRO INTERNO" $ UPPER(oServer:ResponseBody)
If ::lMsgErro
MsgExclamation("Houve um erro ao consultar o portal. Tente novamente mais tarde e se o problema persistir, "+;
"entre em contato com o seu suporte." )
EndIf
Else
If HHasKey(::aResultado,'access_token') .AND. ::aResultado['access_token'] != NIL
::cTokenTemp := ::aResultado['access_token']
endif
If HHasKey(::aResultado,'token_type') .AND. ::aResultado['token_type'] != NIL
::cTokenType := ::aResultado['token_type']
endif
If HHasKey(::aResultado,'expires_in') .AND. ::aResultado['expires_in'] != NIL
nExpireTime := ::aResultado['expires_in']
endif
// Salva as informações do token obtido
If !EMPTY( ::cTokenTemp )
::tTokenExpira := DATETIME() + ( nExpireTime/24/60/60 )
Else
FA_GravarLog( "OBTÉM TOKEN (FALHA)" + LF + valtoprg( oServer:ResponseBody ) )
If ::lMsgErro
MsgExclamation("Falha ao obter um novo token de acesso"+LF+LF+;
STR(::nCode,3)+" - "+::cMsg, PROCNAME() )
EndIf
EndIf
EndIf
oServer := NIL
Return
Alguém pode me ajudar com uma sugestão ? Já pesquisei, inclusive aqui no fórum mas não encontrei.
Obs: Uso o xHarbour 1.2.3 + HWGui