Мое приложение использует любой из активных сценариев WSH, зарегистрированных в системах моих клиентов. Обычно это означает только VBScript и JScript. Иногда Python, редко Perl. Но только VBScript и JScript абсолютно точно будут установлены в системе клиента. И теперь мне нужно это приложение для отправки SMS-сообщений.
Я решил, что вызову Plivo API, используя чистый JScript. Никаких внешних библиотек (например, jQuery), никаких внешних приложений/серверов (например, NodeJS). Просто простые запросы XMLHTTP, потому что я не знаю, что установлено в системах моих клиентов, и я не хочу, чтобы они что-то устанавливали.
Документация по API Plivo довольно подробно объясняет, как делать все... кроме части аутентификации! В нем просто говорится, что вы должны использовать обычную аутентификацию при каждом вызове, используя свои AUTHID и AUTHTOKEN. Но для него нет примера.
Поскольку Plivo предоставляет вспомогательную библиотеку Python, а в моей среде разработки оказался Python, я сначала убедился, что все пройдет гладко, поэтому я установил их вспомогательную библиотеку, взял их образец кода Python, вставил свой собственный идентификатор и токен. , и мне удалось отправить себе SMS-сообщение:
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)
Достаточно просто, и это прекрасно работает. Я прикинул, что мне понадобится 10 минут, чтобы преобразовать это в чистый JavaScript (только потому, что я медленно печатаю). Что ж, несколько часов / дней спустя я все еще не могу запустить его и всегда получаю ответ об ошибке 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.
Обратите внимание, что все мои идентификаторы/токены/номера телефонов/URL-адреса хороши, поскольку я могу использовать их в своем коде Python. Единственное, что мне никак не удается воспроизвести в JavaScript, — это часть аутентификации.
Может ли кто-нибудь с опытом Plivo помочь мне? Кроме того, пожалуйста, не спрашивайте меня, пробовал ли я использовать NodeJS, jQuery или какую-либо другую внешнюю библиотеку. Да, я использовал Python для тестирования. Но мне нужно реализовать это, используя единственные инструменты, которые, как я известен, доступны на компьютерах моих клиентов, и это JScript.