我的应用程序使用在我的客户上注册的任何WSH活动脚本'系统。这通常只意味着VBScript和JScript。有时Python,很少Perl。 但是只有VBScript和JScript绝对肯定会安装在客户的系统上。现在我需要该应用程序发送短信。
我想我会使用纯JScript调用Plivo API。没有外部库(即jQuery),没有外部应用程序/服务器(即NodeJS)。只是简单的XMLHTTP请求,因为我不知道我的客户安装了什么'系统,我不想让他们安装任何东西。
Plivo的API文档解释了如何做所有事情......除了身份验证部分!它只是声明您应该使用AUTHID和AUTHTOKEN在每次调用时使用基本身份验证。但是没有它的例子。
由于Plivo提供了一个Python Helper库,我碰巧在我的开发环境中安装了Python,我首先确保我可以顺利完成所有工作,所以我安装了他们的帮助库,抓住他们的Python代码示例,放入我自己的ID和令牌,我设法给自己发了一条短信:
import plivo
auth_id = "MY_AUTH_ID"
auth_token = "MY_AUTH_TOKEN"
p = plivo.RestAPI(auth_id, auth_token)
params = {
'src': '15556667777',
'dst' : '15557778888',
'text' : u"Hello, how are you?"
}
response = p.send_message(params)
很简单,效果很好。我认为将它转换为纯JavaScript需要10分钟(仅因为我是一个慢打字员)。好吧,几个小时/几天后,我仍然无法让它运行并始终得到401
(未经授权的)错误响应。这是我第一次尝试的代码:
var plivo_authID = "MY_AUTH_ID";
var plivo_authToken = "MY_AUTH_TOKEN";
var plivo_msgURL = "https://api.plivo.com/v1/Account/"+plivo_authID+" /Message";
var xhr = new ActiveXObject("Msxml2.XMLHTTP.6.0");
xhr.open("POST", plivo_msgURL, false);
xhr.setRequestHeader("Authorization", "Basic " + btoa(plivo_authID + ":" + plivo_authToken));
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send('{"src": "15556667777", "dst" : "15557778888", "text" : "My first Plivo API test"}');
这在send()
声明中失败了。我从Plivo支持获得的唯一建议是在open()
语句参数
所以我将代码更改为:
var plivo_authID = "MY_AUTH_ID";
var plivo_authToken = "MY_AUTH_TOKEN";
var plivo_msgURL = "https://api.plivo.com/v1/Account/"+plivo_authID+" /Message";
var xhr = new ActiveXObject("Msxml2.XMLHTTP.6.0");
xhr.open("POST", plivo_msgURL, false, plivo_authID, plivo_authToken );
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send('{"src": "15556667777", "dst" : "15557778888", "text" : "My first Plivo API test"}');
但是这会导致401
错误。
我使用与上述类似的代码完成了基本身份验证(最值得注意的是在调用我的应用程序时自己的API!),但我无法让它与Plivo一起使用。
我尝试过不同的RequestHeaders组合(包括添加Content-Size),删除btoa(),将url转换为古老的https://username:password@URL
语法,以及其他许多我无法回忆它们的排列所有。结果仍然相同:401
。
请注意,我的ID /令牌/电话号码/ URL都很好,因为我可以在我的Python代码中使用它们。我唯一无法在JavaScript中模仿的是身份验证部分。
任何有Plivo经验的人都可以帮助我吗?另外,请不要问我是否尝试过使用NodeJS,jQuery或其他外部库。我做了,我用Python进行测试。但我需要使用我知道的唯一工具来实现这一点。机器,以及那个JScript。
答案 0 :(得分:1)
好吧,让这个问题熬了几天后,我今天早上回到它并在几分钟内解决了。问题在于我指定的URL:我从未意识到在URL的最后一个“/ Message”部分之前我有一个额外的空间,这显然导致REST调用失败。
所以我修好了但是我仍然无法接到工作电话:我收到200状态(这是一个成功的返回码)但是API声明我应该收到202 ...而且除了SMS之外从未在手机上收到过。通过API,我意识到如果我发出GET语句,我得到了完全相同的回复和我应该收到的对象......这很奇怪,因为我的代码确实发布了POST。
然后我意识到我忘记在我的URL(“/ Message /”)中添加尾部反斜杠,以某种方式导致Plivo服务器响应,就像我发出了GET语句一样。 / p>
最后,我将URL更改为:
var plivo_msgURL = "https://api.plivo.com/v1/Account/"+plivo_authID+"/Message/";
就是这样。
因此,发送短信的完整正确代码是:
var plivo_authID = "MY_AUTH_ID";
var plivo_authToken = "MY_AUTH_TOKEN";
var plivo_msgURL = "https://api.plivo.com/v1/Account/"+plivo_authID+"/Message/";
var xhr = new ActiveXObject("Msxml2.XMLHTTP.6.0");
xhr.open("POST", plivo_msgURL, false, plivo_authID, plivo_authToken );
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send('{"src": "15556667777", "dst" : "15557778888", "text" : "My first SUCCESSFUL Plivo API test!!!"}'
希望上面的内容能够让其他分散注意力的编码人员免受我经历的痛苦时间...... :)。