DISP_E_MEMBERNOTFOUND (a saga...)

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

Moderador: Moderadores

Avatar do usuário
Adson
Usuário Nível 1
Usuário Nível 1
Mensagens: 33
Registrado em: 05 Mar 2019 10:36
Localização: GOIANIA/GO

DISP_E_MEMBERNOTFOUND (a saga...)

Mensagem por Adson »

Bom dia, senhores(as).

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
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
Editado pela última vez por Itamar M. Lins Jr. em 16 Jan 2022 16:30, em um total de 1 vez.
Razão: O presente tópico foi movido da seção HwGui, uma vez que seu conteúdo não tem relação com os objetivos daquela seção, onde só podem constar dúvidas técnicas de programação diretamente relacionadas com a HwGui.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

DISP_E_MEMBERNOTFOUND (a saga...)

Mensagem por Itamar M. Lins Jr. »

Olá!

Código: Selecionar todos

oServer:= CreateObject( "MSXML2.ServerXMLHTTP.6.0" )
http://forums.fivetechsupport.com/viewt ... =6&t=33609

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Adson
Usuário Nível 1
Usuário Nível 1
Mensagens: 33
Registrado em: 05 Mar 2019 10:36
Localização: GOIANIA/GO

DISP_E_MEMBERNOTFOUND (a saga...)

Mensagem por Adson »

Itamar M. Lins Jr. escreveu:Olá!

Código: Selecionar todos

oServer:= CreateObject( "MSXML2.ServerXMLHTTP.6.0" )
http://forums.fivetechsupport.com/viewt ... =6&t=33609

Saudações,
Itamar M. Lins Jr.
Itamar, obrigado pelo seu retorno, mas não deu certo.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

DISP_E_MEMBERNOTFOUND (a saga...)

Mensagem por Itamar M. Lins Jr. »

Olá!
Lendo na internet, é um erro por falta de DLL ou permissão.
Talvez TLS, SSL velhos ? desativados.
Ou tentar com permissões de ADMIN.
https://support.microsoft.com/pt-br/top ... 268bb10392

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Adson
Usuário Nível 1
Usuário Nível 1
Mensagens: 33
Registrado em: 05 Mar 2019 10:36
Localização: GOIANIA/GO

DISP_E_MEMBERNOTFOUND (a saga...)

Mensagem por Adson »

Itamar M. Lins Jr. escreveu:Olá!
Lendo na internet, é um erro por falta de DLL ou permissão.
Talvez TLS, SSL velhos ? desativados.
Ou tentar com permissões de ADMIN.
https://support.microsoft.com/pt-br/top ... 268bb10392

Saudações,
Itamar M. Lins Jr.
Funcionou aqui !!!! Obrigado, Itamar.

Para atualizar usamos o seguinte arquivo de lotes (executar o .bat como administrador)

Código: Selecionar todos

ECHO off
if EXIST %windir%\SysWOW64 goto Win64
:Win32
ECHO *** Criar registro x86 ***
REG ADD "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp" /v DefaultSecureProtocols /t REG_DWORD  /d 2688 /f
goto end
:Win64
ECHO *** Criar regsitro em  x64 ***
REG ADD "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp" /v DefaultSecureProtocols /t REG_DWORD  /d 2688 /f
goto end
:end
ECHO.
ECHO.
ECHO Concluido com sucesso
ECHO.
ECHO.
pause
Mais uma vez, muito obrigado !!!!!

.
Responder