【发布时间】:2018-02-28 21:06:37
【问题描述】:
我的应用程序使用在我的客户系统上注册的任何 WSH 活动脚本。这通常意味着仅 VBScript 和 JScript。有时是 Python,很少是 Perl。 但只有 VBScript 和 JScript 是绝对肯定会安装在客户系统上的。现在我需要该应用程序来发送 SMS 消息。
我想我会使用纯 JScript 调用 Plivo API。没有外部库(即 jQuery),没有外部应用程序/服务器(即 NodeJS)。只是简单的 XMLHTTP 请求,因为我不知道客户系统上安装了什么,我不想让他们安装任何东西。
Plivo 的 API 文档几乎解释了如何做所有事情......除了身份验证部分!它只是说明您应该在每次调用时使用基本身份验证,使用您的 AUTHID 和 AUTHTOKEN。但是没有例子。
由于 Plivo 提供了 Python Helper 库,而且我的开发环境中恰好有 Python,所以我首先确保一切顺利,所以我安装了他们的 helper 库,获取了他们的 Python 代码示例,放入我自己的ID 和 Token,我设法给自己发了一条短信:
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。
【问题讨论】:
标签: api restful-authentication jscript sms-gateway plivo