2014-09-23 45 views
1

我想:翻譯文本與必應翻譯服務的幫助下兵翻譯API使用JavaScript和Node.js的

問題:我得到消息:

的網絡令牌必須有一個簽名最後。進入的令牌 在令牌末尾沒有簽名。

我的編碼前令牌:

http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier=Subtitles&http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider=https://datamarket.accesscontrol.windows.net/&Audience=http://api.microsofttranslator.com&ExpiresOn=1411488480&Issuer=https://datamarket.accesscontrol.windows.net/&HMACSHA256=DsdsshfhhegefrgradfsdffqI= 

代碼:

var request = require('request'); 
var querystring = require('querystring'); 
/** 
* Demo for translating a 'Hello world' from en to uk with help of Bing Translator service 
*/ 
(function() { 
    var makeTranslateRequest = function(token) { //I provided you my token at this point 
     var opts = { 
      text: 'Hello world', 
      from: 'en-gb', 
      to: 'ru' 
     }; 

     request.get({ 
      url: "http://api.microsofttranslator.com/v2/Http.svc/Translate?contentType=text/plain&from=" + opts.from + "&to=" + opts.to + "&text=" + opts.text, 
      headers: { 
       'Authorization': encodeURIComponent('Bearer' + token).replace(/'/g,"%27").replace(/"/g,"%22") 
      } 
     },function(err,res,body) { 
      var translated = body; 
      console.log('translated: ' + translated); 
     }); 
    } 

    /** 
    * Get token and make translate request in a callback 
    */ 
    var requestOpts = querystring.stringify({ 
     client_id: 'Subtitles', 
     client_secret: 'X...................................s=', 
     scope: 'http://api.microsofttranslator.com', 
     grant_type: 'client_credentials' 
    }); 

    request.post({ 
     encoding: 'utf8', 
     url: "https://datamarket.accesscontrol.windows.net/v2/OAuth2-13", 
     body: requestOpts 
    }, function(err, res, body){ 
     var decoded = decodeURIComponent(body.replace(/\+/g, " ")) 
     var token = JSON.parse(decoded).access_token; 
     makeTranslateRequest(token); 
    }); 
})(); 
+2

您確定要發佈HMAC密鑰整個互聯網? – AlexMA 2014-09-23 15:59:29

+0

我已匿名它 – 2014-09-23 17:17:06

回答

2

我讀一些有關here令牌的XML解碼。所以我決定用XMLHTTPRequest替換節點請求模塊。

工作例如:

var request = require('request'); 
var querystring = require('querystring'); 
var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest; 

/** 
* Demo for translating a 'Hello world' from en to uk with help of Bing Translator service 
*/ 
(function() { 
    //INSTEAD OF request.get({}) I use XMLHTTPRequest! Also I stoped to decoding/encoding token. That's the solution. 
    var makeTranslateRequest = function(token) { 
     var xmlhttp = new XMLHttpRequest(); 
     xmlhttp.open("GET", "http://api.microsofttranslator.com/v2/Http.svc/Translate?from=en&to=ru&text=Good", true); 
     xmlhttp.setRequestHeader('Authorization', 'Bearer ' + token); 
     xmlhttp.onreadystatechange = function(){ 
      if (xmlhttp.readyState==4 && xmlhttp.status==200){ 
       console.log(xmlhttp.responseText); 
      } 
     } 
     xmlhttp.send(); 
    } 

    /** 
    * Get token and make translate request in a callback 
    */ 
    var requestOpts = querystring.stringify({ 
     client_id: 'Subtitles', 
     client_secret: 'X............................s=', 
     scope: 'http://api.microsofttranslator.com', 
     grant_type: 'client_credentials' 
    }); 

    request.post({ 
     encoding: 'utf8', 
     url: "https://datamarket.accesscontrol.windows.net/v2/OAuth2-13", 
     body: requestOpts 
    }, function(err, res, body) { 
     var token = JSON.parse(body).access_token; 
     makeTranslateRequest(token); 
    }); 
})();