API Bancaria (SOLUCIONADO)

Re: API Bancaria (SOLUCIONADO)

Postby hmpaquito » Wed Apr 21, 2021 4:40 pm

Buenísimo ! Felicitaciones ! Gracias
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm

Re: API Bancaria (SOLUCIONADO)

Postby Carles » Thu Apr 22, 2021 7:53 am

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

Code: Select all  Expand view
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 NIL


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.
Salutacions, saludos, regards

"...programar es fácil, hacer programas es difícil..."

UT Page -> https://carles9000.github.io/
Forum UT -> https://discord.gg/bq8a9yGMWh
Skype -> https://join.skype.com/cnzQg3Kr1dnk
User avatar
Carles
 
Posts: 1090
Joined: Fri Feb 10, 2006 2:34 pm
Location: Barcelona

Re: API Bancaria (SOLUCIONADO)

Postby gmart1 » Thu Apr 22, 2021 5:45 pm

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
Code: Select all  Expand view
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 view
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 view
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
 
gmart1
 
Posts: 80
Joined: Wed Oct 24, 2007 12:48 pm
Location: Alhaurin de la Torre (MALAGA)

Previous

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 79 guests