2016-06-04 3 views
0

Я экспериментировал с созданием службы AngularJS, которую можно вызывать из контроллера и отправлять текстовые сообщения на основе определенных событий в приложении. Реализация основана на this, и работает следующим образом:Служба AngularJS для отправки SMS-сообщений Twilio

Во-первых, у нас есть служба:

function BusinessService($http) { 

    this.twilioSMS = { 

    sendMessage: function(to, from, body) { 

     var accountSid = 'xxx'; 
     var authToken = 'xxx'; 

     var testEndpoint = 'https://api.twilio.com/2010-04-01/Accounts/' + accountSid + '/SMS/Messages.json'; 
     var liveEndpoint = 'https://api.twilio.com/2010-04-01/Accounts/' + accountSid + '/Messages.json'; 

     var data = { 
     To: to, 
     From: from, 
     Body: body 
     }; 

     $http({ 
     method: 'POST', 
     url: testEndpoint, 
     data: data, 
     dataType: 'json', 
     contentType: 'application/x-www-form-urlencoded', 
     beforeSend: function(xhr) { 
      xhr.setRequestHeader("Authorization", 
      "Basic " + btoa(accountSid + ":" + authToken) // ! 
     ); 
     }, 
     success: function(data) { 
      console.log("Got response: %o", data); 
      if (typeof successCallback == 'function') 
      successCallback(data); 
     }, 
     error: function(jqXHR, textStatus, errorThrown) { 
      console.log("Request failed: " + textStatus + ", " + errorThrown); 
      if (typeof failCallback == 'function') 
      failCallback(jqXHR, textStatus, errorThrown); 
     } 
     }) 

    } 

    } 

} 

Затем установки его в контроллере:

function ConsumerBusinessProfileCtrl($scope, BusinessService) { 

    $scope.sendMessage = function(to, from, body) { 
    return BusinessService.twilioSMS.sendMessage(to, from, body) 
    } 

} 

И затем, назвав его из вид:

<a ng-click="sendMessage('+12345678901', '+15005550006', 'Hey Jenny! Good luck on the bar exam!')">Send Message</a> 

Я протестировал jsfiddle example с моей учетной записью, authToken и телефонными номерами, и она работает нормально. Но моя реализация завершается с ошибкой 401 (UNAUTHORIZED). Часть меня думает, что это потому, что $http не поддерживает beforeSend или afterSend. Но я не уверен? Может ли кто-нибудь здесь вести меня в правильном направлении?

+0

Как вы реализуете аутентификации. –

+0

Аутентификация @RomanC происходит в 'beforeSend' с переменными' accountSid' и 'authToken', я сделал несколько поисковых запросов и обнаружил, что на самом деле jQuery фактически не поддерживает это, но рекомендует использовать перехватчики. К сожалению, я не слишком хорошо знаком с этой концепцией и как ее реализовать в моем случае. – methuselah

+0

Перехватчики - слишком яростная концепция без кода, это вне темы. –

ответ

0

Измененный $ HTTP к следующему, чтобы исправить положение:

$http({ 
    method: 'POST', 
    url: testEndpoint, 
    data: data, 
    transformRequest: function(obj) { 
    var str = []; 
    for (var p in obj) 
     str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p])); 
    return str.join("&"); 
    }, 
    headers: { 
    'Authorization': 'Basic ' + btoa(accountSid + ':' + authToken), 
    'Content-Type': 'application/x-www-form-urlencoded' 
    }, 
}).success(function(response) { 
    console.log(response); 
}).error(function(error) { 
    console.log(error); 
}); 
} 
Смежные вопросы