Я пытаюсь получить токен из API, используя Excel VBA.Он отлично работает, когда я записываю закодированное значение, например так (это просто пример, а не реальное значение):
strEncoded = "nQvS3irniorrFE8fjoijBi8W43nS4e9jOJji"
Но когда я пытаюсь использовать функцию EncodeBase64, она возвращает ошибку 400 Bad Request.Я сравнил две строки, сгенерированные EncodeBase64, и ту, которую я написал, и они идентичны.Я что-то упустил ??
Public Sub XmlHttpTest()
Dim Json As Object
Dim tokenurl As String, strUser, strPassword As String
Dim strEncoded As String
Dim bearer As String, strDUE As String, strToEncode As String
Dim xmlhttp As New MSXML2.ServerXMLHTTP60
Set xmlhttp = CreateObject("MSXML2.serverXMLHTTP")
tokenurl = "https://apigateway.serpro.gov.br"
strUser = LTrim(RTrim(Sheet1.Cells(3, 4).Value))
strPassword = LTrim(RTrim(Sheet1.Cells(4, 4).Value))
strToEncode = strUser & ":" & strPassword
strEncoded = EncodeBase64(strToEncode)
xmlhttp.Open "POST", tokenurl, False
xmlhttp.setRequestHeader "Authorization", "Basic " & strEncoded
xmlhttp.send ("grant_type=client_credentials")
If Not xmlhttp.Status = 200 Then
MsgBox xmlhttp.statusText
Exit Sub
End If
Set Json = ParseJson(xmlhttp.responseText)
End Sub
Function EncodeBase64(text As String) As String
Dim arrData() As Byte
arrData = StrConv(text, vbFromUnicode)
Dim objXML As MSXML2.DOMDocument60
Dim objNode As MSXML2.IXMLDOMElement
Set objXML = New MSXML2.DOMDocument60
Set objNode = objXML.createElement("b64")
objNode.DataType = "bin.base64"
objNode.nodeTypedValue = arrData
EncodeBase64 = objNode.text
Set objNode = Nothing
Set objXML = Nothing
End Function