Получение кода авторизации Oauth2 через Access VBA - PullRequest
0 голосов
/ 08 мая 2020

Я работаю над подключением API в системе MS Access нашей компании. Раньше запрос работал нормально, но теперь начал действовать. Следующие фрагменты кода были созданы предыдущим разработчиком, который здесь больше не работает.

Цель: я хочу сделать запрос API поставщику электронных c деталей.

Для этого мне нужно сначала авторизоваться с помощью Oauth2, и это вызывает у меня проблемы. Комментарий в коде показывает, где я заметил свою проблему:

Function getAuthCode(client_ID As String, redirect_uri As String, API_UserName As String, API_PassWord As String) As String
Dim strUrl As String
Dim out As String
Dim searchStart As String
Dim searchEnd As String
Dim searchPostUrl As String
Dim cSRFToken As String
Dim cSRFTokenStart  As Integer
Dim cSRFTokenEnd  As Integer

strUrl = "https://api.digikey.com/v1/oauth2/authorize?response_type=code&client_id=" & client_ID & "&redirect_uri=" & redirect_uri
Dim strFormData As String
strFormData = "pf.username=" & API_UserName & "&pf.pass=" & API_PassWord
out = getResponse(strUrl, "GET", "application/x-www-form-urlencoded", strFormData)
'The Problem appears here
searchStart = InStr(out, "action=")
If searchStart <> 0 Then
    searchEnd = InStr(out, "authorization.ping")
    searchPostUrl = "https://api.digikey.com" & MID(out, searchStart + 8, searchEnd + 10 - searchStart)
    cSRFTokenStart = InStr(InStr(out, "cSRFToken"), out, "value")
    cSRFTokenEnd = InStr(cSRFTokenStart, out, ">")
    cSRFToken = MID(out, cSRFTokenStart + 7, cSRFTokenEnd - (cSRFTokenStart + 9))
    strFormData = "pf.oauth.authz.consent=allow&check-user-approved-scope=true&cSRFToken=" & cSRFToken
    out = getResponse(searchPostUrl, "POST", "application/x-www-form-urlencoded", strFormData)
End If
getAuthCode = out

Функция getResponse записывается следующим образом:

Function getResponse(url As String, requestMethod As String, contentType As String, requestDataToSend As String) As String
Dim hReq As Object

Set hReq = CreateObject("MSXML2.ServerXMLHTTP.6.0")
With hReq
    .Open requestMethod, url, False
    .setRequestHeader "Content-type", contentType
    .send requestDataToSend
End With
getResponse = hReq.responseText

Я хочу подключиться к API через: https://api.digikey.com/v1/oauth2/authorize?response_type=code&client_id=MYCLientID&redirect_uri=MyRedirect_URI

Строка «out» непосредственно перед комментарием должна содержать исходный код страницы, к которой я подключился, но вместо этого это исходный код страницы входа в систему непосредственно перед ним. Похоже, что go логин не прошел должным образом.

Что я могу попытаться исправить?

...