Войти на банковский счет (DKB) с VBA после PSD2 - PullRequest
0 голосов
/ 27 октября 2019

Я хочу войти в свой банковский счет, используя Excel и VBA.

У меня был полностью рабочий код, который мог войти в мой банк и загрузить выписки со счета и импортировать новые записи в мой лист Excel. Но после того, как мой банк внедрил PSD2, я не могу заставить его работать, хотя я пытаюсь скопировать все, что делает браузер.

Dim xmlhttp As New MSXML2.XMLHTTP60, htmlDoc As New HTMLDocument

' Open DKB-Site
Call SendXMLRequest(xmlhttp, "https://www.dkb.de/", "GET")

' Log into DKB-Account
htmlDoc.body.innerHTML = SendXMLRequest(xmlhttp, "https://www.dkb.de/banking", "POST", "j_username=myUsername&j_password=myPassword")

' Read XSRFPreventionToken
Dim XSRFToken As String
XSRFToken = Mid(htmlDoc.body.innerHTML, InStr(1, htmlDoc.body.innerHTML, "XSRFPreventionToken") + 28, 24)

' Wait for confirmation on mobile phone
Do
    Sleep 1000
    htmlDoc.body.innerHTML = SendXMLRequest(xmlhttp, "https://www.dkb.de/DkbTransactionBanking/content/LoginWithBoundDevice/LoginWithBoundDeviceProcess/confirmLogin.xhtml?$event=pollingVerification&_=" & DateDiff("s", #1/1/1970#, Now()), "GET")
Loop While htmlDoc.body.innerHTML Like "*WAITING*"

' Send XSRFPreventionToken after confirmation on mobile phone
Call SendXMLRequest(xmlhttp, "https://www.dkb.de/DkbTransactionBanking/content/LoginWithBoundDevice/LoginWithBoundDeviceProcess/confirmLogin.xhtml", "POST", "%24event=next&XSRFPreventionToken=" & WorksheetFunction.EncodeURL(XSRFToken))

' Navigate to financial overview
Call SendXMLRequest(xmlhttp, "https://www.dkb.de/banking/", "GET")

htmlDoc.body.innerHTML = SendXMLRequest(xmlhttp, "https://www.dkb.de/DkbTransactionBanking/content/banking/financialstatus/FinancialComposite/FinancialStatus.xhtml?$event=init", "GET")

' Copy account value
Dim dkbGiro As Currency
dkbGiro = CCur(htmlDoc.getElementsByClassName(" alignRight amount bold")(1).innerText)

' Log off from account
Call SendXMLRequest(xmlhttp, "https://www.dkb.de/DkbTransactionBanking/banner.xhtml?$event=logout", "GET")

Логин по-прежнему работает нормально, но, похоже, проблема в новом двухэтапном-login.

После того, как я подтверждаю вход в приложение и программа отправляет XSRFPreventionToken, я всегда получаю одну и ту же страницу, возвращаемую с сервера, которая говорит мне, чтобы подтвердить вход в мобильном приложении.

Я понятия не имею, что я делаю неправильно, поскольку никаких ошибок не происходит, и это в основном то, что делает браузер.

Любые идеи?

РЕДАКТИРОВАТЬ: Если вам интересно ... МойSendXMLRequest выглядит следующим образом (я не обрабатываю файлы cookie, так как это никогда не требовалось ни в одном банке):

Private Function SendXMLRequest(xmlhttp As MSXML2.XMLHTTP60, url As String, requestType As String, Optional postData As String = "") As String
    With xmlhttp
        .Open requestType, url, True

        If requestType = "POST" Then
            .setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
            .setRequestHeader "Content-Length", Len(postData)
        End If

        .send (postData)

        ' Synchronize async request, so that Excel does not freeze
        While .readyState <> READYSTATE_COMPLETE: DoEvents: Wend

        ' Return response
        SendXMLRequest = .responseText
    End With
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...