这确实是一个微不足道的问题。 我对此很陌生,并尝试在 VBA 中使用 Sendpulse API。它有一个获取授权的方法:https://sendpulse.com/integrations/api#libraries
授权 API 部分的图片
我的VBA代码如下:
Dim URL As String
Dim xmlHttp As Object
Dim data As String
Set xmlHttp = CreateObject("MSXML2.ServerXMLHTTP")
URL = "https://api.sendpulse.com/oauth/access_token"
data = "grant_type=client_credentials , client_id=-redacted-, client_secret=-redacted--"
xmlHttp.Open "POST", URL, False 'False means wait for response after send
xmlHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
xmlHttp.send data
Debug.Print xmlHttp.ResponseText
我收到 * ': responseText : "{"error":"unsupported_grant_type","error_description":"授权服务器不支持授权授予类型。","hint":"检查所有必需的参数是否正确"*
技术支持使用“postman”验证输入参数是否有效。我相当确定这是一个 VBA 语法问题。技术支持人员不了解有关 excel/VBA 的 didleysquat。
如果专家的眼睛能看出问题出在哪里,我将不胜感激。
我已经尝试了上面 data=... 中的所有引号组合,例如 数据 = "grant_type=""client_credentials"" 、 client_id=""xxxx"" 、 client_secret=""xxxx"""
但没有任何作用。我什至尝试用冒号代替=。也许标题是错误的? (ps.他们告诉我不需要标头,没有它仍然是一样的)
仔细构建您的数据字符串:
' Json skeleton.
Const DataMask As String = "{""grant_type"":""{0}"",""client_id"":""{1}"",""client_secret"":""{2}""}"
Dim Data As String
' Json data fill.
Data = DataMask
Data = Replace(Data, "{0}", "client_credentials")
Data = Replace(Data, "{1}", "237b4af9c99d0f89bdbd876dcd5a0000")
Data = Replace(Data, "{2}", "a99e7d506d3701c5c04de3db1913eeee")
' Json check.
Debug.Print Data
结果:
{"grant_type":"client_credentials","client_id":"237b4af9c99d0f89bdbd876dcd5a0000","client_secret":"a99e7d506d3701c5c04de3db1913eeee"}