我正在试图弄清楚如何将我的NestDK应用程序连接到嵌套API。 用我的用户名和密码登录后,我得到一个“使用此Pincode连接Nest.XXXXXX”。我应该怎么做呢? 我期望access_token请求在后台发生,但我被困在这个页面上。
我将REDIRECT_URL设置为https://api.home.nest.com/oauth2/access_token?client_id=[myClientId]&code=AUTHORIZATION_CODE&client_secret=[myClientSecret]&grant_type=authorization_code
有什么想法吗?
由于
答案 0 :(得分:5)
我最终发现了我的错误。
REDIRECT_URL将在nest开发者网站的客户注册页面中设置,而不仅仅在Constants.java中设置。
我将http://localhost/
放在两个位置,它立即起作用。
答案 1 :(得分:0)
我自己也在讨论这个话题。在花了很多时间查看文档后,我意识到需要PIN才能获得授权码。这是一个单独的请求。您只需为每个引脚发出一次。 (实际上,似乎你只能拨打一次电话,所以保存来自呼叫的输出。)
您可以使用CURL(在文档中)或通过对身份验证服务器的REST调用在终端中执行此操作。我已经提供了一个我在Google Script中成功使用的javascript版本:
/**
* This only works once for each PIN generation. Subsequent calls will fail.
* @param {String} user_pin the pin generated from the website
*/
function getNESTAuthorization(user_pin) {
var client_id = 'put your client id here';
var client_secret = 'put your client secret here';
// var user_pin = 'this is the pin you got from setting up the connection'
var theURL =
'https://api.home.nest.com/oauth2/access_token?code=' + user_pin +
'&client_id=' + client_id +
'&client_secret=' + client_secret +
'&grant_type=authorization_code';
var options = {
"method": "post",
"payload": ""
};
var resp = UrlFetchApp.fetch(theURL, options); // return is a JSON string
eval('var answer = ' + resp.getContentText());
Logger.log(answer.access_token); // This is the unbelievably long authentication token
// you need this for subsequent calls.
return answer.access_token;
}

使用OAuthConfig结构可能有一些很酷的方法可以做到这一点,但我还没有完成那个。