API Bancaria (SOLUCIONADO)
Re: API Bancaria (SOLUCIONADO)
Hola,
Muy bueno
. Me he mirado por encima el code, no lo he probado. Por lo que veo acivas un timer que cada 3 seg. exploras si te llega la cadena ?code ...
Te recomiendo que experimentes con el evento (bOnEvent) que te dará el activeX a cualquier cambio en la pagina, y no tienes que hacer cada 3 segundos, peticiones al ActiveX
Yo ya casi no me acuerdo, pero recuerdo que podias hacer algo asi
oActiveX:bOnEvent = { | event, aParams, pParams | EventInfo( event, aParams, pParams ) }
Y luego dentro de la funcion las acciones que quieras ejecutar en funcion del evento
Creo que el código és mas interesante, pero es solo una opinion por si te sirve...
En caso de que no te guste la idea, te recomiendo que dentro tengo_code() -> desactivar/activar timer, porque a veces el ActiveX se te puede encallar varios segundos y te lanzaria el timer otra peticion... (bueno, no se si me explico...)
C.
Muy bueno
Te recomiendo que experimentes con el evento (bOnEvent) que te dará el activeX a cualquier cambio en la pagina, y no tienes que hacer cada 3 segundos, peticiones al ActiveX
Yo ya casi no me acuerdo, pero recuerdo que podias hacer algo asi
oActiveX:bOnEvent = { | event, aParams, pParams | EventInfo( event, aParams, pParams ) }
Y luego dentro de la funcion las acciones que quieras ejecutar en funcion del evento
Code: Select all | Expand
function EventInfo( event, aParams, pParams )
DO CASE
CASE event == "StatusTextChange"
CASE event == "ProgressChange"
CASE event == "TitleChange"
CASE event == "DocumentComplete"
* Aqui quizas podrias chequear tu cadena...
CASE event == ...
ENDCASE
return NILCreo que el código és mas interesante, pero es solo una opinion por si te sirve...
En caso de que no te guste la idea, te recomiendo que dentro tengo_code() -> desactivar/activar timer, porque a veces el ActiveX se te puede encallar varios segundos y te lanzaria el timer otra peticion... (bueno, no se si me explico...)
C.
Salutacions, saludos, regards
"...programar es fácil, hacer programas es difícil..."
UT Page -> https://carles9000.github.io/
Forum UT -> https://discord.gg/bq8a9yGMWh
HIX -> https://github.com/carles9000/hix
"...programar es fácil, hacer programas es difícil..."
UT Page -> https://carles9000.github.io/
Forum UT -> https://discord.gg/bq8a9yGMWh
HIX -> https://github.com/carles9000/hix
Re: API Bancaria (SOLUCIONADO)
Gracias a todos por sus comentarios.
Carles, desconocía el tema de los eventos en ActiveX. Es muy buena idea para evitar que el sistema se colapse con el timer si la web no responde rápidamente.
He quitado el timer de PEDIR_CODE
He pasado la función ShowPageWeb a método de la clase TApiBBVA y le he añadido el control de eventos
Y el controlador de eventos con todos los que he detectado en las prueba que he realizado." DocumentComplete" es el perfecto, porque se activa al completar la página.
Carles, desconocía el tema de los eventos en ActiveX. Es muy buena idea para evitar que el sistema se colapse con el timer si la web no responde rápidamente.
He quitado el timer de PEDIR_CODE
Code: Select all | Expand
method PEDIR_CODE () class TApiBBVA
local oDlg, oActiveX, nPos, oApi, cUrl
cUrl := "https://connect.bbva.com/sandboxconnect"
oApi := Self
define dialog oDlg from 100, 100 to 950,1000 title "Navegar" pixel ;
of ::oWnd
activate dialog oDlg on init ;
( oActiveX := oApi:ShowPageWeb( oDlg, ;
cUrl + "?scope=" + ;
"&client_id=" + oApi:cAppID + ;
"&redirect_uri=" + oApi:cRedirect_Uri + ;
"&response_type=code", 0, 0, 825, 950 ) )
return oDlg:nResult = ID_OK
He pasado la función ShowPageWeb a método de la clase TApiBBVA y le he añadido el control de eventos
Code: Select all | Expand
method ShowPageWeb( oParent, cUrl, nT, nL, nH, nW ) class TApiBBVA
local oActiveX, oHttp, oActiveXdo
oActiveX := TActiveX():New( oParent, "Shell.Explorer.2", nT, nL, nW, nH )
oActivex:Silent := .T. // aqui silence... en el script.
oActiveX:bOnEvent := { | event, aParams, pParams | ;
::EventInfo(event, aParams, pParams, oActiveX, oParent ) }
oActiveX:Do( "Navigate2", cUrl )
oActivex:SetFocus()
WHILE oActivex:Busy
SysWait(.2)
ENDDO
oActiveXdo := oActiveX:Document()
oHttp := oActiveX:GetProp( "Document" ) // -> Object Document
if Empty( oHttp )
MsgInfo( "Problemas en el Site...", ;
"Problemas en el Site..." )
RETURN( .F. )
endif
Return oActiveX
Y el controlador de eventos con todos los que he detectado en las prueba que he realizado." DocumentComplete" es el perfecto, porque se activa al completar la página.
Code: Select all | Expand
method EventInfo( event, aParams, pParams, oActiveX, oDlg ) class TApiBBVA
DO CASE
CASE event == "PropertyChange" .or. ;
event == "StatusTextChange" .or. ;
event == "ProgressChange" .or. ;
event == "TitleChange" .or. ;
event == "BeforeNavigate2" .or. ;
event == "NavigateComplete2" .or. ;
event == "NavigateError" .or. ;
event == "BeforeScriptExecute" .or. ;
event == "DownloadBegin" .or. ;
event == "DownloadComplete" .or. ;
event == "CommandStateChange" .or. ;
event == "FileDownload" .or. ;
event == "SetSecureLockIcon"
CASE event == "DocumentComplete"
if ::TENGO_CODE (oActiveX)
oDlg:End (ID_OK)
endif
otherwise
? 'Evento', event
ENDCASE
return NIL