VBA: проблемы аутентификации для запроса PUT - PullRequest
1 голос
/ 24 марта 2020

У меня проблемы с аутентификацией нижеуказанного запроса PUT к Freshdesk API v2 из Excel VBA. Я новичок в этом (VBA), но я думаю, что я ТАК ЗАКРЫТ, может кто-нибудь сказать мне, что не так с этим кодом и почему я получаю отладочное сообщение с кодом

{"code ":" invalid_credentials "," message ":" Вы должны войти в систему, чтобы выполнить это действие. "}?

Sub PutJSON()

  Dim URL As String
  Dim JSONString As String
  Dim objHTTP As New WinHttpRequest
  Dim token As String
  Dim response As String

  URL = "https://ourcompany.freshdesk.com/api/v2/time_entries/14001545629"
  token = "1234567890:X"

  objHTTP.Open "PUT", URL, False
  objHTTP.setRequestHeader "Authorization", "Bearer " & token
  objHTTP.setRequestHeader "Content-Type", "application/json"

  JSONString = "{""billable"" : true, ""note"" : ""Updated from Excel!"", ""timer_running"" : false, ""agent_id"" : 14036310050, ""ticket_id"" : 37784, ""time_spent"" : ""02:00""}"
  objHTTP.send JSONString
  response = objHTTP.responseText

  Debug.Print response

End Sub

1 Ответ

0 голосов
/ 24 марта 2020

Я взломал это. Маркер API передавался в виде строки, но его нужно было закодировать как base64.

Я использовал следующую найденную мной функцию:

Function EncodeBase64(text As String) As String
  Dim arrData() As Byte
  arrData = StrConv(text, vbFromUnicode)

  Dim objXML As MSXML2.DOMDocument
  Dim objNode As MSXML2.IXMLDOMElement

  Set objXML = New MSXML2.DOMDocument
  Set objNode = objXML.createElement("b64")

  objNode.DataType = "bin.base64"
  objNode.nodeTypedValue = arrData
  EncodeBase64 = objNode.text

  Set objNode = Nothing
  Set objXML = Nothing

End Function

и изменил строку

objHTTP.setRequestHeader "Authorization", "Bearer " & token

до

objHTTP.setRequestHeader "Authorization", "Bearer " & EncodeBase64(token)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...