使用 axios 从打字稿调用 Salesforce Rest API
Salesforce Rest API call from typescript using axios
我正在尝试使用 salesforce 和用户访问令牌提供的工具 API 从临时组织中获取记录。让我们说
accesstoken = "abcd"
url = "https://example.my.salesforce.com/services/data/v49.0/tooling/query?q=SELECT+Id,Name+FROM+Account"
我已经使用 axios 节点模块进行 API 调用,如下所示
const options = {
headers: {
"Authorization": "Bearer " + accessToken,
"Content-Type": "application/json"
}
};
axios.get(url, options).then(response => {
console.log(response.status);
if(response.status == 200){
console.log(response.data);
} else {
//do something else
}
});
调用以状态 200 响应,即请求提供了响应。但是我得到的是登录 html 页面
,而不是来自帐户 object 的正确记录
' Login | Salesforcehtml{visibility:
hidden;}a{color:#0070d2;}body{background-color:#F4F6F9;}#content,.container{background-color:#ffffff;}#header{color:#16325c;}body{display:
table;
width:100%;}#content{margin-bottom:24px;}#wrap{height:100%;} html { visibility: hidden; } if (self == top)
{document.documentElement.style.visibility = 'visible';} else
{document.write = ''; top.location = self.location;
setTimeout(function(){document.body.innerHTML='';},
1);window.self.onload=function(evt){document.body.innerHTML='';};}var
SFDCSessionVars={"server":"https://test.salesforce.com/login/sessionserver212.html","im":true,"ah":"active","save":"Save","saveOne":"Save
1 Change","sum":"#p# Saved Usernames","iaac":false,"hac":"Choose a
Username","suo":"1 Saved Username","title":" |
Salesforce","saveMany":"Save #p#
Changes","lpt":"Login","lllbl":"Lightning
Login","host":"test.salesforce.com","le":false,"heu":"Edit Username
List","ic":false,"lh":false,"ur":"https://business-data-8148-dev-ed.cs79.my.salesforce.com","hidp":"Log
In Using","ih":"inactive","dc":"Username removed. Click Save to Commit
Changes."};LoginHint.hideLoginForm();Edit ListSaveCancel
UsernamePassword Caps Lock is on.Remember
me
Forgot Your
Password?To go to your company's login
page, enter the custom domain name.
Custom Domainhttps://domain.my.salesforce.comContinueBackLog In with a Different
Username© 2020
salesforce.com, inc. All rights reserved.<iframe frameborder="0" src="/s.gif" id="marketing"
name="marketing" scrolling="no" title="Marketing"
tabindex="-1"sandbox="allow-forms allow-pointer-lock allow-popups
allow-same-origin allow-scripts" >LoginLoginHint.getSavedIdentities(false);function
handleLogin(){document.login.un.value=document.login.username.value;document.login.width.value=screen.width;document.login.height.value=screen.height;document.getElementById("Login").disabled=true;document.getElementById("login_form").submit();}function
lazyload(){document.getElementById("pwcapsicon").src="/img/icon/capslock_blue.png";document.getElementById("marketing").src="https://c.salesforce.com/login-messages/promos.html";}loader();
'
有谁知道我在这里缺少什么?根据销售人员文档
https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/dome_query.htm
header 中的 accessToken 应该足以进行 API 调用。
注意:我通过 运行
获得了访问令牌
sfdx force:user:display -u <username>
- 您的查询有误。您选择了用于元数据的工具 API 服务(有关 类、触发器、objects、字段、部署、运行 单元测试的信息...)。如果您想查询帐户 - 那是正常数据。试试
/services/data/v49.0/query?q=SELECT+Id,Name+FROM+Account
我认为您不需要 Content-Type
header。你什么都不POST。充其量你可以发送 Accept
(application/json
, application/xml
)
您确定 session ID 有效吗?正如您可以转到组织,设置 -> Session 管理,在那里看到了吗?或者在用户的登录历史中?
可能是您的 SF 管理员做了一些令人讨厌的事情,例如将 session 锁定到它们的来源 IP,或者用户可能没有 API 访问权限。 .. 看看您是否可以先在 Workbench -> Utilities -> REST Explorer 中创建您的调用,然后返回 Axios?
我正在尝试使用 salesforce 和用户访问令牌提供的工具 API 从临时组织中获取记录。让我们说
accesstoken = "abcd"
url = "https://example.my.salesforce.com/services/data/v49.0/tooling/query?q=SELECT+Id,Name+FROM+Account"
我已经使用 axios 节点模块进行 API 调用,如下所示
const options = {
headers: {
"Authorization": "Bearer " + accessToken,
"Content-Type": "application/json"
}
};
axios.get(url, options).then(response => {
console.log(response.status);
if(response.status == 200){
console.log(response.data);
} else {
//do something else
}
});
调用以状态 200 响应,即请求提供了响应。但是我得到的是登录 html 页面
,而不是来自帐户 object 的正确记录' Login | Salesforcehtml{visibility: hidden;}a{color:#0070d2;}body{background-color:#F4F6F9;}#content,.container{background-color:#ffffff;}#header{color:#16325c;}body{display: table; width:100%;}#content{margin-bottom:24px;}#wrap{height:100%;} html { visibility: hidden; } if (self == top) {document.documentElement.style.visibility = 'visible';} else {document.write = ''; top.location = self.location; setTimeout(function(){document.body.innerHTML='';}, 1);window.self.onload=function(evt){document.body.innerHTML='';};}var SFDCSessionVars={"server":"https://test.salesforce.com/login/sessionserver212.html","im":true,"ah":"active","save":"Save","saveOne":"Save 1 Change","sum":"#p# Saved Usernames","iaac":false,"hac":"Choose a Username","suo":"1 Saved Username","title":" | Salesforce","saveMany":"Save #p# Changes","lpt":"Login","lllbl":"Lightning Login","host":"test.salesforce.com","le":false,"heu":"Edit Username List","ic":false,"lh":false,"ur":"https://business-data-8148-dev-ed.cs79.my.salesforce.com","hidp":"Log In Using","ih":"inactive","dc":"Username removed. Click Save to Commit Changes."};LoginHint.hideLoginForm();Edit ListSaveCancel
UsernamePassword Caps Lock is on.Remember me
Custom Domainhttps://domain.my.salesforce.comContinueBackLog In with a Different Username© 2020 salesforce.com, inc. All rights reserved.<iframe frameborder="0" src="/s.gif" id="marketing" name="marketing" scrolling="no" title="Marketing" tabindex="-1"sandbox="allow-forms allow-pointer-lock allow-popups allow-same-origin allow-scripts" >LoginLoginHint.getSavedIdentities(false);function handleLogin(){document.login.un.value=document.login.username.value;document.login.width.value=screen.width;document.login.height.value=screen.height;document.getElementById("Login").disabled=true;document.getElementById("login_form").submit();}function lazyload(){document.getElementById("pwcapsicon").src="/img/icon/capslock_blue.png";document.getElementById("marketing").src="https://c.salesforce.com/login-messages/promos.html";}loader();
Forgot Your Password?To go to your company's login page, enter the custom domain name.'
有谁知道我在这里缺少什么?根据销售人员文档 https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/dome_query.htm header 中的 accessToken 应该足以进行 API 调用。
注意:我通过 运行
获得了访问令牌sfdx force:user:display -u <username>
- 您的查询有误。您选择了用于元数据的工具 API 服务(有关 类、触发器、objects、字段、部署、运行 单元测试的信息...)。如果您想查询帐户 - 那是正常数据。试试
/services/data/v49.0/query?q=SELECT+Id,Name+FROM+Account
我认为您不需要
Content-Type
header。你什么都不POST。充其量你可以发送Accept
(application/json
,application/xml
)您确定 session ID 有效吗?正如您可以转到组织,设置 -> Session 管理,在那里看到了吗?或者在用户的登录历史中?
可能是您的 SF 管理员做了一些令人讨厌的事情,例如将 session 锁定到它们的来源 IP,或者用户可能没有 API 访问权限。 .. 看看您是否可以先在 Workbench -> Utilities -> REST Explorer 中创建您的调用,然后返回 Axios?