JavaScript松弛api jquery
我的问题很简单,我想创建这个程序只需要几个小时。然而,现在我整天都在做这件事,试图找出我可能做错了什么 我所要做的就是用他们的博客向slack发布消息。我已经能够使用宽松裤成功地发送消息 这是测试输出的urlJavaScript松弛api jquery,javascript,jquery,ajax,slack-api,Javascript,Jquery,Ajax,Slack Api,我的问题很简单,我想创建这个程序只需要几个小时。然而,现在我整天都在做这件事,试图找出我可能做错了什么 我所要做的就是用他们的博客向slack发布消息。我已经能够使用宽松裤成功地发送消息 这是测试输出的url https://slack.com/api/chat.postMessage?token=xoxp-xxxxxx-xxxxxxxx-xxxxxxxx-xxxxxxxxxxx&channel=XXXXXXXX&text=Just%20need%20the%20url&
https://slack.com/api/chat.postMessage?token=xoxp-xxxxxx-xxxxxxxx-xxxxxxxx-xxxxxxxxxxx&channel=XXXXXXXX&text=Just%20need%20the%20url&as_user=jheuman&pretty=1
然后,我决定使用我的文件系统提供的这个html文件在本地进行尝试
<!DOCTYPE html>
<html>
<head>
<title>Testing Slack API</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
<button onClick="test()">Test</button>
<button onClick="test2()">Authorization Test</button>
<script>
function test() {
var apiUrl = "https://slack.com/api/chat.postMessage";
var token = "xoxp-xxxxx...";//my token has been omitted for security;
var channel = "#general";
var text = "Testing slack api";
var user = "jheuman";
var actualToken = "Bearer " + token;
$.ajax({
headers: {
'Authorization':actualToken,
'Content-Type':'application/json'
},
data: JSON.stringify({
"channel": channel,
"text": text,
"as_user": user
}),
dataType: 'json',
processData: false,
type: 'POST',
url: apiUrl
})
.done(function(data) {
console.log(JSON.stringify(data));
})
.fail(function(response) {
console.log(JSON.stringify(response));
});
};
function test2() {
var apiUrl = "https://slack.com/api/auth.test";
var token = "xoxp-xxxxx..."; //my token has been omitted for security
var channel = "#general";
var text = "Testing slack api";
var user = "jheuman";
var actualToken = "Bearer" + token;
$.ajax({
headers: {
'Authorization':actualToken
},
type: 'POST',
url: apiUrl,
})
.done(function(data) {
console.log(JSON.stringify(data));
})
.fail(function(response) {
console.log(JSON.stringify(response));
});
};
</script>
所以根据朋友的建议,我在服务器上试用了它。我过去常在8887端口上菜。首先不设置cors标头,然后设置cors标头。两者都没有用。我收到了同样的错误
如您所见,我也尝试了auth.test调用,但收到了相同的错误
Slack特别声明他们更喜欢授权头,并且api可以处理json数据
我尝试过的其他事情:
数据中没有包含令牌的标头字段:
data: JSON.stringify({
'token':actualToken,
'channel': channel,
'text': text,
'as_user': user
}),
dataType: 'json',
processData: false,
type: 'POST',
url: apiUrl
收到的错误:
{"ok":false,"error":"invalid_form_data"}
{"ok":false,"error":"invalid_form_data"}
在没有“承载者”的数据中没有带令牌的头字段:
data: JSON.stringify({
'token':token,
'channel': channel,
'text': text,
'as_user': user
}),
dataType: 'json',
processData: false,
type: 'POST',
url: apiUrl
收到的错误:
{"ok":false,"error":"invalid_form_data"}
{"ok":false,"error":"invalid_form_data"}
我已经调查过但认为不会影响结果的事情
那么,我如何让这个职位申请生效呢
我没有设置jquery或ajax,这只是我在过去使用过的,所以如果您有不同的请求库要使用,我洗耳恭听
如果您需要更多信息,我将尝试提供给您您需要使用适当的CORS标题回复CORS飞行前信息,以使此工作正常进行。其中之一就是访问控制允许标头。该标头需要包含与访问控制请求标头相同的值(或更多) 更详细地解释此设置
headers: {
'Authorization':actualToken,
'Content-Type':'application/json',
'Access-Control-Allow-Headers':'x-requested-with'
},
由于正确配置CORS以发送内容类型为
application/json
的数据可能很棘手,因此我建议将请求发送为application/x-www-form-urlencoded
,这是AJAX的默认设置
例如:
var apiUrl = "https://slack.com/api/chat.postMessage";
var token = MY_TOKEN;
var channel = "general";
var text = "Testing slack api";
var user = "jheuman";
$.ajax({
data: {
"token": token,
"channel": channel,
"text": text,
"as_user": user
},
dataType: 'text',
type: 'POST',
url: apiUrl,
error: function(xhr,status,error){
console.log("error: " + error);
},
success: function(data) {
console.log("result: " + data);
}
});
如果您得到CORS错误,您可以添加crossDomain:true
此解决方案经过测试,在普通浏览器中运行时可以正常工作。Aha,那么您认为如果我使用nodejs,调用会正常进行吗?这是我的最终目标,只是想在我尝试将其放在服务器上之前进行测试。你是否尝试从频道名称中删除哈希?@vol7ron我使用URL末尾的7位数字,但不想在这里发布,因此这不是问题,但谢谢你。基于你的错误消息,我认为这是一个很长的机会;)我仍然需要更透彻地阅读您的问题,但我很好奇您是否无法创建一个带有令牌的公共空闲通道,以便其他人进行更透彻的测试。CORS是一个笨拙的野兽,这里的一些答案似乎应该有效。您的服务器需要
访问控制允许源代码的标题:
调用的API正在供应商服务器上运行,他无法控制该服务器。我想Brian是对的。设置cors是在服务器端完成的,这就是为什么我很难找到解决问题的方法,因为我无法更改松弛的服务器。我试过了,但没用。但是谢谢你的帮助!很乐意帮忙。顺便说一句,我不建议在浏览器中运行此代码,因为它会暴露您的令牌。