Php 无法从嵌套服务器获取访问令牌

Php 无法从嵌套服务器获取访问令牌,php,node.js,oauth,nest-api,Php,Node.js,Oauth,Nest Api,我在获取Nest的访问令牌时遇到问题 我在node.js应用程序上使用了nest api,但在获取访问令牌时遇到了问题 无论我是从不同的客户端、设备还是帐户连接,这都无关紧要 我曾经有php代码自动执行oAuth 2.0获取令牌的过程,它工作正常,但停止了工作 无论我是使用“OAuth重定向URL”自动获取令牌,还是尝试在没有URL的情况下获取令牌,我总是会遇到以下错误: 发生错误。获取客户端信息时出错 仅此而已,没有日志条目或任何内容,只有非描述性消息 例如,如果我创建了一个新帐户,然后向该帐

我在获取Nest的访问令牌时遇到问题

我在node.js应用程序上使用了nest api,但在获取访问令牌时遇到了问题

无论我是从不同的客户端、设备还是帐户连接,这都无关紧要

我曾经有php代码自动执行oAuth 2.0获取令牌的过程,它工作正常,但停止了工作

无论我是使用“OAuth重定向URL”自动获取令牌,还是尝试在没有URL的情况下获取令牌,我总是会遇到以下错误:

发生错误。获取客户端信息时出错

仅此而已,没有日志条目或任何内容,只有非描述性消息

例如,如果我创建了一个新帐户,然后向该帐户添加了一个客户端,我将获得一个URL,在该URL中,我可以为希望从我的客户端控制其嵌套产品的用户帐户检索访问令牌--该URL如下所示:

https://home.testc.nestlabs.com/login/oauth2?client_id=XXXXX&state=STATE
当您输入此URL时,它应该请求您的嵌套凭据,然后生成一个访问令牌。
这在执行完全相同的步骤时工作得很好,但现在它甚至不要求提供凭据,我得到的只是那条消息,其他什么都没有。

我装配了这个批处理文件,以帮助快速测试Nest API读/写和OAuth协商。对不起,有点乱,希望能有帮助。您需要下载curl包并指向它。还有。另存为
.bat
并根据需要注释/取消注释
rem

@echo off

set curl_path=c:\nest\curl
set client_pin=[you get this from the provided URL on the client page]
set client_id=[you get this from the client page]
set client_secret=[you get this from the client page]
set access_token=[you'll get this from a successful oauth]

rem set new_url=https://firebase-apiserver02-tah01-iad01.dapi.production.nest.com:9553

rem TOGGLE FOR AUTH
rem set GET_AUTH=true
rem TOGGLE FOR AUTH

rem TOGGLE FOR DEAUTH
set GET_DEAUTH=true
rem TOGGLE FOR DEAUTH

rem TOGGLE FOR GET
rem set GET_DATA=true
rem TOGGLE FOR GET

rem TOGGLE FOR SET
rem set SET_DATA=true
rem TOGGLE FOR SET

rem TOGGLE FOR STREAM
rem set STREAM_DATA=true
rem TOGGLE FOR STREAM

rem DEVICE_CONFIG
rem virtual:
set dev_id1=[manually enter example devid]
rem real:
set dev_id2=

set dev_id=%dev_id1%
rem DEVICE_CONFIG_END

rem VALUE_CONFIG
set value1=target_temperature_f
set value2=name
set value3=hvac_mode
set value4=ambient_temperature_f
set value5=target_temperature_high_f

set value_name=%value3%

set new_int_value=77
set new_string_value=heat

set new_value=%new_string_value%
rem VALUE_CONFIG_END

rem STRUCT_CONFIG
set struct1=devices
set struct2=structures
set struct3=metadata
set struct4=devices/thermostats
set struct4=devices/smoke_co_alarms
set struct4=devices/company

set struct_name=%struct2%
rem STRUCT_CONFIG_END


set url=https://developer-api.nest.com/%struct_name%.json?auth=%access_token%
set url_by_id=%new_url%/devices/thermostats/%dev_id%.json?auth=%access_token%
set url_by_value=%new_url%/devices/thermostats/%dev_id%/%value_name%.json?auth=%access_token%

set header=Content-Type: application/json

rem GET_DATA
set get_struct=curl\curl.exe -k -L %url%
set get_by_id=curl\curl.exe -k -L %url_by_id%
set get_by_value=curl\curl.exe -k -L %url_by_value%

set get_url=%get_by_id%
rem GET_DATA_END

rem OAUTH
rem set oauth=curl\curl.exe -k -i -v -X POST -d "code=%client_pin%&client_id=%client_id%&client_secret=%client_secret%&grant_type=authorization_code" https://api.home.nest.com/oauth2/access_token

set oauth=curl\curl.exe -k -i -v -X POST "https://api.home.nest.com/oauth2/access_token?code=%client_pin%&client_id=%client_id%&client_secret=%client_secret%&grant_type=authorization_code"

rem SET_DATA
rem set change_num=curl\curl.exe -k -i -L -X PUT %url_by_value% -H "Content-Type: application/json; charset=UTF-8" -d "%new_int_value%"

rem set change_text=curl\curl.exe -k -i -L -X PUT "%url_by_value%" -H "%header%" -d '"%new_string_value%"'
rem set change_text=curl\curl.exe -k -i -L -X PUT -H "Content-Type: application/json; charset=UTF-8" -d "{"%value_name%":%new_value%}" %url_by_id%

rem set change_text=curl\curl.exe -k -i -L -X PUT "%url_by_value%" -H "%header%" -d '"%new_value%"'

rem THIS WORKS:
rem set change_text=curl\curl.exe -k -L -X PUT "https://developer-api.nest.com/devices/thermostats/%dev_id%?auth=%access_token%" -H "Content-Type: application/json" -d "{\"hvac_mode\":\"heat\"}"

rem set stream=curl\curl.exe -k -i -v -L -X GET -H "Accept: application/json" -H "Accept: text/event-stream" -H "Keep-Alive: 60" -H "Connection: keep-alive" "https://firebase-apiserver02-tah01-iad01.dapi.production.nest.com:9553/?auth=[FILL IN AUTH_TOKEN]"

set deauth=curl\curl.exe -k -i -v -L -X DELETE "https://api.home.nest.com/oauth2/access_tokens/%access_token%"

set set_data=%change_text%

echo.

if defined GET_AUTH %oauth%
if defined GET_AUTH echo.

if defined GET_DEAUTH %deauth%
if defined GET_DEAUTH echo.

if defined GET_DATA echo %get_url%
if defined GET_DATA echo.
if defined GET_DATA %get_url%
if defined GET_DATA echo.

if defined SET_DATA echo %set_data%
if defined SET_DATA echo.
if defined SET_DATA %set_data%
if defined SET_DATA echo.

if defined STREAM_DATA %stream%
if defined STREAM_DATA echo.

goto end_com

- To **change** the specific structure to away. The value here is a string so be sure to include the single quotes:

        curl -v -L -X PUT "https://developer-api.nest.com/structures/<STRUCTURE ID>/away?auth=<AUTH_TOKEN>" -H "Content-Type: application/json" -d '"away"'

:end_com

goto end_com2

echo %curl_path%
echo %client_pin%
echo %client_id%
echo %client_secret%
echo %access_token%

:end_com2
@echo关闭
设置curl\u path=c:\nest\curl
set client_pin=[您可以从客户端页面上提供的URL获取此信息]
set client_id=[您可以从客户端页面获取此信息]
set client_secret=[您可以从客户端页面获取此信息]
set access_token=[您将从一个成功的oauth获得此信息]
rem设置新url=https://firebase-apiserver02-tah01-iad01.dapi.production.nest.com:9553
用于身份验证的rem切换
rem set GET_AUTH=真
用于身份验证的rem切换
用于DEAUTH的rem切换
设置GET_DEAUTH=true
用于DEAUTH的rem切换
快速眼动开关
rem set GET_DATA=真
快速眼动开关
设置的rem切换
rem set_数据=真
设置的rem切换
流的rem切换
rem设置流_数据=真
流的rem切换
rem设备配置
rem虚拟:
设置dev_id1=[手动输入示例devid]
rem real:
设置dev_id2=
设置dev\u id=%dev\u id1%
rem设备配置结束
rem值配置
设定值1=目标温度
设置值2=名称
设置值3=hvac\U模式
设定值4=环境温度
设定值5=目标温度高
设置值\u名称=%value3%
设置新的_int_值=77
设置新的\u字符串\u值=热量
设置新值=%new\u string\u value%
rem值配置结束
rem结构配置
set struct1=设备
set struct2=结构
set struct3=元数据
设置结构4=设备/恒温器
设置结构4=设备/烟雾报警
set struct4=设备/公司
设置结构名称=%struct2%
rem结构配置结束
设置url=https://developer-api.nest.com/%struct_name%.json?auth=%access_token%
设置url\u by\u id=%new\u url%/devices/thermostats/%dev\u id%.json?auth=%access\u token%
设置url\u by\u value=%new\u url%/devices/thermostats/%dev\u id%/%value\u name%.json?auth=%access\u token%
set header=内容类型:application/json
rem获取数据
设置get_struct=curl\curl.exe-k-L%url%
设置get\u by\u id=curl\curl.exe-k-L%url\u by\u id%
设置get_by_value=curl\curl.exe-k-L%url_by_value%
设置获取url=%get\u by\u id%
rem获取数据\u结束
动植物
rem set oauth=curl\curl.exe-k-i-v-X POST-d“代码=%client\u pin%&client\u id=%client\u id%&client\u secret=%client\u secret%&grant\u type=授权码”https://api.home.nest.com/oauth2/access_token
设置oauth=curl\curl.exe-k-i-v-X POST“https://api.home.nest.com/oauth2/access_token?code=%client_pin%&client_id=%client_id%&client_secret=%client_secret%&grant_type=authorization_code"
rem集合数据
rem set change\u num=curl\curl.exe-k-i-L-X PUT%url\u by\u value%-H“内容类型:application/json;charset=UTF-8“-d”%new\u int\u value%”
rem set change\u text=curl\curl.exe-k-i-L-X PUT“%url\u by\u value%”-H“%header%”-d'%new\u string\u value%”
rem set change_text=curl\curl.exe-k-i-L-X PUT-H“内容类型:application/json;charset=UTF-8”-d“{”%value\u name%:%new\u value%}”%url\u by\u id%
rem set change_text=curl\curl.exe-k-i-L-X PUT“%url\u by_value%”-H“%header%”-d''%new_value%”
这项工作:
rem set change_text=curl\curl.exe-k-L-X PUT“https://developer-api.nest.com/devices/thermostats/%dev_id%?auth=%access_token%“-H”内容类型:application/json“-d”{“hvac\U模式\”:“热量\”}”
rem set stream=curl\curl.exe-k-i-v-L-X GET-H“接受:应用程序/json”-H“接受:文本/事件流”-H“保持活动:60”-H“连接:保持活动”https://firebase-apiserver02-tah01-iad01.dapi.production.nest.com:9553/?auth=[填写身份验证令牌]”
设置deauth=curl\curl.exe-k-i-v-L-X DELETE“https://api.home.nest.com/oauth2/access_tokens/%access_token%"
设置数据=%change\u text%
回声。
如果已定义,则获取授权%oauth%
如果已定义,则获取授权回显。
如果已定义,则获取\u授权%DEAUTH%
如果已定义,则获取_DEAUTH echo。
如果定义了获取数据回显%GET\u url%
如果已定义,则获取_数据回显。
如果定义了获取数据%GET\u url%
如果已定义,则获取_数据回显。
如果定义了SET_数据回显%SET_数据%
如果已定义,则设置_数据回显。
如果定义了集合数据%集合数据%
如果已定义,则设置_数据回显。
如果定义了流\u数据%STREAM%
如果定义了流,则返回数据。
转到终点站
-将**特定结构更改为“远离”。此处的值是一个字符串,因此请确保包含单引号:
curl-v-L-X PUT“https://developer-api.nest.com/structures//away?auth=“-H”内容类型:application/json“-d”“away”
:end_com
转到end_com2
回显%curl\u路径%
回显%client\u pin%
回显%client\u id%
回显%client\u secret%
回显%access\u令牌%
:end_com2

医生说指向是的,他们会。谢谢。可能值得一看这个PHP类的NestAPI。我发现它对于访问嵌套数据非常有用。