我正在使用VBA在Salesforce中获得授权,然后最终希望运行Salesforce报表并将结果转储到Excel中。我已经编写了以下内容来处理授权,但是却遇到了unsupported_grant_type错误。到目前为止,我拥有的代码:
Dim XMLHTTP As New MSXML2.XMLHTTP60
Dim username As String
Dim password As String
Dim PasswordnUsername As String
Dim argumentString As String
username = "myUsername"
password = "myPassword"
PasswordnUsername = password & ":" & username
argumentString = "?grant_type=password&" & _
"client_id=abc123&" & _
"client_secret=123abc&" & _
"username=" & username & "&password=" & password
MsgBox (argumentString)
Set XMLHTTP = CreateObject("MSXML2.XMLHTTP.6.0")
XMLHTTP.Open "POST", "https://mysalesforce.com/services/oauth2/token", False
XMLHTTP.setRequestHeader "content-type", "application/x-www-form-urlencoded"
XMLHTTP.setRequestHeader "Authorization", "basic " + Base64Encode(PasswordnUsername)
XMLHTTP.send (argumentString)
MsgBox (XMLHTTP.responseText)
当我打印XMLHTTP.responseText时,这是报告unsupported_grant_type的地方。
任何帮助将不胜感激。预先感谢。
T
答案 0 :(得分:1)
您正在使用"Username-password flow"。 URL中的所有参数,而不显示弹出窗口,让用户直接将其凭据直接输入SF(理想情况下,如果存在用户交互,而不是后端系统互相通信,则您应该使用another OAuth flow,因此您的应用无法处理密码,不能泄露密码。)
故障排除:
username
已编码。至少要放%40
而不是@
。如果您的尝试甚至未在用户的登录历史记录中显示-用户名错误/编码错误。login.salesforce.com
登录。也许您的组织禁用了它,仅允许品牌登录域(也会影响API访问)。也许您的管理员只允许从某些IP登录... Authorization: Basic
+用户名并传递此调用,只需在POST的有效负载中传递它就足够了。如果您有邮递员,curl,SoapUI或类似的客户端-在直接跳到VBA之前可能会有所帮助?
这对我有用(带有Content-Type: application/x-www-form-urlencoded
标头)