首页 > 解决方案 > VBA:PUT 请求的身份验证问题

问题描述

我无法从 Excel VBA 验证以下对 Freshdesk API v2 的 PUT 请求。我是这个(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

标签: excelvba

解决方案


我已经破解了。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)

推荐阅读