Я работаю над подключением 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 логин не прошел должным образом.
Что я могу попытаться исправить?